Pleiotropic effects of SCZ-associated genes (Mäki-Marttunen et al. 2017)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:187615
Python and MATLAB scripts for studying the dual effects of SCZ-related genes on layer 5 pyramidal cell firing and sinoatrial node cell pacemaking properties. The study is based on two L5PC models (Hay et al. 2011, Almog & Korngreen 2014) and SANC models (Kharche et al. 2011, Severi et al. 2012).
Reference:
1 . Mäki-Marttunen T, Lines GT, Edwards AG, Tveito A, Dale AM, Einevoll GT, Andreassen OA (2017) Pleiotropic effects of schizophrenia-associated genetic variants in neuron firing and cardiac pacemaking revealed by computational modeling. Transl Psychiatry 7:5 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Neocortex L5/6 pyramidal GLU cell; Cardiac atrial cell;
Channel(s): I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I Sodium; I Calcium; I Potassium; I A, slow; Na/Ca exchanger; I_SERCA; Na/K pump; Kir;
Gap Junctions:
Receptor(s):
Gene(s): Nav1.1 SCN1A; Cav3.3 CACNA1I; Cav1.3 CACNA1D; Cav1.2 CACNA1C;
Transmitter(s):
Simulation Environment: NEURON; MATLAB; Python;
Model Concept(s): Schizophrenia;
Implementer(s): Maki-Marttunen, Tuomo [tuomo.maki-marttunen at tut.fi];
Search NeuronDB for information about:  Neocortex L5/6 pyramidal GLU cell; I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I Sodium; I Calcium; I Potassium; I A, slow; Na/Ca exchanger; I_SERCA; Na/K pump; Kir;
/
pleiotropy
almog
cells
BK.mod *
ca_h.mod
ca_r.mod
cad.mod *
epsp.mod *
ih.mod *
kfast.mod
kslow.mod
na.mod
SK.mod *
best.params *
calcifcurves.py
calcsteadystate.py
cc_run.hoc *
collectfig1.py
collectfig2.py
fig1_curves.mat
fig2_curves.mat
findDCshortthreshold.py
main.hoc *
model.hoc *
mosinit.hoc *
mutation_stuff.py
myrun.hoc *
mytools.py *
params.hoc *
runme.sh *
scalings.sav
                            
// The axon is the venerable Mainen 1996 axon.  Not perfect, yet very stable.  

create a_soma

n_axon_seg = 2
create iseg,hill,myelin[n_axon_seg],node[n_axon_seg]

proc create_axon() {
  n_axon_seg = 2
  create iseg,hill,myelin[n_axon_seg],node[n_axon_seg]

  a_soma {
    equiv_diam = sqrt(area(.5)/(4*PI))
  }

  iseg {               // initial segment between hillock + myelin
     L = 15
     nseg = 5
     diam = equiv_diam/10        // see Sloper and Powell 1982, Fig.71
  }

  hill {                
    L = 20
    nseg = 5
    diam(0:1) = 2*iseg.diam:iseg.diam
  }

  // construct myelinated axon with nodes of ranvier

  for i=0,n_axon_seg-1 {
    myelin[i] {         // myelin element
      nseg = 2
      L = 100
      diam = iseg.diam
    }
    node[i] {           // nodes of Ranvier
      nseg = 1
      L = 1.0
      diam = iseg.diam*.75       // nodes are thinner than axon
    }
  }

  a_soma connect hill(0), 0.5
  hill connect iseg(0), 1
  iseg connect node[0](0), 1
  node[0] connect myelin[0](0), 1

  for i=0,n_axon_seg-2  { 
      myelin[i] connect node[i+1](0), 1
      node[i+1] connect myelin[i+1](0), 1 
  }
}

// --------
// Spines
// --------
proc add_spines() { local a
  forsec "dend" {
    cm*=$1
    g_pas*=$1
  }
  forsec "apic" {
    cm*=$1
    g_pas*=$1
  }
	
}


