| 1 |
==================== |
|---|
| 2 |
The ``stgen`` module |
|---|
| 3 |
==================== |
|---|
| 4 |
|
|---|
| 5 |
This module offers various stochastic generators for point processes that can |
|---|
| 6 |
be used as spike trains. |
|---|
| 7 |
|
|---|
| 8 |
--------------- |
|---|
| 9 |
The StGen class |
|---|
| 10 |
--------------- |
|---|
| 11 |
|
|---|
| 12 |
Creation |
|---|
| 13 |
~~~~~~~~ |
|---|
| 14 |
|
|---|
| 15 |
Create an ``StGen`` object: |
|---|
| 16 |
|
|---|
| 17 |
>>> st_gen = StGen() |
|---|
| 18 |
|
|---|
| 19 |
This will initialize the stochastic generator and by default try to create a |
|---|
| 20 |
numpy random generator instance. |
|---|
| 21 |
|
|---|
| 22 |
Optionally, you can also pass a random number generator instance to the |
|---|
| 23 |
constructor: |
|---|
| 24 |
|
|---|
| 25 |
>>> import numpy |
|---|
| 26 |
>>> st_gen = StGen(rng = numpy.random.RandomState()) |
|---|
| 27 |
|
|---|
| 28 |
You can also use random number generators from gnu scientific library (gsl): |
|---|
| 29 |
|
|---|
| 30 |
>>> from pygsl.rng import rng |
|---|
| 31 |
>>> st_gen_gsl = StGen(rng = rng()) |
|---|
| 32 |
|
|---|
| 33 |
If you want to seed the random number generator with a specific seed, you can |
|---|
| 34 |
do so in the constructor: |
|---|
| 35 |
|
|---|
| 36 |
>>> st_gen = StGen(seed = 1234567) |
|---|
| 37 |
|
|---|
| 38 |
Alternatively, you can re-seed the random number generator when the StGen |
|---|
| 39 |
object has already been created: |
|---|
| 40 |
|
|---|
| 41 |
>>> st_gen.seed(7654321) |
|---|
| 42 |
|
|---|
| 43 |
|
|---|
| 44 |
Poisson-distributed point processes |
|---|
| 45 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|---|
| 46 |
|
|---|
| 47 |
Using the ``StGen``-object, you can generate point processes with |
|---|
| 48 |
inter-spike-intervals distributed according to a poisson distribution: |
|---|
| 49 |
|
|---|
| 50 |
>>> st_gen = StGen() |
|---|
| 51 |
>>> spike_train_poisson = st_gen.poisson_generator(rate = 100., |
|---|
| 52 |
tstart = 0., |
|---|
| 53 |
tstop = 2500.) |
|---|
| 54 |
|
|---|
| 55 |
This generates a NeuroTools.SpikeTrain object, containing spike times with an |
|---|
| 56 |
approximate rate of 100 Hz and a duration of 2.5 seconds. |
|---|
| 57 |
|
|---|
| 58 |
If you want a numpy array of spike times rather than a SpikeTrain object, |
|---|
| 59 |
specify the array keyword: |
|---|
| 60 |
|
|---|
| 61 |
>>> spike_train_array = st_gen.poisson_generator(rate = 100., array = True) |
|---|
| 62 |
|
|---|
| 63 |
Dynamic poisson-distributes point processes |
|---|
| 64 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|---|
| 65 |
|
|---|
| 66 |
StGen can also generate inhomogeneous poisson processes, i.e. spike trains with |
|---|
| 67 |
dynamically changing rates: |
|---|
| 68 |
|
|---|
| 69 |
>>> spike_train_dyn = st_gen.poissondyn_generator(rate = [50., 80., 30.], |
|---|
| 70 |
t = [0., 1000., 2000.], |
|---|
| 71 |
tstop = 2.5, |
|---|
| 72 |
array = False) |
|---|
| 73 |
|
|---|
| 74 |
This will generate a SpikeTrain object containing spike times with an |
|---|
| 75 |
approximate rate of 50 Hz for one second, followed by 80 Hz for one second, and |
|---|
| 76 |
finally 30 Hz for half a second. Note that t[0] is used as tstart. |
|---|