00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef _COMPARTMENT_H
00012 #define _COMPARTMENT_H
00013
00020 namespace moose
00021 {
00022 class Compartment: public CompartmentBase
00023 {
00024 public:
00025 Compartment();
00026 virtual ~Compartment();
00027
00028
00029 virtual void vSetVm( const Eref& e, double Vm );
00030 virtual double vGetVm( const Eref& e ) const;
00031 virtual void vSetEm( const Eref& e, double Em );
00032 virtual double vGetEm( const Eref& e ) const;
00033 virtual void vSetCm( const Eref& e, double Cm );
00034 virtual double vGetCm( const Eref& e ) const;
00035 virtual void vSetRm( const Eref& e, double Rm );
00036 virtual double vGetRm( const Eref& e ) const;
00037 virtual void vSetRa( const Eref& e, double Ra );
00038 virtual double vGetRa( const Eref& e ) const;
00039 virtual double vGetIm( const Eref& e ) const;
00040 virtual void vSetInject( const Eref& e, double Inject );
00041 virtual double vGetInject( const Eref& e ) const;
00042 virtual void vSetInitVm( const Eref& e, double initVm );
00043 virtual double vGetInitVm( const Eref& e ) const;
00044
00045
00050 void vProcess( const Eref& e, ProcPtr p );
00051
00055 void vReinit( const Eref& e, ProcPtr p );
00056
00065 void vInitProc( const Eref& e, ProcPtr p );
00066
00071 void vInitReinit( const Eref& e, ProcPtr p );
00072
00077 void vHandleChannel( const Eref& e, double Gk, double Ek);
00078
00082 void vHandleRaxial( double Ra, double Vm);
00083
00087 void vHandleAxial( double Vm);
00088
00096 void vInjectMsg( const Eref& e, double current);
00097
00104 void vRandInject( const Eref& e, double prob, double current);
00105
00110 void cable();
00111
00112
00116 static const Cinfo* initCinfo();
00117 protected:
00118 double Vm_;
00119 double initVm_;
00120 double Em_;
00121 double Cm_;
00122 double Rm_;
00123 double Ra_;
00124 double Im_;
00125 double lastIm_;
00126 double inject_;
00127 double A_;
00128 double B_;
00129 double sumInject_;
00130
00131 private:
00132 double invRm_;
00133 double dt_;
00134 static const double EPSILON;
00135 };
00136 }
00137
00138
00139
00140 #endif // _COMPARTMENT_H