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 "../../heccer/compartment.h" 20: #include "../../heccer/heccer.h" 21: 22: 23: #define HECCER_TEST_INTERVAL_DEFAULT_START (-0.1) 24: #define HECCER_TEST_INTERVAL_DEFAULT_END (0.05) 25: #define HECCER_TEST_INTERVAL_DEFAULT_ENTRIES 50 26: #define HECCER_TEST_STEPS 1 27: 28: 29: struct Compartment compSoma = 30: { 31: //m administrative overhead 32: 33: { 34: //m type of structure 35: 36: MATH_TYPE_Compartment, 37: }, 38: 39: //m index of parent compartment, -1 for none 40: 41: -1, 42: 43: /* //m first mechanism */ 44: 45: /* NULL, */ 46: 47: /* //m number of mechanisms */ 48: 49: /* 0, */ 50: 51: //m descriptive values, alphabetical order 52: 53: /* double dCm; */ 54: 55: 4.57537e-11, // unscaled 0.0164, 56: 57: /* double dEm; */ 58: 59: -0.08, 60: 61: /* double dInitVm; */ 62: 63: -0.068, 64: 65: /* double dInject; */ 66: 67: 0, 68: 69: /* double dRa; */ 70: 71: 360502, // unscaled 2.5, 72: 73: /* double dRm; */ 74: 75: 3.58441e+08, // unscaled 1 76: }; 77: 78: 79: //v a simple fast sodium channel 80: 81: struct ChannelActInact caiNaF = 82: { 83: //m administrative overhead 84: 85: { 86: //m type of structure 87: 88: MATH_TYPE_ChannelActInact, 89: }, 90: 91: //m first set of descriptive values, alphabetical order 92: 93: //m initial reversal potential 94: 95: 0.045, 96: 97: //m get reversal potential from this intermediary, -1 for none 98: 99: -1, 100: 101: //m maximal conductance when all channels are permissive 102: 103: 0.0002092393115, 104: 105: //m contributes to this concentration pool, -1 for none, boolean indicator only. 106: 107: -1, 108: 109: //m activation description 110: 111: { 112: //m power, for a standard heccer, something between 1 and 4 or so. 113: 114: 3, 115: 116: //m gate definition 117: 118: { 119: //m initial value, commonly forward over backward steady states 120: 121: 0.0078406449371415214, 122: 123: //m corresponding index in tables, set to -1 for initialization. 124: 125: -1, 126: 127: { 128: //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate 129: 130: { 131: //m multiplier 132: 133: 35.0e3, 134: 135: //m multiplier membrane dependence, 0.0 for no dependence 136: 137: 0.0, 138: 139: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence 140: 141: 0.0, 142: 143: //m choose between nominator or denominator, 1 means nominator, -1 144: //m means denominator 145: 146: -1.0, 147: 148: //m nominator or denominator offset 149: 150: 0.0, 151: 152: //m membrane offset 153: 154: 5.0e-3, 155: 156: //m denormalized time constant 157: 158: -10.0e-3, 159: }, 160: 161: //m backward kinetiks, commonly denoted with beta or perm to non-perm rate 162: 163: { 164: //m multiplier 165: 166: 7.0e3, 167: 168: //m multiplier membrane dependence, 0.0 for no dependence 169: 170: 0.0, 171: 172: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence 173: 174: 0.0, 175: 176: //m choose between nominator or denominator, 1 means nominator, -1 177: //m means denominator 178: 179: -1.0, 180: 181: //m nominator or denominator offset 182: 183: 0.0, 184: 185: //m membrane offset 186: 187: 65.0e-3, 188: 189: //m denormalized time constant 190: 191: 20.0e-3, 192: }, 193: }, 194: }, 195: }, 196: 197: //m inactivation description 198: 199: { 200: //m power, for a standard heccer, something between 1 and 4 or so. 201: 202: 1, 203: 204: //m gate definition 205: 206: { 207: //m initial value, commonly forward over backward steady states 208: 209: 0.26397776926502026, 210: 211: //m corresponding index in tables, set to -1 for initialization. 212: 213: -1, 214: 215: { 216: //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate 217: 218: { 219: //m multiplier 220: 221: 0.225e3, 222: 223: //m multiplier membrane dependence, 0.0 for no dependence 224: 225: 0.0, 226: 227: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence 228: 229: 0.0, 230: 231: //m choose between nominator or denominator, 1 means nominator, -1 232: //m means denominator 233: 234: -1.0, 235: 236: //m nominator or denominator offset 237: 238: 1.0, 239: 240: //m membrane offset 241: 242: 80.0e-3, 243: 244: //m denormalized time constant 245: 246: 10.0e-3, 247: }, 248: 249: //m backward kinetiks, commonly denoted with beta or perm to non-perm rate 250: 251: { 252: //m multiplier 253: 254: 7.5e3, 255: 256: //m multiplier membrane dependence, 0.0 for no dependence 257: 258: 0.0, 259: 260: //m 2b: multiplier membrane dependence offset, 0.0 for no dependence 261: 262: 0.0, 263: 264: //m choose between nominator or denominator, 1 means nominator, -1 265: //m means denominator 266: 267: -1.0, 268: 269: //m nominator or denominator offset 270: 271: 0.0, 272: 273: //m membrane offset 274: 275: -3.0e-3, 276: 277: //m denormalized time constant 278: 279: -18.0e-3, 280: }, 281: }, 282: }, 283: }, 284: }; 285: 286: 287: int piC2m[] = 288: { 289: 1, 290: -1, 291: }; 292: 293: 294: struct MathComponentArray mca = 295: { 296: //m number of math components 297: 298: 1, 299: 300: //m math component data 301: 302: &caiNaF.mc, 303: 304: //m math component index, initialize to NULL 305: 306: NULL, 307: 308: }; 309: 310: 311: struct Intermediary inter = 312: { 313: //m compartment array 314: 315: 1, 316: 317: &compSoma, 318: 319: //m all other mathematical components 320: 321: &mca, 322: 323: //m compartment 2 first mechanism number 324: 325: piC2m, 326: }; 327: 328: 329: #include "main.c" 330: 331: 332: