Re: Multiple Executions of .nb file part2
- To: mathgroup at smc.vnet.net
- Subject: [mg90542] Re: Multiple Executions of .nb file part2
- From: dh <dh at metrohm.ch>
- Date: Sat, 12 Jul 2008 05:33:04 -0400 (EDT)
- References: <g54op3$f50$1@smc.vnet.net>
Sorry, I just confused my private communication with David and the group
and therefore answered to the wrong question. Here is the question and
the answer that settels it:
Answer:
Hi David,
if you put a semicolon behind area=..; and a //Print behind
ParametricPlot[..] and a Print around NeuronNumber your code will run.
Daniel
Question:
Dan,
Fun[SmV_]:=(**Code**)
I can call it with
Fun[-80]
And it returns me output for My program with a -80 input.
For some reason it isn't working for the larger implementation.
The follow code should generate 4 very different graphs:
time = 2000;
databaseModel[NeuronNumber_] := (
(* 0.628 *)
area = 0.628
InjectedCurrent = 0;
currentInjectionStart = 0;
currentInjectionFinish = 0;
startingMembraneV = -60;
numb = NeuronNumber;
n0 = (numb - Mod[numb, 6^7])/6^7;
numb = numb - (n0 * 6^7);
n1 = (numb - Mod[numb, 6^6])/6^6;
numb = numb - (n1 * 6^6);
n2 = (numb - Mod[numb, 6^5])/6^5;
numb = numb - (n2 * 6^5);
n3 = (numb - Mod[numb, 6^4])/6^4;
numb = numb - (n3 * 6^4);
n4 = (numb - Mod[numb, 6^3])/6^3;
numb = numb - (n4 * 6^3);
n5 = (numb - Mod[numb, 6^2])/6^2;
numb = numb - (n5 * 6^2);
n6 = (numb - Mod[numb, 6^1])/6^1;
numb = numb - (n6 * 6^1);
n7 = Mod[numb, 6]/6^0;
INaC = n0;
ICaTC = n1;
ICaSC = n2;
IA = n3;
IKCa = n4;
IKd = n5;
IH = n6;
IL = n7;
INaC = INaC*100;
ICaTC = ICaTC*2.5;
ICaSC = ICaSC *2;
IA = IA *10;
IKCa = IKCa*5;
IKd = IKd *25;
IH = IH*0.01;
IL = IL*0.01;
ic = InjectedCurrent;
ics = currentInjectionStart;
icf = currentInjectionFinish;
SmV = startingMembraneV;
PD1INam0[u_] := 1/(1 + Exp[(u + 25.5)/-5.29]);
PD1INah0[u_] := 1/(1 + Exp[(u + 48.9)/5.18]);
PD1INataum[u_] := 2.64 - 2.52/(1 + Exp[(u + 120)/-25]);
PD1INatauh[u_] := (1.34/(1 + Exp[(u + 62.9)/-10]))*(
1.5 + 1/(1 + Exp[(u + 34.9)/3.6]));
PD1ICaTm0[u_] := 1/(1 + Exp[(u + 27.1)/-7.2]);
PD1ICaTh0[u_] := 1/(1 + Exp[(u + 32.1)/5.5]);
PD1ICaTtaum[u_] := 43.4 - 42.6/(1 + Exp[(u + 68.1)/-20.5]);
PD1ICaTtauh[u_] := 210 - 179.6/(1 + Exp[(u + 55)/-16.9]);
PD1ICaSm0[u_] := 1/(1 + Exp[(u + 33)/-8.1]);
PD1ICaSh0[u_] := 1/(1 + Exp[(u + 60)/6.2]);
PD1ICaStaum[u_] := 2.8 + 14/((Exp[(u + 27)/10]) + (Exp[(u + 70)/-13]));
PD1ICaStauh[u_] := 120 + 300/((Exp[(u + 55)/9]) + (Exp[(u + 65)/-16]));
PD1IAm0[u_] := 1/(1 + Exp[(u + 27.2)/-8.7]);
PD1IAh0[u_] := 1/(1 + Exp[(u + 56.9)/4.9]);
PD1IAtaum[u_] := 23.2 - 20.8/(1 + Exp[(u + 32.9)/-15.2]);
PD1IAtauh[u_] := 77.2 - 58.4/(1 + Exp[(u + 38.9)/-26.5]);
PD1IKCam0[u_, x_] := (x/(x + 3))*1/(1 + Exp[(u + 28.3)/-12.6]);
PD1IKCataum[u_] := 180.6 - 150.2/(1 + Exp[(u + 46)/-22.7]);
PD1IKm0[u_] := 1/(1 + Exp[(u + 12.3)/-11.8]);
PD1IKtaum[u_] := 14.4 - 12.8/(1 + Exp[(u + 28.3)/-19.2]);
PD1IHm0[u_] := 1/(1 + Exp[(u + 75)/5.5]);
PD1IHtaum[u_] := 2/((Exp[(u + 169.7)/-11.6]) + (Exp[(u - 26.7)/14.3]));
PD1eca[x_] := 12.2396*Log[13000/x];
PD1INamx0[u_] := 1/(1 + Exp[-(u + 24.7)/5.29]);
PD1INahx0[u_] := 1/(1 + Exp[(u + 48.9)/5.18]);
PD1INataumx[u_] := 1.32 - 1.26/(1 + Exp[(u + 120)/25]);
PD1INatauhx[u_] := (0.67/(1 + Exp[-(u + 62.9)/10]))*(1.5 + 1/(1 + Exp[(u +
34.9)/3.6]));
solution = NDSolve[{
PD1INam'[
t] == (PD1INam0[PD1v[t]] - \
PD1INam[t])*(1/PD1INataum[PD1v[t]]), PD1INam[0] == PD1INam0[SmV]*(1/
PD1INataum[SmV]),
PD1INah'[t] == (PD1INah0[PD1v[t]] - PD1INah[t])*(
1/PD1INatauh[PD1v[t]]),
PD1INah[0] == PD1INah0[SmV]*(1/PD1INatauh[SmV]),
PD1ICaTm'[t] == (
PD1ICaTm0[PD1v[t]] - PD1ICaTm[t])*(1/PD1ICaTtaum[PD1v[t]]),
PD1ICaTm[0] == PD1ICaTm0[SmV]*(1/PD1ICaTtaum[SmV]),
PD1ICaTh'[t] == (PD1ICaTh0[PD1v[
t]] - PD1ICaTh[t])*(1/PD1ICaTtauh[PD1v[t]]),
PD1ICaTh[0] == PD1ICaTh0[SmV]*(1/PD1ICaTtauh[SmV]),
PD1ICaSm'[
t] == (PD1ICaSm0[PD1v[t]] - \
PD1ICaSm[t])*(1/PD1ICaStaum[PD1v[t]]),
PD1ICaSm[0] == PD1ICaSm0[SmV]*(1/PD1ICaStaum[SmV]),
PD1ICaSh'[t] == (PD1ICaSh0[PD1v[t]] - PD1ICaSh[
t])*(1/PD1ICaStauh[PD1v[t]]),
PD1ICaSh[0] == PD1ICaSh0[SmV]*(1/PD1ICaStauh[SmV]),
PD1IAm'[t] == (PD1IAm0[PD1v[t]] -
PD1IAm[t])*(1/PD1IAtaum[PD1v[t]]),
PD1IAm[0] == PD1IAm0[SmV]*(1/PD1IAtaum[SmV]),
PD1IAh'[t] == (PD1IAh0[PD1v[t]] - PD1IAh[t])*(
1/PD1IAtauh[PD1v[t]]),
PD1IAh[0] == PD1IAh0[SmV]*(1/PD1IAtauh[
SmV]),
PD1IKCam'[t] == (
PD1IKCam0[PD1v[t], PD1cca[t]] - PD1IKCam[t])*(1/PD1IKCataum[
PD1v[t]]),
PD1IKCam[0] == PD1IKCam0[SmV, 0.5]*(1/PD1IKCataum[SmV]),
PD1IKm'[t] == (
PD1IKm0[PD1v[t]] - PD1IKm[t])*(1/PD1IKtaum[PD1v[t]]),
PD1IKm[0] == PD1IKm0[SmV]*(1/PD1IKtaum[SmV]),
PD1IHm'[
t] == (PD1IHm0[PD1v[t]] - PD1IHm[t])*(1/PD1IHtaum[PD1v[t]]),
PD1IHm[0] == PD1IHm0[SmV]*(1/PD1IHtaum[SmV]),
PD1cca'[t] == (-14.96*((0*(
PD1ICaTm[t]^3)*PD1ICaTh[t]*(PD1v[t] -
PD1eca[PD1cca[t]])) +
(2*(PD1ICaSm[t]^3)*PD1ICaSh[t]*(PD1v[
t] - PD1eca[PD1cca[t]]))) -
PD1cca[t] + 0.05)*(1/200), PD1cca[0] == 0.05,
PD1v'[t] == -1*((0
+ 1*INaC*(PD1INam[t]^3)*PD1INah[t]*(PD1v[t] - 50)
+ 1*ICaTC*(
PD1ICaTm[t]^3)*PD1ICaTh[t]*(PD1v[t] - PD1eca[PD1cca[t]])
+ 1*
ICaSC*(PD1ICaSm[t]^3)*PD1ICaSh[t]*(PD1v[t] -
PD1eca[PD1cca[t]])
+ 1*IA*(PD1IAm[t]^3)*PD1IAh[t]*(PD1v[t] + 80)
+ 1*IKCa*(PD1IKCam[t]^4)*(PD1v[t] + 80)
+ 1*IKd*(PD1IKm[t]^4)*(PD1v[t] + 80)
+ 1*IH*PD1IHm[t]*(PD1v[t] + 20)
+ 1*IL*(PD1v[t] + 50)
)
- (
If[t < ics, 0, If[t > icf, 0, 1]]*ic
))
*(area),
PD1v[0] == SmV
},
{PD1v, PD1INam, PD1INah, PD1IKm, PD1IKCam, PD1IAm, PD1IAh,
PD1ICaTm,
PD1ICaTh, PD1ICaSm, PD1ICaSh, PD1IHm, PD1cca}, {
t, 0, time}, Method -> Automatic, MaxSteps ->
Infinity];
NeuronNumber
(*ParametricPlot[Evaluate[{t, PD1v[t]} /. solution], {t, 0, time}, \
PlotPoints -> time, PlotRange -> {SmV, 20},
PlotLabel -> "Model'
s Soma", AxesLabel -> {"Time (ms)", "Voltage (mV)"}];*)
ParametricPlot[Evaluate[{t,
PD1v[t]} /. solution], {t, 0, time}, PlotPoints ->
time, PlotRange -> {-80, 60}, PlotLabel -> NeuronNumber,
AxesLabel \
-> {"Time (ms)", "Voltage (mV)"}];
)
m = {{0}, {287978}, {295701}, {296048}};
Do[databaseModel[m[[i, 1]]], {i, 4}]
databaseModel[295701]
databaseModel[295701]
the graphs should all be different but they are coming out as flat
lines. I have played around with this but cannot get it too output as it
should. I wondered if this is something to do with the variables not
reseting. If you try the code without the function the 4 executions come
out as in the attached .jpg.
Thank you for your help with this. I am a biologist working on some
Neural simulations and am not prepared for things not running smoothly.
I find the tutorials and books can only take you so far.
Yours
David Fourie
--
Daniel Huber
Metrohm Ltd.
Oberdorfstr. 68
CH-9100 Herisau
Tel. +41 71 353 8585, Fax +41 71 353 8907
E-Mail:<mailto:dh at metrohm.com>
Internet:<http://www.metrohm.com>