dict_file_name = 'giddict.bin'
gid_dict = {}
ggid_dict = {}
mgid_dict = {}
def init():
global dict_file_name
try:
from sys import argv
dict_file_name = argv[argv.index('-dict') + 1]
load(dict_file_name)
except Exception:
pass
def load(fname = None):
gid_dict.clear()
ggid_dict.clear()
mgid_dict.clear()
global dict_file_name
if fname:
dict_file_name = fname
def add(dic, key, addkey, *arg):
# make set
try:
s = dic[key]
except KeyError:
s = set()
if addkey:
s.add(key)
dic.update({ key:s })
# update
s.update(set(arg))
# read file
if dict_file_name.endswith('.txt'):
f = open(dict_file_name, 'r')
line = f.readline()
while line:
# read line
tk = line.split()
# gid
gid = int(tk[0])
if gid % 2:
ggid = int(tk[1])
arc = float(tk[3])
entry = (ggid, arc)
if gid_dict.has_key(gid + 1):
entry = gid_dict[gid + 1] + entry
gid_dict[gid + 1] = entry
add(mgid_dict, entry[0], True, gid, entry[3])
else:
gid_dict.update({ gid:entry })
# add to granule dict
add(ggid_dict, ggid, False, gid)
else:
entry = (int(tk[1]), int(tk[2]), float(tk[3]))
try:
entry_odd = gid_dict[gid - 1]
entry += entry_odd
del gid_dict[gid - 1]
# mgid dict add
add(mgid_dict, entry[0], True, gid, entry_odd[0])
except KeyError:
pass
gid_dict.update({ gid:entry })
line = f.readline()
f.close()
else:
from struct import unpack
f = open(dict_file_name, 'rb')
rec = f.read(22)
while rec:
# read one record
mg_gid, mgid, isec, xm, ggid, xg = unpack('>LLHfLf', rec)
gid_dict.update({ mg_gid:(mgid, isec, xm, ggid, 0, xg) })
add(ggid_dict, ggid, False, mg_gid - 1)
add(mgid_dict, mgid, True, mg_gid, ggid)
rec = f.read(22)
f.close()
def query(gid, verbrec=False):
from params import Nmitral as nmitral, gid_granule_begin
from granules import Ngranule
if gid < nmitral:
descr = 'Mitral soma %d' % gid
isec = -1
x = 0.
elif gid >= gid_granule_begin and gid < (gid_granule_begin + Ngranule):
descr = 'Granule soma %d' % gid
isec = 0
x = 0.
elif gid % 2:
info = gid_dict[gid + 1]
descr = 'Granule %d(%.3g)-%d' % ((info[2], info[4], gid))
gid = info[3]
isec = 0
x = info[4]
else:
info = gid_dict[gid]
descr = 'Mitral %d[%d](%.3g)-%d' % (info[:3] + (gid, ))
gid, isec, x = info[:3]
if verbrec:
print descr
print '\n if you want use on vrecord write this params'
print '\t (' + str(gid) + ', ' + str(isec) + ', ' + str(x) + ')'
return gid, isec, x, descr
def mknetwork(gloms=[]):
gid_dict.clear()
mgid_dict.clear()
ggid_dict.clear()
from m2g_connections import determine_glom_connections as dgc
import params
import mgrs
from common import rank, nhost
if len(gloms) == 0: gloms = range(params.Ngloms)
for glomid in gloms:
# if glomid % nhost != rank:
# continue
ci = dgc(glomid)
# print 'glom=%d done' % glomid
for _ci in ci:
mgid = _ci[0]
ggid = _ci[3]
if not mgid_dict.has_key(mgid):
gids = []
mgid_dict.update({ mgid:gids })
else:
gids = mgid_dict[mgid]
syngid = mgrs.mgrs_gid(_ci[0], _ci[3])
gids.append(ggid)
gids.append(syngid)
gid_dict.update({ syngid:_ci })
if not ggid_dict.has_key(ggid):
gids = []
ggid_dict.update({ ggid:gids })
else:
gids = ggid_dict[ggid]
gids.append(syngid - 1)
#print 'glom=%d done' % glomid
def save(filename):
from struct import pack
fo = open(filename, 'w')
for gid, ci in gid_dict.items():
fo.write(pack('>LLHfLf', gid, ci[0], ci[1], ci[2], ci[3], ci[5]))
fo.close()
init()
if __name__ == '__main__':
from sys import argv
from params import Nmitral as nmitral, gid_granule_begin
from granules import Ngranule
if '-query' in argv:
try:
query(int(argv[-1]), True)
except:
print 'gid ', argv[-1], ' not found'
quit()