BluePyOpt icon indicating copy to clipboard operation
BluePyOpt copied to clipboard

Non-existing myelin section has len(icell.myelin) > 0 causing error on access

Open lukasgd opened this issue 3 years ago • 2 comments

    That works on myelin and the `len(self.icell.myelin) == 1` looks like a bug given that NEURON crashes, complaining that the section was deleted upon accessing e.g. `self.icell.myelin[0]`. I've added safe support for `myelin` now in 2c67258.

Originally posted by @lukasgd in https://github.com/BlueBrain/BluePyOpt/pull/393#discussion_r939057827

lukasgd avatar Oct 03 '22 18:10 lukasgd

The behavior can be reproduced in the L5PC example, following the notebook

BluePyOpt/examples/l5pc$ ipython
Python 3.8.10 (default, Jun 22 2022, 20:18:18) 
Type 'copyright', 'credits' or 'license' for more information
IPython 8.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: !nrnivmodl mechanisms
/home/lukasd/src/arbor/bluepyopt_test/BluePyOpt/examples/l5pc
Mod files: "mechanisms/mechanisms/CaDynamics_E2.mod" "mechanisms/mechanisms/Ca_HVA.mod" "mechanisms/mechanisms/Ca_LVAst.mod" "mechanisms/mechanisms/Ih.mod" "mechanisms/mechanisms/Im.mod" "mechanisms/mechanisms/K_Pst.mod" "mechanisms/mechanisms/K_Tst.mod" "mechanisms/mechanisms/Nap_Et2.mod" "mechanisms/mechanisms/NaTa_t.mod" "mechanisms/mechanisms/NaTs2_t.mod" "mechanisms/mechanisms/SK_E2.mod" "mechanisms/mechanisms/SKv3_1.mod"

 -> Compiling mod_func.cpp
 => LINKING shared library ./libnrnmech.so
Successfully created x86_64/special

In [2]: from bluepyopt import ephys

In [3]: import l5pc_model

In [4]: l5pc_cell = ephys.models.CellModel('l5pc', morph=ephys.morphologies.NrnFileMorphology('morphology/C060114A7.asc', do_replace_axon
   ...: =True), mechs=l5pc_model.define_mechanisms(), params=l5pc_model.define_parameters())

In [5]: sim = ephys.simulators.NrnSimulator()

In [6]: release_params = {
   ...:     'gNaTs2_tbar_NaTs2_t.apical': 0.026145,
   ...:     'gSKv3_1bar_SKv3_1.apical': 0.004226,
   ...:     'gImbar_Im.apical': 0.000143,
   ...:     'gNaTa_tbar_NaTa_t.axonal': 3.137968,
   ...:     'gK_Tstbar_K_Tst.axonal': 0.089259,
   ...:     'gamma_CaDynamics_E2.axonal': 0.002910,
   ...:     'gNap_Et2bar_Nap_Et2.axonal': 0.006827,
   ...:     'gSK_E2bar_SK_E2.axonal': 0.007104,
   ...:     'gCa_HVAbar_Ca_HVA.axonal': 0.000990,
   ...:     'gK_Pstbar_K_Pst.axonal': 0.973538,
   ...:     'gSKv3_1bar_SKv3_1.axonal': 1.021945,
   ...:     'decay_CaDynamics_E2.axonal': 287.198731,
   ...:     'gCa_LVAstbar_Ca_LVAst.axonal': 0.008752,
   ...:     'gamma_CaDynamics_E2.somatic': 0.000609,
   ...:     'gSKv3_1bar_SKv3_1.somatic': 0.303472,
   ...:     'gSK_E2bar_SK_E2.somatic': 0.008407,
   ...:     'gCa_HVAbar_Ca_HVA.somatic': 0.000994,
   ...:     'gNaTs2_tbar_NaTs2_t.somatic': 0.983955,
   ...:     'decay_CaDynamics_E2.somatic': 210.485284,
   ...:     'gCa_LVAstbar_Ca_LVAst.somatic': 0.000333
   ...: }

In [7]: l5pc_cell.freeze(release_params)

In [8]: l5pc_cell.instantiate(sim)

In [9]: l5pc_cell.icell.myelin
Out[9]: l5pc[0].myelin[?]

In [10]: len(l5pc_cell.icell.myelin)
Out[10]: 1

In [11]: [s for s in l5pc_cell.icell.myelin]
NEURON: section in the object was deleted
 near line 0
 {create axon[2]}
                 ^

lukasgd avatar Oct 03 '22 18:10 lukasgd

One way to resolve this was implemented in 2c67258, as mentioned above.

lukasgd avatar Oct 03 '22 18:10 lukasgd