Skip to content
eLife paper code
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Aplysia Attractor Analysis

Suite of MATLAB code for the eLife paper "A spiral attractor drives rhythmic locomotion" Angela Bruno, Bill Frost & Mark Humphries

Angela M Bruno, William N Frost & Mark D Humphries (2017) A spiral attractor network drives rhythmic locomotion. eLife, 6:e27342.

All experimental data is available at the CRCNS repository:


We provide here all the code we used:


All code to produce all panels of main text and supplemental figures Note that this code produces more panels than were used in the final paper It also includes a range of helper functions for plotting

Paths to intermediate results are coded for the locations on the main author's PC: edit these to point at the paths on your system


All code to produce the analysis results used in all the figures. Note that this is our research code, with minimal reformatting, so it does considerably more analyses than are in the paper


The set of helper functions called by one or more scripts


The experimental data in the format used in the research code


Needs: Chronux toolbox (for spike-train spectra):

Uses (relevant functions are included in this toolbox): Consensus clustering (for detection of ensembles):

Neural ensemble analysis (for classification of ensembles):

Getting started

Many scripts were written to separately analyse each of the three stimulation sets (da01, da02, da03). Each will thus analyse the set (e.g. da01) specified by the user across all 10 preparations. Some summary scripts load all 30 recordings together

The top-level function DataSet_Properties.m does the basic analysis used by the majority of other scripts. Run this first.

Some scripts depend on the output of others in their directories. The order of dependencies is:


  1. Analyse_by_Recurrence_Points -> Check_All_Real_Eigenvalues.m
  2. Analyse_by_Recurrence_Points -> recurrence_point_results_Viz.m -> Are_jumps_perturbations_or_transitions2.m -> Does_Oscillation_Period_Change.m
  3. Analyse_by_Recurrence_Points -> recurrence_point_results_Viz.m -> Are_sequential_attractors_the_same.m
  4. Analyse_by_Recurrence_Points -> recurrence_point_results_Viz.m -> Are_sequential_attractors_the_same_CommonAxes.m -> Quantifying_Participation_by_PCA_Contribution.m -> RobustnessOfAttractor_to_single_neuron_variability.m
  5. Analyse_by_Recurrence_Points -> recurrence_point_results_Viz.m -> Are_sequential_attractors_the_same_CommonAxes.m -> Quantifying_Participation_by_PCA_Contribution.m -> What_is_Participation.m
  6. Analyse_by_Recurrence_Points -> recurrence_point_results_Viz.m -> Are_sequential_attractors_the_same_CommonAxes.m -> Initial_Conditions.m
  7. RecurrencePlot_LineCounting.m -> Quantify_attractors_by_recurrence_plot_lines.m


  1. StaticEnsembles.m -> all others
  2. Analyse_Spike_Train_Properties.m -> Types_of_Ensemble_Across_Dataset.m -> Consistency_of_Types_Across_Programs.m


All: Needs output of Dimensionality_of_Projections.m from /Classify_attractors/

  1. DecodeP10_statespace.m -> Best_P10_StateSpace_GLMmodels.m


Found an error? Path wrong or missing? Function not found?

Flag all issues by clicking the "Issues" tab at the top of this page (next to "Code"). Raise a new Issue with your error and we will fix as we can.

You can’t perform that action at this time.