10 #include "../basecode/header.h"
11 #include "../basecode/global.h"
15 using namespace moose;
33 "Name",
"Compartment",
34 "Author",
"Upi Bhalla",
35 "Description",
"Compartment object, for branching neuron models.",
47 sizeof(doc)/
sizeof(
string)
187 double x = exp( -
B_ * p->
dt /
Cm_ );
272 #include "../shell/Shell.h"
277 unsigned int size = 1;
278 Eref sheller(
Id().eref() );
279 Shell* shell =
reinterpret_cast< Shell*
>( sheller.data() );
280 Id comptId = shell->
doCreate(
"Compartment",
Id(),
"compt", size);
287 c->
setRm( compter, 1.0 );
288 c->
setRa( compter, 0.0025 );
289 c->
setCm( compter, 1.0 );
290 c->
setEm( compter, 0.0 );
291 c->
setVm( compter, 0.0 );
302 Vm = c->
getVm( compter );
303 double x = Vmax - Vmax * exp( -p.
currTime / tau );
304 delta += ( Vm - x ) * ( Vm - x );
307 assert( delta < 1.0e-6 );
309 cout <<
"." << flush;
314 #define DO_SPATIAL_TESTS
323 #include "../shell/Shell.h"
327 unsigned int size = 100;
333 double lambda = sqrt( Rm / Ra );
335 Id cid = shell->
doCreate(
"Compartment",
Id(),
"compt", size );
360 mid = shell->
doAddMsg(
"Diagonal",
ObjId( cid ),
"raxialOut",
ObjId( cid ),
"handleRaxial" );
361 assert( !mid.bad() );
366 #ifdef DO_SPATIAL_TESTS
383 for (
unsigned int i = 0; i < size; i++ )
386 double x = Vmax * exp( - static_cast< double >( i ) / lambda );
387 delta += ( Vm - x ) * ( Vm - x );
390 assert( delta < 1.0e-5 );
391 #endif // DO_SPATIAL_TESTS
393 cout <<
"." << flush;
395 #endif // DO_UNIT_TESTS
virtual void vSetInitVm(const Eref &e, double initVm)
void doStart(double runtime, bool notify=false)
virtual double vGetInject(const Eref &e) const
virtual double vGetInitVm(const Eref &e) const
double getVm(const Eref &e) const
void vHandleChannel(const Eref &e, double Gk, double Ek)
virtual void vSetRm(const Eref &e, double Rm)
void setVm(const Eref &e, double Vm)
void vReinit(const Eref &e, ProcPtr p)
void process(const Eref &e, ProcPtr p)
void doSetClock(unsigned int tickNum, double dt)
static const Cinfo * initCinfo()
static bool setRepeat(ObjId destId, const string &field, A arg)
static const double EPSILON
virtual double vGetCm(const Eref &e) const
virtual void vSetVm(const Eref &e, double Vm)
const SrcFinfo2< double, double > * raxialOut
void vInitProc(const Eref &e, ProcPtr p)
void vInitReinit(const Eref &e, ProcPtr p)
void vHandleRaxial(double Ra, double Vm)
static const Cinfo * compartmentCinfo
Element * element() const
static bool set(const ObjId &dest, const string &field, A arg)
bool rangeWarning(const string &field, double value)
void testCompartmentProcess()
Id doCreate(string type, ObjId parent, string name, unsigned int numData, NodePolicy nodePolicy=MooseBlockBalance, unsigned int preferredNode=1)
virtual void vSetInject(const Eref &e, double Inject)
virtual double vGetRa(const Eref &e) const
void vProcess(const Eref &e, ProcPtr p)
void setEm(const Eref &e, double Em)
void vHandleAxial(double Vm)
void setCm(const Eref &e, double Cm)
virtual double vGetRm(const Eref &e) const
void vInjectMsg(const Eref &e, double current)
void setInject(const Eref &e, double Inject)
virtual unsigned int numData() const =0
Returns number of data entries across all nodes.
static bool isValid(Id id)
virtual double vGetIm(const Eref &e) const
void vRandInject(const Eref &e, double prob, double current)
virtual void vSetRa(const Eref &e, double Ra)
static SrcFinfo1< double > * VmOut()
ObjId doAddMsg(const string &msgType, ObjId src, const string &srcField, ObjId dest, const string &destField)
double mtrand(void)
Generate a random double between 0 and 1.
void doUseClock(string path, string field, unsigned int tick)
const SrcFinfo1< double > * axialOut
static A get(const ObjId &dest, const string &field)
void setRa(const Eref &e, double Ra)
virtual double vGetVm(const Eref &e) const
virtual void vSetCm(const Eref &e, double Cm)
virtual double vGetEm(const Eref &e) const
static const Cinfo * initCinfo()
void setRm(const Eref &e, double Rm)
virtual void vSetEm(const Eref &e, double Em)
const Finfo * findFinfo(const string &name) const