import params from neuron import h from neuron import numpy import mkmitral pc = h.ParallelContext() nhost = int(pc.nhost()) rank = int(pc.id()) matrank = (41, 61) domain = ((-500, 1500, 50), (-500, 2500, 50)) def f(ii): i = int(ii) density = numpy.zeros(matrank) for gid in range(i , params.Nmitral, nhost): m = mkmitral.mkmitral(gid) for sec in m.secdens: accumulate_density(sec, density, domain) print gid return density def accumulate_density(sec, density, domain): sec.push() for i in range(int(h.n3d())): x,y = (h.x3d(i), h.y3d(i)) r = (round(x, domain[0]),round(y, domain[1])) if not False in r: density[r] += 1 h.pop_section() def round(x, d): # integer toward 0 min, max, inc where min is 0, if not in interval #return False if (x < d[0] or x > d[1]): return False return int((x - d[0])/d[2]) def compute(): for i in range(nhost): pc.submit(f, i) den = numpy.zeros(matrank) while(pc.working()): den += pc.pyret() return den if __name__ == '__main__': pc.runworker() density = compute() pc.done() print "density max = ", density.max() density = density * (20/density.max()) import pickle pickle.dump(density, open('density.dat', 'w')) #following works on linux if using openmpi from mayavi.mlab import barchart,show barchart(density) show()