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