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

#include <SimpleSynHandler.h>

+ Inheritance diagram for SimpleSynHandler:
+ Collaboration diagram for SimpleSynHandler:

Public Member Functions

void addSpike (unsigned int index, double time, double weight)
 
unsigned int addSynapse ()
 Adds a new synapse, returns its index. More...
 
void dropSynapse (unsigned int droppedSynNumber)
 
double getTopSpike (unsigned int index) const
 
SimpleSynHandleroperator= (const SimpleSynHandler &other)
 
 SimpleSynHandler ()
 
unsigned int vGetNumSynapses () const
 
SynapsevGetSynapse (unsigned int i)
 
void vProcess (const Eref &e, ProcPtr p)
 
void vReinit (const Eref &e, ProcPtr p)
 
void vSetNumSynapses (unsigned int num)
 
 ~SimpleSynHandler ()
 
- Public Member Functions inherited from SynHandlerBase
unsigned int getNumSynapses () const
 
SynapsegetSynapse (unsigned int i)
 
void process (const Eref &e, ProcPtr p)
 
bool rangeWarning (const string &field, double value)
 
void reinit (const Eref &e, ProcPtr p)
 
void setNumSynapses (unsigned int num)
 
 SynHandlerBase ()
 
virtual ~SynHandlerBase ()
 

Static Public Member Functions

static const CinfoinitCinfo ()
 
- Static Public Member Functions inherited from SynHandlerBase
static SrcFinfo1< double > * activationOut ()
 
static const CinfoinitCinfo ()
 

Private Attributes

priority_queue< SynEvent,
vector< SynEvent >
, CompareSynEvent
events_
 
vector< Synapsesynapses_
 

Detailed Description

This handles simple synapses without plasticity. It uses a priority queue to manage them. This gets inefficient for large numbers of synapses but is pretty robust.

Definition at line 47 of file SimpleSynHandler.h.

Constructor & Destructor Documentation

SimpleSynHandler::SimpleSynHandler ( )

Definition at line 57 of file SimpleSynHandler.cpp.

58 { ; }
SimpleSynHandler::~SimpleSynHandler ( )

Definition at line 60 of file SimpleSynHandler.cpp.

61 { ; }

Member Function Documentation

void SimpleSynHandler::addSpike ( unsigned int  index,
double  time,
double  weight 
)
virtual

Record arrival of a new spike event. The 'time' is time for eventual arrival of the spike, and is typically well in the future. The index specifies which synapse the spike came to.

Implements SynHandlerBase.

Definition at line 100 of file SimpleSynHandler.cpp.

References events_, and synapses_.

102 {
103  assert( index < synapses_.size() );
104  events_.push( SynEvent( time, weight ) );
105 }
priority_queue< SynEvent, vector< SynEvent >, CompareSynEvent > events_
vector< Synapse > synapses_
unsigned int SimpleSynHandler::addSynapse ( )
virtual

Adds a new synapse, returns its index.

Implements SynHandlerBase.

Definition at line 138 of file SimpleSynHandler.cpp.

References synapses_.

139 {
140  unsigned int newSynIndex = synapses_.size();
141  synapses_.resize( newSynIndex + 1 );
142  synapses_[newSynIndex].setHandler( this );
143  return newSynIndex;
144 }
vector< Synapse > synapses_
void SimpleSynHandler::dropSynapse ( unsigned int  droppedSynNumber)
virtual

Drops an existing synapse, triggered by deleteMsg of an input to the child synapse. This is a little messy because we can't change the indices of the other synapses. The Handler has to figure out how to handle the 'holes' in its array of synapses.

Implements SynHandlerBase.

Definition at line 147 of file SimpleSynHandler.cpp.

References synapses_.

148 {
149  assert( msgLookup < synapses_.size() );
150  synapses_[msgLookup].setWeight( -1.0 );
151 }
vector< Synapse > synapses_
double SimpleSynHandler::getTopSpike ( unsigned int  index) const
virtual

Implements SynHandlerBase.

Definition at line 107 of file SimpleSynHandler.cpp.

References events_.

108 {
109  if ( events_.empty() )
110  return 0.0;
111  return events_.top().time;
112 }
priority_queue< SynEvent, vector< SynEvent >, CompareSynEvent > events_
const Cinfo * SimpleSynHandler::initCinfo ( )
static

Definition at line 17 of file SimpleSynHandler.cpp.

References SynHandlerBase::getNumSynapses(), SynHandlerBase::getSynapse(), Synapse::initCinfo(), SynHandlerBase::initCinfo(), SynHandlerBase::setNumSynapses(), and synHandlerCinfo.

Referenced by testCinfoFields(), testFinfoFields(), testSetGetSynapse(), testSetGetVec(), testSetRepeat(), and testSparseMsg().

