コード例 #1
0
    def ev(self, time):
        ''' set odors stimulation intensity '''
        model = getmodel()
        for gid, cell in model.mitrals.items():

            if gidfunc.ismitral(gid):
                g_e_baseline = params.orn_g_mc_baseline
                std_e = params.orn_g_mc_std
                g_e_max = params.orn_g_mc_max
            else:
                g_e_baseline = params.orn_g_mt_baseline
                std_e = params.orn_g_mt_std
                g_e_max = params.orn_g_mt_max

            if h.section_exists("tuftden", 0, cell):
                for i in range(int(cell.ornsyn.count())):
                    cell.ornsyn.o(i).cc_peak = self.w_odor[mgid2glom(gid)]
                    cell.ornsyn.o(i).g_e_baseline = g_e_baseline
                    cell.ornsyn.o(i).g_e_max = g_e_max
                    cell.ornsyn.o(i).std_e = std_e

        for nc in self.netcons.values():
            nc.event(h.t)

        if self.verbose and rank == 0:
            print 'activation of %s at %g (ms)\tinterval %g' % (
                self.odorname, time, self.next_invl)

        # set up for next sniff
        self.next_invl = self.rng_act.repick()
        if (time + self.next_invl) < (self.start + self.dur):
            h.cvode.event(time + self.next_invl,
                          (self.ev, (time + self.next_invl, )))
コード例 #2
0
def mkmitral(gid):
    if ismitral(gid):
        nrn = genMitral(gid)
        m = h.Mitral(gid)
    else:
        nrn = genMTufted(gid)
        m = h.mTufted(gid)

    m.createsec(len(nrn.dend), len(nrn.tuft))

    for i, d in enumerate(nrn.dend):

        if d.parent == nrn.soma[0]:
            m.secden[i].connect(m.soma(.5))
        else:
            index = nrn.dend.index(d.parent)
            m.secden[i].connect(m.secden[index](1))

    m.geometry()  # again to get the hillock stylized shape

    fillall(nrn, m)

    m.subsets()
    m.topol()  # need to connect secondary dendrites explicitly
    m.segments(
    )  # again to get the proper number of segments for tuft and secden
    m.memb()

    m.setup_orns(gid, params.stream_orn_w)

    if ismitral(gid):
        orn_g_std = params.orn_g_mc_std
        orn_g_baseline = params.orn_g_mc_baseline
        orn_g_max = params.orn_g_mc_max
    elif ismtufted(gid):
        orn_g_std = params.orn_g_mt_std
        orn_g_baseline = params.orn_g_mt_baseline
        orn_g_max = params.orn_g_mt_max

    for i in range(int(m.ntuft)):
        m.ornsyn.o(i).g_e_baseline = orn_g_baseline
        m.ornsyn.o(i).std_e = orn_g_std
        m.ornsyn.o(i).g_e_max = orn_g_max

    if mgid2glom(gid) in params.vclamp:
        m.vcinit()

    return m
コード例 #3
0
    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)
