file:/local_home/local_home/hugo/neurospaces_project/heccer/source/c/snapshots/0/tests/code/calloutInjector.c (Mon Jun 16 00:03:50 2008
) HOME
1: //
2: // Heccer : a compartmental solver that implements efficient Crank-Nicolson
3: // integration for neuronal models.
4: //
5:
6: //////////////////////////////////////////////////////////////////////////////
7: //'
8: //' Heccer : testbed C implementation
9: //'
10: //' Copyright (C) 2006-2008 Hugo Cornelis
11: //'
12: //' functional ideas .. Hugo Cornelis, hugo.cornelis@gmail.com
13: //'
14: //' coding ............ Hugo Cornelis, hugo.cornelis@gmail.com
15: //'
16: //////////////////////////////////////////////////////////////////////////////
17:
18:
19: #include <stdio.h>
20:
21: #include "../../heccer/callout.h"
22: #include "../../heccer/compartment.h"
23: #include "../../heccer/heccer.h"
24:
25:
26: struct Compartment compSoma =
27: {
28: //m administrative overhead
29:
30: {
31: //m type of structure
32:
33: MATH_TYPE_Compartment,
34: },
35:
36: //m index of parent compartment, -1 for none
37:
38: -1,
39:
40: /* //m first mechanism */
41:
42: /* NULL, */
43:
44: /* //m number of mechanisms */
45:
46: /* 0, */
47:
48: //m descriptive values, alphabetical order
49:
50: /* double dCm; */
51:
52: 4.57537e-11, // unscaled 0.0164,
53:
54: /* double dEm; */
55:
56: -0.08,
57:
58: /* double dInitVm; */
59:
60: -0.068,
61:
62: /* double dInject; */
63:
64: 0,
65:
66: /* double dRa; */
67:
68: 360502, // unscaled 2.5,
69:
70: /* double dRm; */
71:
72: 3.58441e+08, // unscaled 1
73: };
74:
75:
76: struct InternalResults pirSoma =
77: {
78: //m membrane potential for this compartment
79:
80: 0.0,
81: };
82:
83:
84: struct ExternalResults perSoma =
85: {
86: //m external conductance, this is just an example
87:
88: 10.0,
89:
90: //m external current, another example
91:
92: 10.0,
93: };
94:
95:
96: ExternalFunction pefInjector;
97:
98:
99: //s a state describing structure that is external to heccer
100:
101: struct ExternalState
102: {
103: //m the number of times the external callout has been called by
104: //m heccer.
105:
106: int iSteps;
107: };
108:
109: struct ExternalState esSimulation =
110: {
111: 0,
112: };
113:
114: struct Callout callSoma =
115: {
116: {
117: //m type of structure
118:
119: MATH_TYPE_CallOut_conductance_current,
120: },
121:
122: //m external alien data
123:
124: &esSimulation,
125:
126: //m internal results
127:
128: &pirSoma,
129:
130: //m external results
131:
132: &perSoma,
133:
134: //m external function
135:
136: pefInjector,
137: };
138:
139:
140: int piC2m[] =
141: {
142: 1,
143: -1,
144: };
145:
146:
147: struct MathComponentArray mca =
148: {
149: //m number of math components
150:
151: 1,
152:
153: //m math component data
154:
155: &callSoma.mc,
156:
157: //m math component index, initialize to NULL
158:
159: NULL,
160:
161: };
162:
163:
164: struct Intermediary inter =
165: {
166: //m compartment array
167:
168: 1,
169:
170: &compSoma,
171:
172: //m all other mathematical components
173:
174: &mca,
175:
176: //m compartment 2 first mechanism number
177:
178: piC2m,
179: };
180:
181:
182: int pefInjector(struct Callout *pco, struct Heccer *pheccer, struct InternalResults *pir, struct ExternalResults *per)
183: {
184: //- set default result
185:
186: int iResult = 0;
187:
188: //- you can use pco->pvAlien to figure out the external state
189:
190: //- to do this, define you own private external state structure, see above
191:
192: //- access the external state structure using pco->pvAlien
193:
194: struct ExternalState *pes;
195:
196: pes = (struct ExternalState *)pco->pvAlien;
197:
198: //- and use it at your own convenience, we use it here to track
199: //- the number of steps the callout has been called.
200:
201: pes->iSteps++;
202:
203: //- set conductance and current according to the number of steps
204:
205: per->dConductance = 0.0;
206:
207: if (pes->iSteps > 2 && pes->iSteps < 9)
208: {
209: per->dCurrent = 5e-10;
210: }
211: else
212: {
213: per->dCurrent = 0.0;
214: }
215:
216: //- give some feedback for testing purposes
217:
218: fprintf(stdout, "The pefInjector callout injected %g current, and added %g conductance, at step %i\n", per->dCurrent, per->dConductance, pes->iSteps);
219: fprintf(stdout, "The pefInjector callout is advancing to time %g\n", pheccer->dTime);
220:
221: //- return result
222:
223: return(iResult);
224: }
225:
226:
227: #include "main.c"
228:
229:
230:
Generated by Xrefactory version 2.0.14 on Thu Jul 24 22:41:20 2008