MOOSE - Multiscale Object Oriented Simulation Environment
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
IntFire.cpp
Go to the documentation of this file.
1 /**********************************************************************
2 ** This program is part of 'MOOSE', the
3 ** Messaging Object Oriented Simulation Environment.
4 ** Copyright (C) 2003-2010 Upinder S. Bhalla. and NCBS
5 ** It is made available under the terms of the
6 ** GNU Lesser General Public License version 2.1
7 ** See the file COPYING.LIB for the full notice.
8 **********************************************************************/
9 
10 #include <queue>
11 #include "header.h"
12 #include "IntFire.h"
13 
16  "spikeOut",
17  "Sends out spike events. The argument is the timestamp of "
18  "the spike. "
19  );
20  return &spikeOut;
21 }
22 
24 {
26  // Field Definitions
29  "Vm",
30  "Membrane potential",
33  );
34 
36  "tau",
37  "charging time-course",
40  );
41 
42  static ValueFinfo< IntFire, double > thresh(
43  "thresh",
44  "firing threshold",
47  );
48 
49  static ValueFinfo< IntFire, double > refractoryPeriod(
50  "refractoryPeriod",
51  "Minimum time between successive spikes",
54  );
56  // MsgDest Definitions
58  static DestFinfo activation( "activation",
59  "Handles value of synaptic activation arriving on this IntFire",
61 
62  static DestFinfo process( "process",
63  "Handles process call",
65  static DestFinfo reinit( "reinit",
66  "Handles reinit call",
69  // SharedFinfo Definitions
71  static Finfo* procShared[] = {
72  &process, &reinit
73  };
74  static SharedFinfo proc( "proc",
75  "Shared message for process and reinit",
76  procShared, sizeof( procShared ) / sizeof( const Finfo* )
77  );
78 
79  static Finfo* intFireFinfos[] = {
80  &Vm, // Value
81  &tau, // Value
82  &thresh, // Value
83  &refractoryPeriod, // Value
84  &activation, // DestFinfo
85  &proc, // SharedFinfo
86  spikeOut(), // MsgSrc
87  };
88 
89  static Dinfo< IntFire > dinfo;
90  static Cinfo intFireCinfo (
91  "IntFire",
93  intFireFinfos,
94  sizeof( intFireFinfos ) / sizeof ( Finfo* ),
95  &dinfo
96  );
97 
98  return &intFireCinfo;
99 }
100 
102 
104  : Vm_( 0.0 ), thresh_( 0.0 ), tau_( 1.0 ),
105  refractoryPeriod_( 0.1 ), lastSpike_( -0.1 ),
106  activation_( 0.0 )
107 {
108  ;
109 }
110 
111 IntFire::IntFire( double thresh, double tau )
112  : Vm_( 0.0 ), thresh_( thresh ), tau_( tau ), refractoryPeriod_( 0.1 ), lastSpike_( -1.0 ), activation_( 0.0 )
113 {
114  ;
115 }
116 
117 void IntFire::process( const Eref &e, ProcPtr p )
118 {
119  static bool report = false;
120  static unsigned int reportIndex = 0;
121  if ( report && e.dataIndex() == reportIndex )
122  cout << " " << p->currTime << "," << Vm_;
123  Vm_ += activation_;
124  activation_ = 0.0;
125 
126  if ( Vm_ > thresh_ && (p->currTime - lastSpike_) > refractoryPeriod_ ) {
127  spikeOut()->send( e, p->currTime );
128  Vm_ = -1.0e-7;
129  lastSpike_ = p->currTime;
130  } else {
131  Vm_ *= ( 1.0 - p->dt / tau_ );
132  }
133 }
134 
135 void IntFire::reinit( const Eref& e, ProcPtr p )
136 {
137  Vm_ = 0.0;
138  activation_ = 0.0;
139 }
140 
141 void IntFire::setVm( const double v )
142 {
143  Vm_ = v;
144 }
145 
146 void IntFire::setTau( const double v )
147 {
148  tau_ = v;
149 }
150 
151 void IntFire::setThresh( const double v )
152 {
153  thresh_ = v;
154 }
155 
156 void IntFire::setRefractoryPeriod( const double v )
157 {
158  refractoryPeriod_ = v;
159  lastSpike_ = -v;
160 }
161 
162 double IntFire::getVm() const
163 {
164  return Vm_;
165 }
166 
167 double IntFire::getTau() const
168 {
169  return tau_;
170 }
171 
172 double IntFire::getThresh() const
173 {
174  return thresh_;
175 }
176 
178 {
179  return refractoryPeriod_;
180 }
181 
182 void IntFire::activation( double v )
183 {
184  activation_ += v;
185 }
double getRefractoryPeriod() const
Definition: IntFire.cpp:177
void setVm(double v)
Definition: IntFire.cpp:141
void process(const Eref &e, ProcPtr p)
Definition: IntFire.cpp:117
double getThresh() const
Definition: IntFire.cpp:172
void setTau(double v)
Definition: IntFire.cpp:146
void setRefractoryPeriod(double v)
Definition: IntFire.cpp:156
double currTime
Definition: ProcInfo.h:19
Definition: Dinfo.h:60
IntFire()
Definition: IntFire.cpp:103
unsigned int dataIndex() const
Definition: Eref.h:50
double refractoryPeriod_
Definition: IntFire.h:53
static const Cinfo * initCinfo()
Definition: IntFire.cpp:23
void setThresh(double v)
Definition: IntFire.cpp:151
static SrcFinfo1< double > * spikeOut()
Definition: IntFire.cpp:14
double lastSpike_
Definition: IntFire.h:54
double getTau() const
Definition: IntFire.cpp:167
double dt
Definition: ProcInfo.h:18
void activation(double v)
Definition: IntFire.cpp:182
Definition: OpFunc.h:27
Definition: Eref.h:26
double getVm() const
Definition: IntFire.cpp:162
double activation_
Definition: IntFire.h:55
double Vm_
Definition: IntFire.h:50
void reinit(const Eref &e, ProcPtr p)
Definition: IntFire.cpp:135
static const Cinfo * intFireCinfo
Definition: IntFire.cpp:101
double tau_
Definition: IntFire.h:52
static const Cinfo * initCinfo()
Definition: Neutral.cpp:16
Definition: Cinfo.h:18
Definition: Finfo.h:12
double thresh_
Definition: IntFire.h:51