from common import * import gidfunc import params import misc import geodist from math import exp from util import elapsed import params h.load_file('blanes.hoc') def load_blanes_dic(filename): ggids_here = getmodel().granules.keys() blanes_here = set([x[1] for x in params.glom2blanes ]) import struct with open(filename, 'rb') as fi: rec = fi.read(24) while rec: ggid, blanesgid, w = struct.unpack('>QQQ', rec) if ggid in ggids_here and blanesgid in blanes_here: yield ggid, blanesgid, w rec = fi.read(24) def mkblanes(gid): return h.Blanes() def mk_gl2b_connections(): getmodel().mt2blanes_connections.clear() for x in params.glom2blanes: if len(x) == 2: glomid, blanes_gid = x w = None else: glomid, blanes_gid, w = x if blanes_gid not in getmodel().blanes.keys(): continue for mtgid in range(glomid*params.Nmtufted_per_glom+params.gid_mtufted_begin, (glomid+1)*params.Nmtufted_per_glom+params.gid_mtufted_begin): getmodel().mt2blanes_connections.add((mtgid, blanes_gid, w)) elapsed('%d middle tufted to blanes connections generated' % pc.allreduce(len(getmodel().mt2blanes_connections),1)) class mt2blanes: def __init__(self, mgid, blanesgid, w=None): self.mgid = mgid self.blanes_gid = blanesgid self.blanes_cell = getmodel().blanes[blanesgid] rng = params.ranstream(blanesgid, params.stream_blanes+gidfunc.mgid2glom(mgid)) ibranch = int(rng.discunif(0, self.blanes_cell.nden0-1)) idend = int(rng.discunif(0, self.blanes_cell.nden1-1)) x = rng.uniform(0,1) self.syn = h.Exp2Syn(self.blanes_cell.dend[ibranch][idend](x)) self.syn.e = 0 self.syn.tau1 = 1 self.syn.tau2 = 250 self.nc = pc.gid_connect(mgid, self.syn) if w: self.nc.weight[0] = w else: self.nc.weight[0] = params.mt2bc_exc_gmax self.nc.delay = 1 self.gid = gidfunc.mbs_gid(mgid, blanesgid) #pc.set_gid2node(self.gid, pc.id()) def wstr(self): return '%d %d %g\n'%(self.gid, self.nc.weight[1], self.nc.weight[2]*self.syn.gmax) class blanes2granule: def __init__(self, blanesgid, ggid, w=1): self.ggid = ggid self.blanes_gid = blanesgid self.granule_cell = getmodel().granules[ggid] rng = params.ranstream(blanesgid, params.stream_blanes+params.Nmtufted+ggid) L = self.granule_cell.priden2[0].L * rng.uniform(0, 1) if L <= self.granule_cell.priden2[0].L: sec = self.granule_cell.priden2[0] x = L/self.granule_cell.priden2[0].L self.syn = h.Exp2Syn(sec(x)) self.syn.e = -80 self.syn.tau1 = 1 self.syn.tau2 = 15 self.nc = pc.gid_connect(self.blanes_gid, self.syn) self.nc.weight[0] = w*params.bc2gc_inh_gmax self.nc.delay = 1 self.gid = gidfunc.bc2gc_gid(blanesgid, ggid) #pc.set_gid2node(self.gid, pc.id()) def wstr(self): return '%d %d %g\n'%(self.gid, self.nc.weight[1], self.nc.weight[2]*self.syn.gmax) def mk_b2g_connections(): # gid_blanes_existing = set([x[1] for x in params.glom2blanes ]) getmodel().blanes2gc_connections.clear() elapsed('\t%d granules are generated' % pc.allreduce(len(getmodel().granules),1)) for ggid, blanes_gid, factor in load_blanes_dic('blanes6.dic'): getmodel().blanes2gc_connections.add((ggid, blanes_gid, factor)) # for ggid in getmodel().granules: # for blanes_gid in gid_blanes_existing: # getmodel().blanes2gc_connections.add((ggid, blanes_gid)) elapsed('%d blanes to granule connections generated' % pc.allreduce(len(getmodel().blanes2gc_connections),1))