|
| 1 | +======================= |
| 2 | +Neo 0.9.0 release notes |
| 3 | +======================= |
| 4 | + |
| 5 | +10th November 2020 |
| 6 | + |
| 7 | + |
| 8 | +Group and ChannelView replace Unit and ChannelIndex |
| 9 | +--------------------------------------------------- |
| 10 | + |
| 11 | +Experience with :class:`ChannelIndex` and :class:`Unit` has shown that these classes are |
| 12 | +often confusing and difficult to understand. |
| 13 | +In particular, :class:`ChannelIndex` was trying to provide three different functionalities in a |
| 14 | +single object: |
| 15 | + |
| 16 | +- providing information about individual traces within :class:`AnalogSignals` like the channel id and the channel name (labelling) |
| 17 | +- grouping a subset of traces within an :class:`AnalogSignal` via the ``index`` attribute (masking) |
| 18 | +- linking between / grouping :class:`AnalogSignals` (grouping) |
| 19 | + |
| 20 | +while grouping :class:`SpikeTrains` required a different class, :class:`Unit`. |
| 21 | +For more pointers to the difficulties this created, and some of the limitations of this approach, |
| 22 | +see `this Github issue`_. |
| 23 | + |
| 24 | +With the aim of making the three functionalities of labelling, masking and grouping |
| 25 | +both easier to use and more flexible, we have replaced :class:`ChannelIndex` and :class:`Unit` |
| 26 | +with: |
| 27 | + |
| 28 | +- array annotations (*labelling*) - already available since Neo 0.8 |
| 29 | +- :class:`~neo.core.ChannelView` (*masking*) - defines subsets of channels within an `AnalogSignal` using a mask |
| 30 | +- :class:`~neo.core.Group` (*grouping*) - allows any Neo object except :class`Segment` and :class:`Block` to be grouped |
| 31 | + |
| 32 | +For some guidance on migrating from :class:`ChannelIndex`/:class:`Unit` |
| 33 | +to :class:`Group` and :class:`ChannelView` see :doc:`../grouping`. |
| 34 | + |
| 35 | +Python 3 only |
| 36 | +------------- |
| 37 | + |
| 38 | +We have now dropped support for Python 2.7 and Python 3.5, and for versions of NumPy older than 1.13. |
| 39 | +In future, we plan to follow NEP29_ + one year, i.e. we will support Python and NumPy versions |
| 40 | +for one year longer than recommended in NEP29. This was `discussed here`_. |
| 41 | + |
| 42 | +Change in default behaviour for grouping channels in IO modules |
| 43 | +--------------------------------------------------------------- |
| 44 | + |
| 45 | +Previously, when reading multiple related signals (same length, same units) from a file, |
| 46 | +some IO classes would by default create a separate, single-channel :class:`AnalogSignal` per signal, |
| 47 | +others would combine all related signals into one multi-channel :class:`AnalogSignal`. |
| 48 | + |
| 49 | +From Neo 0.9.0, the default for all IO classes is to create a one multi-channel :class:`AnalogSignal`. |
| 50 | +To get the "multiple single-channel signals" behaviour, use:: |
| 51 | + |
| 52 | + io.read(signal_group_mode="split-all") |
| 53 | + |
| 54 | +Other new or modified features |
| 55 | +------------------------------ |
| 56 | + |
| 57 | + * added methods :func:`rectify()`, :func:`downsample` and :func:`resample` to :class:`AnalogSignal` |
| 58 | + * :func:`SpikeTrain.merge()` can now merge multiple spiketrains |
| 59 | + * the utility function :func:`cut_block_by_epochs()` gives a new :class:`Block` now |
| 60 | + rather than modifying the block in place |
| 61 | + * some missing properties such as ``t_start`` were added to :class:`ImageSequence`, |
| 62 | + and ``sampling_period`` was renamed to ``frame_duration`` |
| 63 | + * :func:`AnalogSignal.time_index()` now accepts arrays of times, not just a scalar. |
| 64 | + |
| 65 | +See all `pull requests`_ included in this release and the `list of closed issues`_. |
| 66 | + |
| 67 | +Bug fixes and improvements in IO modules |
| 68 | +---------------------------------------- |
| 69 | + |
| 70 | + * NeoMatlabIO (support for signal annotations) |
| 71 | + * NeuralynxIO (fix handling of empty .nev files) |
| 72 | + * AxonIO (support EDR3 header, fix channel events bug) |
| 73 | + * Spike2IO (fix rounding problem, fix for v9 SON files) |
| 74 | + * MicromedIO (fix label encoding) |
| 75 | + |
| 76 | + |
| 77 | +Acknowledgements |
| 78 | +---------------- |
| 79 | + |
| 80 | +Thanks to Julia Sprenger, Samuel Garcia, Andrew Davison, Alexander Kleinjohann, Hugo van Kemenade, |
| 81 | +Achilleas Koutsou, Jeffrey Gill, Corentin Fragnaud, Aitor Morales-Gregorio, Rémi Proville, |
| 82 | +Robin Gutzen, Marin Manuel, Simon Danner, Michael Denker, Peter N. Steinmetz, Diziet Asahi and |
| 83 | +Lucien Krapp for their contributions to this release. |
| 84 | + |
| 85 | +.. _`list of closed issues`: https://github.com/NeuralEnsemble/python-neo/issues?q=is%3Aissue+milestone%3A0.9.0+is%3Aclosed |
| 86 | +.. _`pull requests`: https://github.com/NeuralEnsemble/python-neo/pulls?q=is%3Apr+is%3Aclosed+merged%3A%3E2019-09-30+milestone%3A0.9.0 |
| 87 | +.. _NEP29: https://numpy.org/neps/nep-0029-deprecation_policy.html |
| 88 | +.. _`discussed here`: https://github.com/NeuralEnsemble/python-neo/issues/788 |
| 89 | +.. _`this Github issue`: https://github.com/NeuralEnsemble/python-neo/issues/456 |
0 commit comments