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 <stdlib.h> 20: 21: #include "../../heccer/compartment.h" 22: #include "../../heccer/heccer.h" 23: 24: 25: #define HECCER_TEST_INTERVAL_DEFAULT_START (-0.1) 26: #define HECCER_TEST_INTERVAL_DEFAULT_END (0.05) 27: #define HECCER_TEST_INTERVAL_DEFAULT_ENTRIES 50 28: #define HECCER_TEST_STEPS 1 29: 30: 31: struct Compartment comp = 32: { 33: //m administrative overhead 34: 35: { 36: //m type of structure 37: 38: MATH_TYPE_Compartment, 39: }, 40: 41: //m index of parent compartment, -1 for none 42: 43: -1, 44: 45: /* //m first mechanism */ 46: 47: /* NULL, */ 48: 49: /* //m number of mechanisms */ 50: 51: /* 0, */ 52: 53: //m descriptive values, alphabetical order 54: 55: /* double dCm; */ 56: 57: 5.755329373e-12, // unscaled 0.0164, 58: 59: /* double dEm; */ 60: 61: -0.08, 62: 63: /* double dInitVm; */ 64: 65: -0.068, 66: 67: /* double dInject; */ 68: 69: 0, 70: 71: /* double dRa; */ 72: 73: 772813.4375, // unscaled 2.5, 74: 75: /* double dRm; */ 76: 77: 8.548598272e9, // unscaled 3 78: }; 79: 80: 81: struct ChannelActInact caiCaT = 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.14702148735523224, 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: 1.7546722963501793e-09, 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: 1, 115: 116: //m gate definition 117: 118: { 119: //m initial value, commonly forward over backward steady states 120: 121: 0.038918706451336625, // 0.039478155609280696, 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: 2.6e3, 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: 1.0, 151: 152: //m membrane offset 153: 154: 0.021, 155: 156: //m denormalized time constant 157: 158: -8e-3, 159: }, 160: 161: //m backward kinetiks, commonly denoted with beta or perm to non-perm rate 162: 163: { 164: //m multiplier 165: 166: 0.18e3, 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: 1.0, 184: 185: //m membrane offset 186: 187: 0.04, 188: 189: //m denormalized time constant 190: 191: 4e-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.082602128127539254, // 0.08211379989188651, 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.0025e3, 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: 0.04, 243: 244: //m denormalized time constant 245: 246: 8e-3, 247: }, 248: 249: //m backward kinetiks, commonly denoted with beta or perm to non-perm rate 250: 251: { 252: //m multiplier 253: 254: 0.19e3, 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: 1.0, 272: 273: //m membrane offset 274: 275: 0.05, 276: 277: //m denormalized time constant 278: 279: -10.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: &caiCaT.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: &comp, 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: