00001 #ifndef _HHChannelBase_h
00002 #define _HHChannelBase_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 typedef double ( *PFDD )( double, double );
00015
00024 class HHChannelBase: public virtual ChanBase
00025 {
00026 public:
00027 HHChannelBase();
00028 ~HHChannelBase();
00029
00031
00033
00034 void setXpower( const Eref& e, double Xpower );
00035 double getXpower( const Eref& e) const;
00036 void setYpower( const Eref& e, double Ypower );
00037 double getYpower( const Eref& e) const;
00038 void setZpower( const Eref& e, double Zpower );
00039 double getZpower( const Eref& e) const;
00040 void setInstant( const Eref& e, int Instant );
00041 int getInstant( const Eref& e ) const;
00042 void setX( const Eref& e, double X );
00043 double getX( const Eref& e ) const;
00044 void setY( const Eref& e, double Y );
00045 double getY( const Eref& e ) const;
00046 void setZ( const Eref& e, double Z );
00047 double getZ( const Eref& e ) const;
00048 void setUseConcentration( const Eref& e, int value );
00049 int getUseConcentration( const Eref& e ) const;
00050 double vGetModulation( const Eref& e ) const;
00052
00054
00060 void handleConc( const Eref& e, double conc );
00061
00063
00065
00068 HHGate* getXgate( unsigned int i );
00069
00073 HHGate* getYgate( unsigned int i );
00074
00078 HHGate* getZgate( unsigned int i );
00079
00083 void setNumGates( unsigned int num );
00084
00089 unsigned int getNumXgates() const;
00091 unsigned int getNumYgates() const;
00093 unsigned int getNumZgates() const;
00094
00102 void createGate( const Eref& e, string gateType );
00104
00106 virtual void vSetXpower( const Eref& e, double Xpower ) = 0;
00107 virtual void vSetYpower( const Eref& e, double Ypower ) = 0;
00108 virtual void vSetZpower( const Eref& e, double Zpower ) = 0;
00109
00110 virtual void vSetInstant( const Eref& e, int Instant ) = 0;
00111 virtual int vGetInstant( const Eref& e ) const = 0;
00112 virtual void vSetX( const Eref& e, double X ) = 0;
00113 virtual double vGetX( const Eref& e ) const = 0;
00114 virtual void vSetY( const Eref& e, double Y ) = 0;
00115 virtual double vGetY( const Eref& e ) const = 0;
00116 virtual void vSetZ( const Eref& e, double Z ) = 0;
00117 virtual double vGetZ( const Eref& e ) const = 0;
00118 virtual void vSetUseConcentration( const Eref& e, int value ) = 0;
00119
00121
00122
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00135
00137
00138
00139
00140 virtual void vHandleConc( const Eref& e, double conc ) = 0;
00141
00143
00145 virtual HHGate* vGetXgate( unsigned int i ) const = 0;
00146 virtual HHGate* vGetYgate( unsigned int i ) const = 0;
00147 virtual HHGate* vGetZgate( unsigned int i ) const = 0;
00148 virtual void vCreateGate( const Eref& e, string gateType ) = 0;
00149
00151
00153 static double power1( double x, double p ) {
00154 return x;
00155 }
00156 static double power2( double x, double p ) {
00157 return x * x;
00158 }
00159 static double power3( double x, double p ) {
00160 return x * x * x;
00161 }
00162 static double power4( double x, double p ) {
00163 return power2( x * x, p );
00164 }
00165 static double powerN( double x, double p );
00166
00167 static PFDD selectPower( double power);
00168
00170
00172 virtual void vSetSolver( const Eref& e, Id hsolve );
00173 static void zombify( Element* orig, const Cinfo* zClass, Id hsolve);
00174
00176 static const Cinfo* initCinfo();
00177 protected:
00179 double Xpower_;
00181 double Ypower_;
00183 double Zpower_;
00185 bool useConcentration_;
00186
00188 double modulation_;
00189 };
00190
00191
00192 #endif // _HHChannelBase_h