proc load_3dcell() {

// $s1 filename

  forall delete_section()
  xopen($s1)
  access a_soma
  
  // make sure no compartments exceed 50 uM length
  forall {
    diam_save = diam
    n = int(L/20)    
    if (n==0) n=1
    nseg = n 
    if (n3d() == 0) diam = diam_save
  }    
  create_axon()
  init_cell()
}


proc init_cell() {

  // passive
  forall {
    insert pas
    Ra = ra 
    cm = c_m 
    g_pas = 1/rm
    e_pas = epas_sim
  }
    // exceptions along the axon
     forsec "myelin" cm = cm_myelin
     forsec "node" g_pas = g_pas_node
  forall {
  	insert iA 
	insert kslow 
	insert na
	insert iH
	insert cah
	insert car
	insert cad
	insert bk
	insert sk
  }

  forall if(ismembrane("k_ion")) ek = Ek
  forall if(ismembrane("na_ion")) ena = Ena    
  forall eh=-33
  forall if(ismembrane("ca_ion")) {
 	vshift_ca = 0
  }
}

proc density() {

  forall {
    Ra = ra 
    cm = c_m 
    g_pas = 1/rm
    e_pas = epas_sim
    vshiftm_na= na_shift1
    vshifth_na= na_shift2
    taum_scale_na=na_taum_scale
    tauh_scale_na=na_tauh_scale
    q10_iH=ih_q10
    shift_cah=cah_shift
    shifth_cah=cah_shifth

    shift_car=car_shift
    shifth_car=car_shifth
    qm_car=car_qm
  }


  add_spines(2)
   // exceptions along the axon
   forsec "myelin" cm = cm_myelin
   forsec "node" g_pas = g_pas_node
   forall vshift_na = -5
   forsec "myelin" {
  	gbar_na    = gna_soma
	gbar_kslow =gkslow_beta 
	gbar_iA    = gka_beta
   }

  hill {
  	gbar_na = gna_node
	vshiftm_na=7
	vshifth_na=3
	gbar_iA = gka_node
	gbar_kslow = gkslow_node
  }
	
  iseg {
  	gbar_na = gna_node
	vshiftm_na=7
	vshifth_na=3
	gbar_iA = gka_node
	gbar_kslow = gkslow_node
  }
	
  forsec "node" {
  	gbar_na = gna_node
	vshiftm_na=7
	vshifth_na=3
	gbar_iA = gka_node
	gbar_kslow = gkslow_node
  }

   // we put in all of teh dendrites the same values as in the a_soma and then overwrite the appical values	
  forsec "dend" {
    gbar_na = gna_soma
    gbar_kslow = gkslow_start+gkslow_beta
    gbar_iA = gka_start+gka_beta
    gbar_iH=gih_start 
    pbar_car=pcar_soma
    pbar_cah=pcah_soma
    gbar_sk=gsk_dend
    gbar_bk=gbk_dend
  }
  
  a_soma {
    gbar_na = gna_soma
    gbar_kslow = gkslow_start+gkslow_beta
    gbar_iA = gka_start+gka_beta
    gbar_iH=gih_start
    pbar_car=pcar_soma
    pbar_cah=pcah_soma
    gbar_sk=gsk_soma
    gbar_bk=gbk_soma
  }

  
  a_soma distance(0,0.5)
 
  forsec  ApicalDendSectionName {
	dist1=distance(0)
 	dist2=distance(1)

	
	gbar_na = gna_api
	if (dist1<dist_na){
           gbar_na(0:1) = (gna_soma+dist1*(gna_api-gna_soma)/dist_na):(gna_soma+dist2*(gna_api-gna_soma)/dist_na)
        }


	pbar_cah = pcah_api
        if (dist1<dist_cah){
           pbar_cah(0:1) = (pcah_soma+dist1*(pcah_api-pcah_soma)/dist_cah):(pcah_soma+dist2*(pcah_api-pcah_soma)/dist_cah) 
        }

        pbar_car = pcar_api
        if (dist1<dist_car){
           pbar_car(0:1) = (pcar_soma+dist1*(pcar_api-pcar_soma)/dist_car):(pcar_soma+dist2*(pcar_api-pcar_soma)/dist_car) 
	   //(pcar_soma+dist1*(pcar_api-pcar_soma)/dist_car):(pcar_soma+dist2*(pcar_api-pcar_soma)/dist_car)
        } 


	gbar_iA(0:1) = (gka_start+gka_beta*exp(gka_alpha*dist1)):(gka_start+gka_beta*exp(gka_alpha*dist2))

	gbar_kslow(0:1) = (gkslow_start+gkslow_beta*exp(gkslow_alpha*dist1)):(gkslow_start+gkslow_beta*exp(gkslow_alpha*dist2))
	
	gbar_iH(0:1) = (gih_start+gih_end/(1+exp(gih_alpha*(dist1-gih_x2)))):(gih_start+gih_end/(1+exp(gih_alpha*(dist2-gih_x2))))
	 
	gbar_bk = gbk_dend
        if (dist1<dist_bk){
           gbar_bk(0:1) = (gbk_soma+dist1*(gbk_dend-gbk_soma)/dist_bk):(gbk_soma+dist2*(gbk_dend-gbk_soma)/dist_bk)
        }

	gbar_sk = gsk_dend
	if (dist1<dist_sk){
           gbar_sk(0:1) = (gsk_soma+dist1*(gsk_dend-gsk_soma)/dist_sk):(gsk_soma+dist2*(gsk_dend-gsk_soma)/dist_sk)
        }

	
    }

        forsec  ApicalDendSectionName {

                if (pcah_soma<pcah_api){
                        if (pbar_cah>pcah_api){
                                pbar_cah=pcah_api
                        }
                }
                if (pcah_soma>pcah_api){
                        if (pbar_cah<pcah_api){
                                pbar_cah=pcah_api
                        }
                }

                if (pcar_soma<pcar_api){
                        if (pbar_car>pcar_api){
                                pbar_car=pcar_api
                        }
                }
                if (pcar_soma>pcar_api){
                        if (pbar_car<pcar_api){
                                pbar_car=pcar_api
                        }
                }

                if (gbar_na<gna_api) gbar_na=gna_api
		if (gbar_bk<gbk_dend) gbar_bk=gbk_dend
		if (gbar_sk<gsk_dend) gbar_sk=gsk_dend	
        }


}

