elephant.test.make_spike_extraction_test_data — Elephant 0.5.0 documentation

# Source code for elephant.test.make_spike_extraction_test_data

    def main(): # pragma: no cover
      from brian2 import start_scope,mvolt,ms,NeuronGroup,StateMonitor,run
      import matplotlib.pyplot as plt
      import neo
      import quantities as pq

      start_scope()

      # Izhikevich neuron parameters.
      a = 0.02/ms
      b = 0.2/ms
      c = -65*mvolt
      d = 6*mvolt/ms
      I = 4*mvolt/ms

      # Standard Izhikevich neuron equations.
      eqs = '''
      dv/dt = 0.04*v**2/(ms*mvolt) + (5/ms)*v + 140*mvolt/ms - u + I : volt
      du/dt = a*((b*v) - u) : volt/second
      '''

      reset = '''
      v = c
      u += d
      '''

      # Setup and run simulation.
      G = NeuronGroup(1, eqs, threshold='v>30*mvolt', reset='v = -70*mvolt')
      G.v = -65*mvolt
      G.u = b*G.v
      M = StateMonitor(G, 'v', record=True)
      run(300*ms)

      # Store results in neo format.
      vm = neo.core.AnalogSignal(M.v[0], units=pq.V, sampling_period=0.1*pq.ms)

      # Plot results.
      plt.figure()
      plt.plot(vm.times*1000,vm*1000) # Plot mV and ms instead of V and s.
      plt.xlabel('Time (ms)')
      plt.ylabel('mv')

      # Save results.
      iom = neo.io.PyNNNumpyIO('spike_extraction_test_data')
      block = neo.core.Block()
      segment = neo.core.Segment()
      segment.analogsignals.append(vm)
      block.segments.append(segment)
      iom.write(block)

      # Load results.
      iom2 = neo.io.PyNNNumpyIO('spike_extraction_test_data.npz')
      data = iom2.read()
      vm = data[0].segments[0].analogsignals[0]

      # Plot results.
      # The two figures should match.
      plt.figure()
      plt.plot(vm.times*1000,vm*1000) # Plot mV and ms instead of V and s.
      plt.xlabel('Time (ms)')
      plt.ylabel('mv')

    if __name__ == '__main__':
      main()