# -*- coding: cp1252 -*-
import custom_params
if len(custom_params.filename) == 0: custom_params.filename = 'fig7'
from params import Nmitral
class Section:
def __init__(self):
self.index = -1
self.points = []
self.sons = []
self.parent = None
class Neuron:
def __init__(self):
self.dend = []
self.apic = None
self.tuft = []
self.soma = None
def getmitral(mgid):
from struct import unpack
def sec_read():
sec = Section()
parent_index, section_index, n = unpack('>hhH', fi.read(6))
for i in range(n):
sec.points.append(list(unpack('>ffff', fi.read(16))))
return parent_index, section_index, sec
fi = open('mitral.dump', 'rb')
offset = [ None ] * Nmitral
s = 2*Nmitral
for i in range(Nmitral):
l = unpack('>H', fi.read(2))[0]
offset[i] = s
s += l
fi.seek(offset[mgid])
nrn = Neuron()
nrn.soma = sec_read()[2]
nrn.apic = sec_read()[2]
nrn.apic.parent = nrn.soma
nrn.soma.sons.append(nrn.apic)
parent_index, section_index, sec = sec_read()
while section_index != 0:
if section_index < 0:
nrn.tuft.append(sec)
sec.parent = nrn.apic
nrn.apic.sons.append(sec)
else:
nrn.dend.append(sec)
sec.index = section_index - 1
if parent_index == 0:
sec.parent = nrn.soma
nrn.soma.sons.append(sec)
else:
secpar = nrn.dend[parent_index - 1]
secpar.sons.append(sec)
sec.parent = secpar
parent_index, section_index, sec = sec_read()
fi.close()
return nrn