00001 00005 #ifndef _IONBUFFER_H_ 00006 #define _IONBUFFER_H_ 00007 00008 #include "ionchannel.h" 00009 00010 #define FARADAY 96589 // Faraday constant [Coulomb] 00011 #define R 8.31 // universal gas constant [Joules/Mol] 00012 #define DEPTH 0.1e-6 // thickness of the intracellular perimembrane shell [m] 00013 00014 #define V_REST_BIOL -70e-3 // [V] 00015 #define V_THRESH_BIOL -40e-3 // [V] 00016 00017 class IonChannel; 00018 00020 00023 class IonBuffer { 00024 00025 public: 00026 00027 IonBuffer(float ConcRest_def, float ConcOut_def, float Tau_def, float Temp_def, int zIon_def); 00028 00029 virtual ~IonBuffer(); 00030 00032 void reset(double *Gtot, double *Ich, double Vresting, double VmScale); 00033 00035 void nextstate(double *Imtot, double *Gmtot, double Vm, double Vresting, double VmScale); 00036 00038 void getConc(double **C) { ConcActive = 1; (*C) = &(this->Conc);} 00039 00041 void getErev(double **E) { ConcActive = 1; ErevActive = 1; (*E) = &(this->Erev);} 00042 00044 float ConcRest; 00045 00047 float ConcOut; 00048 00050 float ConcScale; 00051 00053 float Tau; 00054 00056 float Temp; 00057 00058 protected: 00059 friend class MembranePatch; 00060 00061 00063 double Conc; 00064 00066 double Erev; 00067 00069 bool active; 00070 00072 bool ConcActive; 00073 00075 bool ErevActive; 00076 00078 int zIon; 00079 00081 double C1; 00082 00084 int nChannels; 00085 00087 int lChannels; 00088 00090 IonChannel **channels; 00091 00093 void addChannel(IonChannel *newChannel); 00094 00096 void SetErev(double Vresting, double VmScale); 00097 00098 }; 00099 00100 #endif