MOOSE - Multiscale Object Oriented Simulation Environment
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SpikeRingBuffer Class Reference

#include <SpikeRingBuffer.h>

+ Collaboration diagram for SpikeRingBuffer:

Public Member Functions

void addSpike (double timestamp, double weight)
 Adds spike into the buffer. More...
 
double pop (double currTime)
 Advances the buffer one step, returns the current weight. More...
 
void reinit (double dt, double bufferTime)
 Sets up buffer parameters. More...
 
 SpikeRingBuffer ()
 

Private Attributes

unsigned int currentBin_
 
double currTime_
 
double dt_
 
vector< double > weightSum_
 

Static Private Attributes

static const unsigned int MAXBIN = 128
 

Detailed Description

This ring buffer handles incoming spikes. It spans an interval equal to the longest arrival delay. When a spike event is notified it puts it into the slot defined by the arrival time. It just adds the weight onto the existing value in this slot, assuming a linear summation of the weights of coincident inputs.

Definition at line 19 of file SpikeRingBuffer.h.

Constructor & Destructor Documentation

SpikeRingBuffer::SpikeRingBuffer ( )

Definition at line 20 of file SpikeRingBuffer.cpp.

21  : dt_( 1e-4 ),
22  currTime_( 0 ),
23  currentBin_( 0 ),
24  weightSum_( 20, 0.0 )
25 {;}
unsigned int currentBin_
vector< double > weightSum_

Member Function Documentation

void SpikeRingBuffer::addSpike ( double  timestamp,
double  weight 
)

Adds spike into the buffer.

Definition at line 49 of file SpikeRingBuffer.cpp.

References currentBin_, currTime_, dt_, MAXBIN, and weightSum_.

50 {
51  unsigned int bin = round( ( t - currTime_ ) / dt_ );
52 
53  if ( bin > weightSum_.size() ) {
54  // Should do catch-throw here
55  if ( t < currTime_ ) {
56  cout << "Warning: SpikeRingBuffer: handling spike too late: " <<
57  t << " < " << currTime_ << ", using currTime\n";
58  bin = 0;
59  } else if ( bin >= MAXBIN ) {
60  cout << "Warning: SpikeRingBuffer: bin number exceeds limit: "<<
61  "spikeTime = " << t << ", currtime= " << currTime_ <<
62  ", dt = " << dt_ << ", bin = " << bin << " >= " << MAXBIN << ", terminating\n";
63  assert( 0 );
64  } else {
65  weightSum_.resize( bin + 1 );
66  }
67  }
68 
69  // Replace the % with a bitwise operation.
70  weightSum_[ ( bin + currentBin_ ) % weightSum_.size() ] += w;
71 }
unsigned int currentBin_
vector< double > weightSum_
static const unsigned int MAXBIN
double SpikeRingBuffer::pop ( double  currTime)

Advances the buffer one step, returns the current weight.

Definition at line 73 of file SpikeRingBuffer.cpp.

References currentBin_, currTime_, and weightSum_.

74 {
75  currTime_ = currTime;
76  if ( currentBin_ == weightSum_.size() )
77  currentBin_ = 0;
78  double ret = weightSum_[ currentBin_ ];
79  weightSum_[ currentBin_++ ] = 0.0;
80  return ret;
81 }
unsigned int currentBin_
vector< double > weightSum_
void SpikeRingBuffer::reinit ( double  dt,
double  bufferTime 
)

Sets up buffer parameters.

Definition at line 27 of file SpikeRingBuffer.cpp.

References currentBin_, currTime_, dt_, MAXBIN, and weightSum_.

28 {
29  dt_ = dt;
30  currTime_ = 0.0;
31  currentBin_ = 0;
32  unsigned int newsize = bufferTime / dt;
33  if ( newsize > MAXBIN ) {
34  cout << "Warning: SpikeRingBuffer::reinit: buffer size too big: " <<
35  newsize << " = " << bufferTime << " / " <<
36  dt << ", using " << MAXBIN << endl;
37  newsize = MAXBIN;
38  }
39  if ( newsize == 0 ) {
40  cout << "Warning: SpikeRingBuffer::reinit: buffer size too small: " <<
41  newsize << " = " << bufferTime << " / " <<
42  dt << ", using " << 10 << endl;
43  newsize = 10;
44  }
45  weightSum_.clear();
46  weightSum_.resize( newsize, 0.0 );
47 }
unsigned int currentBin_
vector< double > weightSum_
static const unsigned int MAXBIN

Member Data Documentation

unsigned int SpikeRingBuffer::currentBin_
private

Definition at line 35 of file SpikeRingBuffer.h.

Referenced by addSpike(), pop(), and reinit().

double SpikeRingBuffer::currTime_
private

Definition at line 34 of file SpikeRingBuffer.h.

Referenced by addSpike(), pop(), and reinit().

double SpikeRingBuffer::dt_
private

Definition at line 33 of file SpikeRingBuffer.h.

Referenced by addSpike(), and reinit().

const unsigned int SpikeRingBuffer::MAXBIN = 128
staticprivate

Definition at line 32 of file SpikeRingBuffer.h.

Referenced by addSpike(), and reinit().

vector< double > SpikeRingBuffer::weightSum_
private

Definition at line 36 of file SpikeRingBuffer.h.

Referenced by addSpike(), pop(), and reinit().


The documentation for this class was generated from the following files: