Skip to content

Instantly share code, notes, and snippets.

@JohnGriffiths
Forked from maedoc/utils.py
Created April 1, 2016 14:29
Show Gist options
  • Select an option

  • Save JohnGriffiths/29e8a6a965978b922f824277e17b36dc to your computer and use it in GitHub Desktop.

Select an option

Save JohnGriffiths/29e8a6a965978b922f824277e17b36dc to your computer and use it in GitHub Desktop.

Revisions

  1. @maedoc maedoc created this gist Mar 31, 2016.
    138 changes: 138 additions & 0 deletions utils.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,138 @@

    from tvb.simulator.lab import *
    import threading
    import numpy
    import time
    import sys
    from matplotlib.tri import Triangulation
    from matplotlib import pyplot as plt

    class SimThread(threading.Thread):

    def set_sim(self, sim, **kwds):
    self.sim = sim
    self.kwds = kwds
    self.t = -1.0

    def run(self):
    "Convenience method to call the simulator with **kwds and collect output data."
    tic = time.time()
    ts, xs = [], []

    for _ in self.sim.monitors:
    ts.append([])
    xs.append([])

    for data in self.sim(**self.kwds):
    for tl, xl, t_x in zip(ts, xs, data):
    if t_x is not None:
    t, x = t_x
    if t > self.t:
    self.t = t
    tl.append(t)
    xl.append(x)

    for i in range(len(ts)):
    ts[i] = numpy.array(ts[i])
    xs[i] = numpy.array(xs[i])

    self.results = list(zip(ts, xs))
    self.wall_time = time.time() - tic

    def formattime(eta):
    m = 60
    h = m*60
    d = 24*h
    msg = ''
    if eta > d:
    msg += '%d day(s), %d hour(s)' % (eta/d, ((eta/h) % 24))
    elif eta > h:
    msg += '%d hour(s), %d minute(s)' % (eta/h, ((eta/m) % 60))
    else:
    msg += '%d minute(s), %d seconds(s)' % (eta/m, eta%m)
    return msg

    def pbpct(p=1e2, eta=None, walltime=None):
    i = int(p/2)
    msg = '\r[%s%s] %d %%' % ('.'*i, ' '*(50 - i), p)
    if eta:
    msg += ', ETA: ' + formattime(eta)
    elif walltime:
    msg += ' Wall Time: ' + formattime(walltime)
    sys.stdout.write(msg)
    sys.stdout.flush()

    def run_sim_with_progress_bar(sim, simulation_length, polltime=1):
    tic = time.time()
    ar = SimThread()
    ar.set_sim(sim, simulation_length=simulation_length)
    ar.start()
    while True:
    prog = ar.t
    pct = prog*1e2/simulation_length
    toc = time.time() - tic
    if pct > 0.0:
    time_per_centile = toc / pct
    centiles_left = 100 - pct
    pbpct(pct, centiles_left * time_per_centile)
    else:
    pbpct(0.0)
    time.sleep(polltime)
    if hasattr(ar, 'wall_time'):
    pbpct(100.0, walltime=ar.wall_time)
    break
    return ar.results

    cortex = cortex.Cortex(load_default=True)

    def multiview(data, suptitle='', figsize=(15, 10), **kwds):

    cs = cortex
    vtx = cs.vertices
    tri = cs.triangles
    rm = cs.region_mapping
    x, y, z = vtx.T
    lh_tri = tri[(rm[tri] < 38).any(axis=1)]
    lh_vtx = vtx[rm < 38]
    lh_x, lh_y, lh_z = lh_vtx.T
    lh_tx, lh_ty, lh_tz = lh_vtx[lh_tri].mean(axis=1).T
    rh_tri = tri[(rm[tri] >= 38).any(axis=1)]
    rh_vtx = vtx[rm < 38]
    rh_x, rh_y, rh_z = rh_vtx.T
    rh_tx, rh_ty, rh_tz = vtx[rh_tri].mean(axis=1).T
    tx, ty, tz = vtx[tri].mean(axis=1).T

    views = {
    'lh-lateral': Triangulation(-x, z, lh_tri[argsort(lh_ty)[::-1]]),
    'lh-medial': Triangulation(x, z, lh_tri[argsort(lh_ty)]),
    'rh-medial': Triangulation(-x, z, rh_tri[argsort(rh_ty)[::-1]]),
    'rh-lateral': Triangulation(x, z, rh_tri[argsort(rh_ty)]),
    'both-superior': Triangulation(y, x, tri[argsort(tz)]),
    }

    def plotview(i, j, k, viewkey, z=None, zlim=None, zthresh=None, suptitle='', shaded=True, cmap=plt.cm.coolwarm, viewlabel=False):
    v = views[viewkey]
    ax = subplot(i, j, k)
    if z is None:
    z = rand(v.x.shape[0])
    if not viewlabel:
    axis('off')
    kwargs = {'shading': 'gouraud'} if shaded else {'edgecolors': 'k', 'linewidth': 0.1}
    if zthresh:
    z = z.copy() * (abs(z) > zthresh)
    tc = ax.tripcolor(v, z, cmap=cmap, **kwargs)
    if zlim:
    tc.set_clim(vmin=-zlim, vmax=zlim)
    ax.set_aspect('equal')
    if suptitle:
    ax.set_title(suptitle, fontsize=24)
    if viewlabel:
    xlabel(viewkey)

    figure(figsize=figsize)
    plotview(2, 3, 1, 'lh-lateral', data, **kwds)
    plotview(2, 3, 4, 'lh-medial', data, **kwds)
    plotview(2, 3, 3, 'rh-lateral', data, **kwds)
    plotview(2, 3, 6, 'rh-medial', data, **kwds)
    plotview(1, 3, 2, 'both-superior', data, suptitle=suptitle, **kwds)
    subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0, wspace=0, hspace=0)