コード例 #4
0
ファイル: gapjunc.py プロジェクト: ModelDBRepository/240116
def init():
    data = {}
    for uid in range(nhost):
      data.update({ uid:(getmodel().mitrals.keys()) })
    data = a2a.all2all(data)
    mgids = []
    for _mgids in data.values(): mgids += _mgids
    mgids = set(mgids)

    # initialize source
    
    for mgid in getmodel().mitrals.keys():
        mpriden = split.mpriden(mgid)
        if not mpriden:
          continue
       
        rgj = params.ranstream(mgid, params.stream_gap_junction)

        
        mpriden.push()
        secref = h.SectionRef()
        h.pop_section()
        
        h.mk_gj_src(pc, mgid, secref)

        glomid = mgid2glom(mgid)
        
        sistergids = []

        # no longer all to all, only a chain
        if not (ismtufted(mgid) and (mgid - nmi) % nmt == (nmt - 1)):
            if ismitral(mgid) and mgid % nmxg == (nmxg - 1):
                sistergids += [glomid * nmt + nmi]
            else:
                sistergids += [mgid + 1]
            
        if not (ismitral(mgid) and mgid % nmxg == 0):
            if ismtufted(mgid) and (mgid - nmi) % nmt == 0:
                sistergids += [(glomid + 1) * nmxg - 1]
            else:
                sistergids += [mgid - 1]
            
        sistergids = mgids.intersection(range(glomid * nmxg, glomid * nmxg + nmxg) + range(glomid * nmt + nmi, glomid * nmt + nmt + nmi)).difference([ mgid ])  

        for sistermgid in sistergids:
            gap = h.Gap(mpriden(0.99))

            if ismitral(mgid) and ismitral(sistermgid):
                gap.g = rgj.uniform(gj_min_g1, gj_max_g1)
            elif  ismtufted(mgid) and ismtufted(sistermgid):
                gap.g = rgj.uniform(gj_min_g3, gj_max_g3)
            else:
                gap.g = rgj.uniform(gj_min_g2, gj_max_g2)
                

            getmodel().gj[(mgid, sistermgid)] = gap
            

    pc.barrier()

    # initialize targets
    for key, gap in getmodel().gj.items():
        mgid, sistermgid = key
        pc.target_var(gap, gap._ref_vgap, sistermgid)

    util.elapsed('Gap junctions built')
コード例 #5
0
    def __init__(self, odorname, start, dur, conc):
        ''' Specifies the odor for an OdorStim. Note that the OdorStim is
      activated with setup which can only be called after the mitrals
      dict exists (usually from determine_connections.py).
    '''
        if rank == 0:
            print("OdorStim %s start=%g dur=%g conc=%g" %
                  (odorname, start, dur, conc))
        self.odorname = odorname
        self.start = start
        self.dur = dur
        self.conc = conc
        self.verbose = True
        self.next_invl = 0

        if params.glomerular_layer == 0:
            self.w_odor = odors.odors[odorname].getORNs(conc)  # odor vector
        elif params.glomerular_layer == 1:
            self.w_odor = odors.odors[odorname].afterPG_1(conc)  # odor vector
        elif params.glomerular_layer == 2:
            self.w_odor = odors.odors[odorname].afterPG_2(conc)  # odor vector

        # set up the netcons to stimulate the ORNs
        self.netcons = {}
        if not use_OdorStimHelper:
            self.rng_act = params.ranstream(0, params.stream_orn_act)
            self.rng_act.uniform(params.sniff_invl_min, params.sniff_invl_max)

        model = getmodel()
        self.src = None
        if use_OdorStimHelper or allow_prcellstate_debug:
            src = h.OdorStimHelper()
            src.start = start
            src.dur = dur
            src.invl_min = params.sniff_invl_min
            src.invl_max = params.sniff_invl_max
            src.noiseFromRandom123(0, params.stream_orn_act, 0)
            self.src = src
        for gid, cell in model.mitrals.items():
            peak = self.w_odor[mgid2glom(gid)]
            if gidfunc.ismitral(gid):
                g_e_baseline = params.orn_g_mc_baseline
                std_e = params.orn_g_mc_std
                g_e_max = params.orn_g_mc_max
            else:
                g_e_baseline = params.orn_g_mt_baseline
                std_e = params.orn_g_mt_std
                g_e_max = params.orn_g_mt_max

            if h.section_exists("tuftden", 0, cell):
                for i in range(int(cell.ornsyn.count())):
                    nc = h.NetCon(self.src, cell.ornsyn.o(i))
                    self.netcons[(gid, i)] = nc
                    # NetCon weights are peak, base, gemax, stde
                    nc.weight[0] = peak
                    nc.weight[1] = g_e_baseline
                    nc.weight[2] = g_e_max
                    nc.weight[3] = std_e
                    nc.delay = 0.0

        if use_OdorStimHelper:
            pass
        else:
            self.fih = h.FInitializeHandler(0, (self.init_ev, (start, )))