18 {
19  static string doc[] =
20  {
21  "Name", "SimpleSynHandler",
22  "Author", "Upi Bhalla",
23  "Description",
24  "The SimpleSynHandler handles simple synapses without plasticity. "
25  "It uses a priority queue to manage them."
26  };
27 
29  "synapse",
30  "Sets up field Elements for synapse",
35  );
36 
37  static Finfo* synHandlerFinfos[] = {
38  &synFinfo // FieldElement
39  };
40 
41  static Dinfo< SimpleSynHandler > dinfo;
42  static Cinfo synHandlerCinfo (
43  "SimpleSynHandler",
45  synHandlerFinfos,
46  sizeof( synHandlerFinfos ) / sizeof ( Finfo* ),
47  &dinfo,
48  doc,
49  sizeof( doc ) / sizeof( string )
50  );
51 
52  return &synHandlerCinfo;
53 }
void setNumSynapses(unsigned int num)
Definition: Dinfo.h:60
unsigned int getNumSynapses() const
static const Cinfo * initCinfo()
Synapse * getSynapse(unsigned int i)
static const Cinfo * initCinfo()
Definition: Synapse.cpp:15
static const Cinfo * synHandlerCinfo
Definition: Cinfo.h:18
Definition: Finfo.h:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

SimpleSynHandler & SimpleSynHandler::operator= ( const SimpleSynHandler other)

Definition at line 63 of file SimpleSynHandler.cpp.

References events_, and synapses_.

64 {
65  synapses_ = ssh.synapses_;
66  for ( vector< Synapse >::iterator
67  i = synapses_.begin(); i != synapses_.end(); ++i )
68  i->setHandler( this );
69 
70  // For no apparent reason, priority queues don't have a clear operation.
71  while( !events_.empty() )
72  events_.pop();
73 
74  return *this;
75 }
priority_queue< SynEvent, vector< SynEvent >, CompareSynEvent > events_
vector< Synapse > synapses_
unsigned int SimpleSynHandler::vGetNumSynapses ( ) const
virtual

Implements SynHandlerBase.

Definition at line 85 of file SimpleSynHandler.cpp.

References synapses_.

86 {
87  return synapses_.size();
88 }
vector< Synapse > synapses_
Synapse * SimpleSynHandler::vGetSynapse ( unsigned int  i)
virtual

Implements SynHandlerBase.

Definition at line 90 of file SimpleSynHandler.cpp.

References dummy, and synapses_.

91 {
92  static Synapse dummy;
93  if ( i < synapses_.size() )
94  return &synapses_[i];
95  cout << "Warning: SimpleSynHandler::getSynapse: index: " << i <<
96  " is out of range: " << synapses_.size() << endl;
97  return &dummy;
98 }
static DestFinfo dummy("dummy","This Finfo is a dummy. If you are reading this you have used an invalid index", 0)
vector< Synapse > synapses_
void SimpleSynHandler::vProcess ( const Eref e,
ProcPtr  p 
)
virtual

Implements SynHandlerBase.

Definition at line 114 of file SimpleSynHandler.cpp.

References SynHandlerBase::activationOut(), ProcInfo::currTime, ProcInfo::dt, and events_.

115 {
116  double activation = 0.0;
117  while( !events_.empty() && events_.top().time <= p->currTime ) {
118  // Send out weight / dt for every spike
119  // Since it is an impulse active only for one dt,
120  // need to send it divided by dt.
121  // Can connect activation to SynChan (double exp)
122  // or to LIF as an impulse to voltage.
123  // See: http://www.genesis-sim.org/GENESIS/Hyperdoc/Manual-26.html#synchan
124  activation += events_.top().weight / p->dt;
125  events_.pop();
126  }
127  if ( activation != 0.0 )
128  SynHandlerBase::activationOut()->send( e, activation );
129 }
double currTime
Definition: ProcInfo.h:19
priority_queue< SynEvent, vector< SynEvent >, CompareSynEvent > events_
double dt
Definition: ProcInfo.h:18
static SrcFinfo1< double > * activationOut()

+ Here is the call graph for this function:

void SimpleSynHandler::vReinit ( const Eref e,
ProcPtr  p 
)
virtual

Implements SynHandlerBase.

Definition at line 131 of file SimpleSynHandler.cpp.

References events_.

132 {
133  // For no apparent reason, priority queues don't have a clear operation.
134  while( !events_.empty() )
135  events_.pop();
136 }
priority_queue< SynEvent, vector< SynEvent >, CompareSynEvent > events_
void SimpleSynHandler::vSetNumSynapses ( unsigned int  num)
virtual

Implements SynHandlerBase.

Definition at line 77 of file SimpleSynHandler.cpp.

References synapses_.

78 {
79  unsigned int prevSize = synapses_.size();
80  synapses_.resize( v );
81  for ( unsigned int i = prevSize; i < v; ++i )
82  synapses_[i].setHandler( this );
83 }
vector< Synapse > synapses_

Member Data Documentation

priority_queue< SynEvent, vector< SynEvent >, CompareSynEvent > SimpleSynHandler::events_
private

Definition at line 71 of file SimpleSynHandler.h.

Referenced by addSpike(), getTopSpike(), operator=(), vProcess(), and vReinit().

vector< Synapse > SimpleSynHandler::synapses_
private

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