示例#1
0
 def __init__(self, pts, master=True):
     self.master = master
     diam = p.cell_diameter
     self.pts = pts
     self.sections = {}
     self.sl = h.SectionList()
     for pt in pts:
         gid = org2gid(*pt)
         sec = h.Section(name=str(gid))
         sec.pt3dclear()
         #draw the line a little shorter so we can see the junctions
         p1 = xyz(*pt)
         p2 = xyz(pt[0], pt[1], pt[2] + 1)
         dp = (p2[0] - p1[0], p2[1] - p1[1], p2[2] - p1[2])
         x, y, z = p1[0] + .05 * dp[0], p1[1] + .05 * dp[1], p1[
             2] + .05 * dp[2]
         sec.pt3dadd(x, y, z, diam - 1)
         x, y, z = p2[0] - .05 * dp[0], p2[1] - .05 * dp[1], p2[
             2] - .05 * dp[2]
         sec.pt3dadd(x, y, z, diam - 1)
         self.sections[sec] = gid
         self.sl.append(sec=sec)
     self.sh = h.Shape(self.sl)
     self.sh.menu_tool("print info", self.callback)
     if not master:
         for sec in self.sections:
             self.sh.color(gid2org(self.sections[sec])[0] + 1, sec=sec)
示例#2
0
def write_connection_file(outlayer, confile):
  """
    column 1:     id of the first cell
    column 2:     id of the second cell
    column 3:    area of the connection between the two cells
    column 4:    meang of the connection between the two cells
  """

  # have to generate gap junctions associated with outlayer
  layer_gids = set()
  gaps = []
  # all the layer gids
  for icircle in range(cellorg.ncircle[outlayer]):
    for ipt in range(cellorg.npts[outlayer][icircle]):
      gid = cellorg.org2gid(outlayer, icircle, ipt)
      layer_gids.add(gid)
  timeit("determined set of gids in layer (%d)"%(len(layer_gids),))
  # all the gaps with both sides in the layer
  for gid in layer_gids:
    gs = mkgap.gaps_for_gid(gid)
    for gap in gs:
      if gap.gid1 in layer_gids and gap.gid2 in layer_gids:
        gaps.append(gap)
  timeit("determined gaps with both sides in layer (%d)"%(len(gaps),))

  cf = open(confile, "w")
  for gap in gaps:
    cf.write("%d %d %g %d %g\n" % (gap.gid1, gap.gid2, gap.area, is_purkinje_gap(gap.gid1, gap.gid2), conductance(gap)))
  cf.close()
示例#3
0
def test2():
    pts = []
    for ilayer in range(1):
        for icircle in range(ncircle[ilayer]):
            for ipt in range(0, npts[ilayer][icircle], 5):
                if gid_is_simulated(org2gid(ilayer, icircle, ipt)):
                    pts.append((ilayer, icircle, ipt))
    return View(pts)
示例#4
0
def write_morphfile(outlayer, morphfile):
  mf = open(morphfile, "w")
  for icircle in range(cellorg.ncircle[outlayer]):
    for ipt in range(cellorg.npts[outlayer][icircle]):
      x,y,z = xyz(outlayer, icircle, ipt)
      gid = cellorg.org2gid(outlayer, icircle, ipt)
      assert (gid not in gid2orgmap)
      gid2orgmap[gid] = (outlayer, icircle, ipt)
      mf.write("%d %g %g %g\n"%(gid, x, y, z))
  mf.close()
示例#5
0
def vertstim():
    from cellorg import nlayer, ncircle, npts, org2gid
    r = []
    ilayer = 0
    for icircle in range(ncircle[ilayer]):
        for ipt in range(2):
            r.append(org2gid(ilayer, icircle, ipt))
    if rank == 0:
        print("vertstim (%d [0:%d] [0,1])" % (ilayer, ncircle[ilayer]))
    r = h.Vector(r)
    return r
示例#6
0
def circlestim():
    #return vertstim()
    from cellorg import nlayer, ncircle, npts, org2gid
    r = []
    ilayer = 0
    for icircle in range(ncircle[ilayer])[-2:]:
        npt = npts[ilayer][icircle]
        for ipt in range(npt):
            r.append(org2gid(ilayer, icircle, ipt))
        if rank == 0:
            print("circlestim (%d %d [0:%d])" % (ilayer, icircle, npt))
    r = h.Vector(r)
    return r
