Object Type: tabchannel Description: Hodgkin-Huxley type voltage activated channel with tabulated equations. Author: E. De Schutter, Caltech (1/91) ------------------------------------------------------------------------------ ELEMENT PARAMETERS DataStructure: tab_channel_type [in src/olf/olf_struct.h] Size: 168 bytes Fields: activation channel activation Gk channel conductance Ik channel current Ek channel reversal potential Gbar channel maximum conductance X value of X gate; optional gate, X=m Y value of Y gate; optional gate, X=h Z value of Z gate; optional gate, Z is concentration-dependent X_A table for alpha function for X X_B table for beta function for X X_alloced flag for allocation of X_A and X_B Y_A table for alpha function for Y Y_B table for beta function for Y Y_alloced flag for allocation of Y_A and Y_B Z_A table for alpha function for Z Z_B table for beta function for Z Z_alloced flag for allocation of Z_A and Z_B Xpower power to raise X gate to Ypower power to raise Y gate to Zpower power to raise Z gate to instant {INSTANTX}, {INSTANTY}, or {INSTANTZ} to determine the gate to instantly set to A/B surface compartment surface area used with DOMAINCONC ------------------------------------------------------------------------------ SIMULATION PARAMETERS Function: TabChannel [in src/olf/tabchannel.c] Classes: segment channel Actions: CALC_BETA CALC_ALPHA CALC_MINF DUMP RESTORE2 SAVE2 SHOW SET TABDELETE TABFILL TABCREATE TABREAD TABSAVE CHECK PROCESS RESET INIT Messages: VOLTAGE voltage [membrane voltage of compartment] EK Ek [reversal potential] CONCEN concen [ion concentration sent to channel] DOMAINCONC Ik scale [ion current from another channel, to be multiplied by scale, and divided by surface field] ADD_GBAR offset [increment to be added to Gbar] ------------------------------------------------------------------------------ Notes: Tabulated hh-like channel. The standard voltage dependent activation (X) and inactivation (Y) factors are present. For concentration dependent processes a third factor (Z) has added. Z can do a lot of things; the most important is that it gets a different message (CONCEN) than X and Y (VOLTAGE). Standard use for Z is concentration dependent inactivation, using a Zpower > 0. An alternative is to use it for codependent activation; using Zpower<0, Z will equal concen value times v-dependent table-value. The DOMAINCONC message provides a highly simplified model to obtain the ionic concentration directly, using the current sent from another channel, times a scale factor, and dividing by the surface area of the parent compartment. The table for the object is created using a call to the TABCREATE action of the object. For computational efficiency the forward rate factor alpha (A) and 1/tau (B) are tabulated in A-table and B-table. The tabchannel element is very similar to the hh_channel element, except that it uses tables for the voltage and other dependencies. It speeds up computation by using table lookups rather than calculations depending on exponentials. It also provides more flexibility, being able to specify voltage dependencies not falling in the traditional Hodgkin-Huxley forms. The gate obeys the following equations: dX/dt = A_X - B_X*X dY/dt = A_Y - B_Y*Y dZ/dt = A_Z - B_Z*Z Gk = Gbar X^Xpower} Y^Ypower} Z^Zpower} Ik = Gk * (Ek - V) NOTE: These equations are slightly different from the usual Hodgkin-Huxley equations where: dX/dt = alpha*(1 - X) - beta*X The tables in this element are therefore actually A = alpha, and B = 1/tau = alpha + beta. This change reduces the number of calculations to be made on the table output during the integration. The alpha and beta functions of the X, Y and Z gates are implemented as tables and therefore have to be explicitly allocated using the TABCREATE function. Copies of tabchannel use the original arrays unless new arrays are explicitly allocated. The X and Y gates use the same VOLTAGE message. The Z gate uses the CONCEN message, which can be any field. It allows for dependencies on other parameters. The instant field may be set to {INSTANTX}, {INSTANTY}, or {INSTANTZ} to specify that the X, Y, or Z gate value will be instantly set to A/B, rather than using the A and B table values in the differential equations above. This allows the channel conductance to have a multiplicative factor of A/B. This is often used with the Z gate to model a Ca-dependent conductance, or to implement Morris-Lecar models having zero time constant for activation. For an example, see the implementation of the Ca-dependent K Channel in Scripts/neurokit/prototypes/traub91chan.g. The TABCREATE function TABCREATE here is different from the table and tabgate elements. We only need to specify which gate to set up, and both tables for the gate will be filled. call TABCREATE This call creates two tables for X, Y, or Z with indices from 0 to xdivs, i.e. xdvivs + 1 entries which span the range xmin to xmax. Values outside this range are linearly extrapolated using the nearest 2 table entries. Entries in these tables are made with statements like setfield Na_chan X_A->table[0] 0.05 There are several alternatives to using a long sequence of setfield commands to fill the tables. The file2tab command can be used to fill the tables from a file of values. If the rate (alpha and beta) or state (tau and minf) variables can be expressed as a mathematical function, a for loop may be used to fill the tables. For functions of the form (A + B * x) / (C + exp((x + D) / F)), the setupalpha or setuptau commands may be used. This is also discussed in Chapter 19 of The Book of GENESIS (2nd ed.) The TABDELETE function When deleting tabchannels, or the cells or compartments containing them, you must call TABDELETE first, in order to deallocate the memory for the tables. Finally, you have to give the "reclaim" command for the memory to actually be freed. Note that the tables are shared among all tabchannels that are created by copy or readcell from a prototype. Therefore, you shouldn't call TABDELETE unless you plan to delete all copies of the tabchannel. The TABFILL function TABFILL expands the table by using interpolation on the existing table entries. Again, the syntax is different from that for table and tabgate elements, and one just has to call TABFILL once to fill both the arrays corresponding to that gate: call TABFILL xdivs specifies the number of divisions that the expanded tables should have. fill_mode is one of 0 = B-spline fill (default) 1 = cubic spline fill (not yet implemented) 2 = Linear fill Tables have a calc_mode field that is by default set to LIN_INTERP (a pre-defined global variable equal to one), so that linear interpolation is performed at run time, allowing the use of a smaller table. If sufficient memory is available, it will be faster to perform the interpolation when the table is created, by expanding it with TABFILL. Then, run time interpolation should be disabled by setting the calc_mode of the tables to NO_INTERP (zero). For example: setfield {chanpath} X_A->calc_mode {NO_INTERP} setfield {chanpath} X_B->calc_mode {NO_INTERP} The TABSAVE and TABREAD functions As filling the tables can be time-consuming (particularly if it is done using a for loop in a script), the TABSAVE and TABREAD functions can be useful for saving channel tables and re-loading them when the simulation is run again. TABSAVE may be called after the channel has been created and set up, in order wto save the tables to a file. For example: call Purk_Kdr TABSAVE Purk_Kdr.tab TABREAD is called after the channel has been created and the tables have been allocated. For example: if (!{exists Purk_Kdr}) create tabchannel Purk_Kdr setfield Purk_Kdr Ek {EK} Gbar {GK} Ik 0 Gk 0 \ Xpower 2 Ypower 1 Zpower 0 call Purk_Kdr TABCREATE X {xdivs} {xmin} {xmax} call Purk_Kdr TABCREATE Y {xdivs} {xmin} {xmax} end call Purk_Kdr TABREAD Purk_Kdr.tab Scaling tables When the fields X_A->sx, X_A->sy, X_A->ox, X_A->oy, and the corresponding fields on X_B, Y_A, Y_B, Z_A, Z_B are set, the tabgate element automatically scales on the entries in the interpol_struct array so as to avoid scaling computations during simulations. Care must be taken since the B table contains 1/tau rather than the beta values. It is recommended, therefore, that both alpha and beta be adjusted simultaneously and identically. Alternatively, the scaletabchan function may be used to scale the two tables in such a way as to scale alpha, beta, tau, or the steady state activation (minf). The CALC_ALPHA, CALC_BETA, and CALC_MINF functions The CALC_ALPHA, CALC_BETA, and CALC_MINF actions are used with calls of the form y = {call CALC_ALPHA } in order to access values of alpha, beta or m_inf (the steady state activation, alpha/(alpha + beta)) for the specified gate (X, Y, or Z) and a particular value of the independent variable. This feature is most often used for making plots of these quantities. Note that the activation time constant can be calculated from tau = 1/(alpha + beta). Example: see Scripts/neurokit/prototypes/traub91chan.g See also: Interpol documentation (Tables), scaletabchan, setupalpha, setuptau, tweakalpha, tweaktau, hh_channel, tab2Dchannel