Motor cortex microcircuit simulation based on brain activity mapping (Chadderdon et al. 2014)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:146949
"... We developed a computational model based primarily on a unified set of brain activity mapping studies of mouse M1. The simulation consisted of 775 spiking neurons of 10 cell types with detailed population-to-population connectivity. Static analysis of connectivity with graph-theoretic tools revealed that the corticostriatal population showed strong centrality, suggesting that would provide a network hub. ... By demonstrating the effectiveness of combined static and dynamic analysis, our results show how static brain maps can be related to the results of brain activity mapping."
Reference:
1 . Chadderdon GL, Mohan A, Suter BA, Neymotin SA, Kerr CC, Francis JT, Shepherd GM, Lytton WW (2014) Motor cortex microcircuit simulation based on brain activity mapping. Neural Comput 26:1239-62 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Neocortex;
Cell Type(s): Neocortex L5/6 pyramidal GLU cell; Neocortex M1 L2/6 pyramidal intratelencephalic GLU cell; Neocortex fast spiking (FS) interneuron; Neocortex spiking regular (RS) neuron; Neocortex spiking low threshold (LTS) neuron;
Channel(s):
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Oscillations; Laminar Connectivity;
Implementer(s): Lytton, William [bill.lytton at downstate.edu]; Neymotin, Sam [Samuel.Neymotin at nki.rfmh.org]; Shepherd, Gordon MG [g-shepherd at northwestern.edu]; Chadderdon, George [gchadder3 at gmail.com]; Kerr, Cliff [cliffk at neurosim.downstate.edu];
Search NeuronDB for information about:  Neocortex L5/6 pyramidal GLU cell; Neocortex M1 L2/6 pyramidal intratelencephalic GLU cell; GabaA; AMPA; NMDA; Gaba; Glutamate;
/
src
README
infot.mod *
intf6.mod *
intfsw.mod *
matrix.mod
misc.mod *
nstim.mod *
staley.mod *
stats.mod *
vecst.mod *
boxes.hoc *
col.hoc
declist.hoc *
decmat.hoc *
decnqs.hoc *
decvec.hoc *
default.hoc *
drline.hoc *
filtutils.hoc *
gcelldata.hoc
gmgs102.nqs
grvec.hoc *
infot.hoc *
init.hoc
intfsw.hoc *
labels.hoc *
load.py
local.hoc *
main.hoc
misc.h *
miscfuncs.py
network.hoc
neuroplot.py *
nload.hoc
nqs.hoc *
nqsnet.hoc
nrnoc.hoc *
params.hoc
run.hoc
samutils.hoc *
saveoutput.hoc
saveweights.hoc
setup.hoc *
simctrl.hoc *
spkts.hoc *
staley.hoc *
stats.hoc *
stdgui.hoc *
syncode.hoc *
updown.hoc *
wdmaps2.nqs
xgetargs.hoc *
                            
// $Id: staley.hoc,v 1.23 2010/01/15 21:07:35 samn Exp $ 

print "Loading staley.hoc..."

{install_staley()}

//* trace analysis
//** outputnqs = getsznq(inputvector)
// gets an nqs with time-bounds of seizures detected with staley code in staley.mod
obfunc getsznq () { local i,ns localobj nqsz,vtmp
  nqsz=new NQS("id","numspikest","startidx","endidx","startms","endms","startmin","endmin")
  vtmp=$o1
  if ((ns=vtmp.getseizures(nqsz.v[1],nqsz.v[2],nqsz.v[3]))<1) return nil // "no seizures found"
  if(ns>1) nqsz.v[0].indgen(0,nqsz.v[1].size-1,1) else nqsz.v[0].append(0)
  for i=2,3 {
    nqsz.v[i+2].copy(nqsz.v[i])
    nqsz.v[i+2].mul(1e3/samprate_staley)
    nqsz.v[i+4].copy(nqsz.v[i+2])
    nqsz.v[i+4].div(60000)
  }
  return nqsz
}