示例#7
0
def neighborhood(ilayer, icircle, ipt):
    global focusedview
    x, y, z = xyz(ilayer, icircle, ipt)
    gid = org2gid(ilayer, icircle, ipt)
    angle = ipt2angle(ipt, ilayer, icircle)
    pts = []
    for jlayer in range(nlayer):
        for jcircle in range(max([icircle - 5, 0]),
                             min([icircle + 1 + 5, ncircle[jlayer]])):
            npt = npts[jlayer][jcircle]
            n = min([int(npts[jlayer][jcircle] / 2), 5])
            kpt = angle2ipt(angle, jlayer, jcircle)
            for jpt in [i % npt for i in range(kpt - n, kpt + 1 + n)]:
                pts.append((jlayer, jcircle, jpt))
    focusedview = View(pts, master=False)
示例#8
0
def test1(ilayer, icircle, ipt):
    print(gaps_for_gid(org2gid(ilayer, icircle, ipt)))
示例#9
0
def gaps_for_gid(gid):
    if not gid_is_simulated(gid):
        return None
    o = gid2org(gid)
    ilayer, icircle, ipt = o
    pinfo = paraboloid[ilayer][icircle]
    rf = pinfo[2]  # RegionFace
    a = ipt2angle(1, ilayer, icircle)
    afirst = a * ipt
    alast = a * (ipt + 1)
    gs = []

    #circum coordinate, end to end
    if icircle < ncircle[ilayer] - 1:
        npt = npts[ilayer][icircle]
        area = area_circum(ilayer, icircle)
        for jpt in [ipt - 1, ipt + 1]:
            g2 = org2gid(ilayer, icircle, jpt)
            if g2 > gid:
                #dens_ipt = ipt if jpt < ipt else jpt%npts[ilayer][icircle]
                #g = conductance_density_circum(ilayer, icircle, dens_ipt)
                if gid_is_simulated(g2):
                    gs.append(set_gap(gid, g2, area))  #abscond(area, g)))

    # between layers
    if icircle < ncircle[ilayer] - 1:
        pinfo1 = paraboloid[ilayer][icircle + 1]
        for jlayer in [ilayer - 1, ilayer + 1]:
            if jlayer >= 0 and jlayer < nlayer:
                # usually 2, sometimes 1, and rarely 3, circles in jlayer overlap icircle
                # n = int(param.layer_thickness/param.cell_diameter)
                n = 1

                #jcircle, b = rf.p0b if jlayer < ilayer else rf.p1b
                p0, plast, (jcircle,
                            b) = (pinfo[0], pinfo1[0],
                                  rf.p0b) if jlayer < ilayer else (pinfo[1],
                                                                   pinfo1[1],
                                                                   rf.p1b)

                for p1 in b + [plast]:
                    jpt, angles = angle_overlap(o, jlayer, jcircle)
                    a0 = afirst
                    for a1 in angles + [alast]:
                        area = side_area(p0, p1, a1 - a0)
                        if area > 1e-9:  # ignore very small areas
                            g2 = org2gid(jlayer, jcircle, jpt)
                            if g2 > gid:
                                #dens_layer, dens_circle, dens_ipt = (ilayer, icircle, ipt) if jlayer < ilayer else (jlayer, jcircle, jpt)
                                #g = conductance_density_layer(dens_layer, dens_circle, dens_ipt)
                                if gid_is_simulated(
                                        g2) and jcircle < ncircle[jlayer] - 1:
                                    gs.append(set_gap(
                                        gid, g2, area))  #abscond(area, g)))
                        jpt += 1
                        a0 = a1
                    jcircle += 1
                    p0 = p1

    # between circles in same layer
    jlayer = ilayer
    for jcircle in [icircle - 1, icircle + 1]:
        if jcircle >= 0 and jcircle < ncircle[jlayer]:
            # how many cells between icircle and jcircle
            d = distance(xyz(ilayer, icircle, 0), xyz(jlayer, jcircle, 0))
            n = int(d / param.cell_diameter)

            jpt, angles = angle_overlap(o, jlayer, jcircle)
            a0 = afirst
            pinfo1 = paraboloid[ilayer][jcircle]
            p0, p1, dens_circle, dens_ipt = (pinfo[0], pinfo[1], icircle,
                                             ipt) if jcircle < icircle else (
                                                 pinfo1[0], pinfo1[1], jcircle,
                                                 jpt)
            for a1 in angles + [alast]:
                area = side_area(p0, p1, a1 - a0)
                if area > 1e-9:
                    g2 = org2gid(jlayer, jcircle, jpt)
                    if g2 > gid:
                        #dens_circle, dens_ipt = (icircle, ipt) if jcircle < icircle else (jcircle, jpt)
                        #g = conductance_density_parabola(ilayer, dens_circle, dens_ipt)
                        if gid_is_simulated(
                                g2) and jcircle < ncircle[jlayer] - 1:
                            gs.append(set_gap(gid, g2,
                                              area))  #abscond(area, g)))
                jpt += 1
                a0 = a1

    return gs