//genesis /*************************** MS Model, Version 5.2 ********************* **************************** naP_channel.g ********************* Tom Sheehan tsheeha2@gmu.edu thsheeha@vt.edu 703-538-8361 ****************************************************************************** ******************************************************************************/ /* Na Persistent channel * In the original program written by Johanes Hjorth a set of MatLab * routines in striatum/mspn/vectMakers opened a set of text (data) files in * striatum/mspn/tau_tables and used those to create a set of of text (data) * files in striatum/mspn/channels/vecs. * The product of this sequence was then opened by a set of genesis * routines in striatum/mspn/channels to populate an approprite set of tabchannels * An example is as follows * striatum/mspn/vectMakers/makeNaPtable.m reads: * striatum/mspn/tau_tables/vtau_nap.txt * and then writes: * striatum/mspn/channels/vecs/nap_taum.txt * striatum/mspn/channels/vecs/nap_tauh.txt * striatum/mspn/channels/vecs/nap_minf.txt * striatum/mspn/channels/vecs/nap_hinf.txt * Later in the running code control shifts to function make_NaP_channel * (in striatum/mspn/channels/naP_channel.g). This function will read those * same four files and use them to create the tabchannel NaP_channel * * In the rework by Kai_Du the MatLab files are remeoved but their product (the * four data files noted above are retained. * * This revision moves the MatLab calculations to the .g file that is creating * the tabchannel and removes the data files (four for each channel). In the example * case given above directory vecs has been deleted which removes nap_taum.txt etc, * and function make_NaP_channel has been modified to calculate the data in those * files and place it directly into the appropritate tabchannel *************** Tom Sheehan 1/10/09 703-538-8361********************************/ function make_NaP_channel /*reversal potential of sodium */ float Erev = 0.05 str path = "NaP_channel" float xmin = -0.1 /* minimum voltage we will see in the simulation */ float xmax = 0.05 /* maximum voltage we will see in the simulation */ int xdivs = 14 /* the number of divisions between -0.1 and 0.04 */ int xdivsFiner = 3000 int c = 0 float minf = 0 float hinf = 0 float htau = 0 float mtau = 0 /* Begin values from Hjorth: striatum/mspn/vectMakers/makeNaPtable.m */ float mvhalf = -52.6 //(mV) Magistretti 1999, Fig 4 float mslope = -4.6 //(mV) Magistretti 1999, Fig 4 float mshift = 0.0 float hvhalf = -48.8 //(mV) Magistretti 1999, Fig 4 float hslope = 10.0 //(mV) Magistretti 1999, Fig 4 float hshift = 0.0 /** End values from Hjorth: striatum/mspn/vectMakers/makeNaPtable.m **/ /****** Begin vars used to enable genesis calculations ********/ float increment = 0.05 float x = -100.00 float numerator = 0.0 float denominator = 0.0 float theta = 0.0 float exp_theta = 0.0 float neg_one = -1.0 /****** End vars used to enable genesis calculations **********/ //make the table for the activation with a range of -100mV - +40mV //with an entry for every 10mV create tabchannel {path} call {path} TABCREATE X {xdivsFiner} {xmin} {xmax} call {path} TABCREATE Y {xdivsFiner} {xmin} {xmax} // calculate values for minf, mtau, hinf and htau. Each iteration of the for // loop calculates those values using an x that begins with -100 and increments // by 0.05 with each loop for(c = 0; c < {xdivsFiner} + 1; c = c + 1) //The equation for htau is a basic fit of the original curve from Johanes //Matlab function found in striatum/mspn/vectMakers/makeNaPtable.m htau = -3.4566e-008*x*x*x*x -4.7314e-007*x*x*x + 0.00025297*x*x -0.0087294*x + 0.77324 //calculate Hodgkin Huxley hinf -> 1/(1 + exp(x - mvhalf + mshift)/mslope) numerator = x - hvhalf + hshift theta = numerator/hslope exp_theta = {exp {theta}} denominator = 1.0 + exp_theta hinf = 1.0/denominator //calculate Hodgkin Huxley minf -> 1/(1 + exp(x - mvhalf + mshift)/mslope) numerator = x - mvhalf + mshift theta = numerator/mslope exp_theta = {exp {theta}} denominator = 1.0 + exp_theta minf = 1.0/denominator //The equation for mtau is an exact fit of the original curve from Johanes //Matlab function found in striatum/mspn/vectMakers/makeNaPtable.m if (c < 1410) //mtau = (0.025 + 0.14*exp((x + 40.0) / 10)) numerator = x + 40.0 theta = numerator/10 exp_theta = {exp {theta}} mtau = 0.025 + 0.14 * {exp_theta} mtau = 1e-3 * mtau else //mtau = (0.02 + 0.145*exp( -(x + 40.0)) / 10)) numerator = x + 40.0 numerator = neg_one * numerator theta = numerator/10 exp_theta = {exp {theta}} mtau = 0.025 + 0.145 * {exp_theta} mtau = 1e-3 * mtau end setfield {path} Y_A->table[{c}] {htau} setfield {path} Y_B->table[{c}] {hinf} setfield {path} X_A->table[{c}] {mtau} setfield {path} X_B->table[{c}] {minf} x = x + increment end //Define the powers of m and h in the Hodgkin-Huxley equation setfield {path} Ek {Erev} Xpower 1 Ypower 1 //fill the tables with the values of A and B //calculated from tau and n_inf tweaktau {path} X tweaktau {path} Y end