//** getallchsznq(inputnqs with coumns as EEG time-series,vmask - mask of which columns to find seizures for)
// get seizures on all channels of inputnqs($o1) specified in vids($o2)
// in output nqs, "id" has the seizure identifier within a given channel, and "gid"
// has the global seizure identifier across all channel
// vmask.x(i) == 1 iff should use channel i (inputnqs.v[i]) to find seizures, otherwise channel i is skipped
obfunc getallchsznq () { local a,idx,bsz,esz,ii,jj,lend,nid,gid,mii,mxi,changed,done,i,j,st1,st2,et1,et2,tt\
                        localobj nqin,nqout,vmask,nqtmp,vch,vfrag,vb,ve,vdur,v1,v2,v3,\
                        vsmin,vemin,vnsmin,vnemin,vid,vbe,vbi
  nqin=$o1 vmask=$o2
  if (vmask==nil) {vmask=getvmask(nqin) $o2=vmask}
  nqout=new NQS("id","numspikest","startidx","endidx","startms","endms","startmin","endmin","ch")
  nqout.info.set("chans",vch=new Vector(0))  nqout.info.set("frags",vfrag=new Vector(0))
  nqout.info.set("beg",vb=new Vector(0))     nqout.info.set("end",ve=new Vector(0))
  nqout.info.set("dur",vdur=new Vector(0))
  nqout.info.set("begidx",vbi=new Vector(0)) nqout.info.set("endidx",vbe=new Vector(0))
  a=allocvecs(v1,v2,v3,vsmin,vemin,vid,vnsmin,vnemin)
  for idx=0,vmask.size-1 if(vmask.x(idx)!=0) {
    // printf("looking for seizures on column %d\n",idx)
    if((nqtmp=getsznq(nqin.v[idx]))!=nil) {
      nqtmp.resize("ch") nqtmp.pad() nqtmp.v[nqtmp.m-1].fill(idx)
      nqout.append(nqtmp) nqsdel(nqtmp)
    }
  }  
  {nqout.sort("endmin") nqout.sort("startmin")}
  {vid.resize(nqout.v.size) vsmin.copy(nqout.getcol("startmin")) vemin.copy(nqout.getcol("endmin"))}
  for i=0,vsmin.size-1 { //find start/end of seizures overlapping across channels
    {st1=vsmin.x(i) et1=vemin.x(i)}
    for j=0,vsmin.size-1 if(i!=j) {
      {st2=vsmin.x(j) et2=vemin.x(j)}
      if(st2>=st1 && st2<=et1) {
        {st1=MIN(st1,st2)      et1=MAX(et1,et2)}
        {vsmin.x(i)=vsmin.x(j)=st1 vemin.x(i)=vemin.x(j)=et1}
      } else if(st1>=st2 && st1<=et2) {
        {st1=MIN(st1,st2)      et1=MAX(et1,et2)}
        {vsmin.x(i)=vsmin.x(j)=st1 vemin.x(i)=vemin.x(j)=et1}
      }
    }
  }
  {vrsz(0,vnsmin,vnemin) nid=tt=0} //set global ids for seizures
  if(vsmin.size>0) {tt=vemin.x(0)-vsmin.x(0) vnsmin.append(vsmin.x(0)) vnemin.append(vemin.x(0))}
  if(vsmin.size>1) {
    for i=0,vsmin.size-2 {
      vid.x(i)=nid
      if(vsmin.x(i)!=vsmin.x(i+1) || vemin.x(i)!=vemin.x(i+1)) {
        {nid+=1 vnsmin.append(vsmin.x(i+1)) vnemin.append(vemin.x(i+1))}
      }
    }
    if(vsmin.x(i)!=vsmin.x(i-1) || vemin.x(i)!=vemin.x(i-1)) nid+=1 //check last seizure's id
    vid.x(i)=nid
  } else if(vsmin.size==1) vid.x(0)=0
  {nqout.resize("gid") nqout.getcol("gid").copy(vid)}//set the new gids
  {vb.copy(vnsmin)  ve.copy(vnemin)}
  {vbi.copy(vnsmin) vbe.copy(vnemin) vbe.apply("min2ind") vbi.apply("min2ind")}
  {vdur.copy(ve) vdur.sub(vb)}
  nqout.verbose=0
  for ii=0,nid {
    vfrag.append(nqout.select("gid",ii))
    vch.append(nqout.getcol("ch").uniq())
  }
  nqout.verbose=1 nqout.tog("DB")
  dealloc(a)
  return nqout
}

//** stichallsznq(nqs from geallchsznq)
//get nqs with overlapping(in time) seizures combined
obfunc stitchallsznq () { local c1,c2,i,j,a localobj vs,ve,nqo,nqin
  a=allocvecs(vs,ve)
  nqin=$o1
  nqin.tog("DB")
  nqin.verbose=0
  vrsz(nqin.v.size(),vs,ve)
  c1=nqin.fi("startmin")
  c2=nqin.fi("endmin")
  for i=0,vs.size-1 {
    vs.x(i)=nqin.v[c1].x(i)
    ve.x(i)=nqin.v[c2].x(i)    
  }
  nqo=new NQS("id","startidx","endidx","startms","endms","startmin","endmin","numspikest")
  for i=0,vs.size-1 {
    for j=0,vs.size-1 {
    }
  }
  dealloc(a)
  nqin.verbose=1
  return nqo
}