// Copied from Hay model
// $s1 section
func getLongestBranch(){local maxL,d localobj distallist,sref
  //Commented out: Always calculate the distance with respect to soma 0.5
  //sprint(tstr,"%s distance()",$s1)
  //execute(tstr,this)

  //Not sure what this should do, commented out as well
  //if(0==strcmp($s1,"axon")){
  //  sprint(tstr,"%s[0] distance(1)",$s1)
  //  execute(tstr,this)
  //}

  maxL = 0
  d = 0
  distallist = new SectionList()
  forsec $s1 {
    sref = new SectionRef()
    if (sref.nchild==0) distallist.append()
  }
  forsec distallist{
    d = distance(1)
    if(maxL<d) maxL = d
  }
  // for the soma case
  if (maxL == 0) {
    $s1 {
      maxL = L
    }
  }
  return maxL
}

//Copied from Hay model
// $s1 section
// $2 distance x in micrometers
// return list of [1,2] vectors  - of the appropriate section and the location in each vector
obfunc locateSites() {local maxL,site,d0,d1,siteX,i localobj vv,ll
  ll = new List()

  //sprint(tstr,"%s distance()",$s1)
  //execute(tstr,this)

  //if(0==strcmp($s1,"axon")){
  //  sprint(tstr,"%s[0] distance(1)",$s1)
  //  execute(tstr,this)
  //}

  maxL = getLongestBranch($s1)
  site = $2
  i = 0
  forsec $s1 {
  if (distance(0) < distance(1)) {
      d0 = distance(0)
      d1 = distance(1)
    } else {
      d1 = distance(0)
      d0 = distance(1)
    }

    if (site <= d1 && site >= d0) {
      siteX = (site-d0)/(d1-d0)
      secNum = i
      vv = new Vector()
      ll.append(vv.append(secNum,siteX))
    }
    i = i+1
  }
  return ll
}