/********************************************************************
Taken from Grunditz A, Holbro N, Tian L, Zuo Y and Oertner TG
Spine neck plasticity controls postsynaptic calcium signals through
electrical compartmentalization
J Neuroscience (2008) 28: 13457-13466
*************************************************/

/********************************************************************
section list of all apical dendrites          
*************************************************/
objref all_apicals
all_apicals = new SectionList()
dendA5_0 all_apicals.subtree()


/********************************************************************
section list of all basal dendrites            
*************************************************/
objref all_basals
all_basals = new SectionList()
dendA1_0 all_basals.subtree()
dendA2_0 all_basals.subtree()
dendA3_0 all_basals.subtree()
dendA4_0 all_basals.subtree()


/********************************************************************
section list of primary apical branch          
*************************************************/
objref primary_apical_list
primary_apical_list = new SectionList()
dendA5_0 primary_apical_list.append
dendA5_01 primary_apical_list.append
dendA5_011 primary_apical_list.append
dendA5_0111 primary_apical_list.append
dendA5_01111 primary_apical_list.append
dendA5_011111 primary_apical_list.append
dendA5_0111111 primary_apical_list.append
dendA5_01111111 primary_apical_list.append
dendA5_011111111 primary_apical_list.append
dendA5_0111111111 primary_apical_list.append
dendA5_01111111111 primary_apical_list.append
dendA5_011111111111 primary_apical_list.append
dendA5_0111111111111 primary_apical_list.append
dendA5_01111111111111 primary_apical_list.append
dendA5_011111111111111 primary_apical_list.append
dendA5_0111111111111111 primary_apical_list.append
dendA5_01111111111111111 primary_apical_list.append
dendA5_011111111111111111 primary_apical_list.append
dendA5_0111111111111111111 primary_apical_list.append

/* reset nseg in primary apical so none smaller than 5 microns */

forsec primary_apical_list { ns=int(L/5+0.5)
        if (ns==0) {
             ns=1
        }
        if ((ns-int(ns/2)*2)==0) {
             ns=ns+1
        }
        nseg = ns
}



/********************************************************************
initialize basic parameters                    
*************************************************/
celsius = 30        /* temperature */
v_init=-65
global_ra=150.00 	/* internal resistivity in ohm-cm */
Cm=0.75             /* specific membrane capacitance in uF/cm^2 */
Rm=40000            /* specific membrane resistivity in ohm-cm^2 */ 
Vleak=-65           /* leak reversal -65mV */
Vrest=-65           /* resting potential -64.6 mV*/
isegfactor=100
isegfrac=0.8
spinelimit=100      /* distance beyond which to modify for spines */
spinefactor=2.0     /* factor by which to change passive properties */


/********************************************************************
procedure to insert and initialize channels    
*************************************************/
proc initchannels(){

/* passive properties */

print "Inserting passive membrane properties"
forall {insert pas  g_pas=1/(Rm)  Ra=global_ra  e_pas=Vleak 
}

/* soma active properties */

somaA {insert pas	e_pas=Vleak  g_pas=1/Rm   Ra=global_ra  cm=Cm
}

/* basal dendrites active properties */

forsec all_basals {insert pas	e_pas=Vleak  g_pas=1/Rm   Ra=global_ra  cm=Cm
}

dendA5_00{
    insert cadiffus
}

access somaA
area(0.5)
distance()

/* procedure to insert channels and set parameters in apical dendrites */

forsec all_apicals {

    /* do passive properties; modify for spines if far enough out */    

    insert pas	e_pas=Vleak  Ra=global_ra 
    for (x) { xdist=distance(x)
              if (xdist<=spinelimit) {
                 g_pas(x)=1/Rm
                 cm(x)=Cm
              } else {
                 g_pas(x)=spinefactor/Rm
                 cm(x)=spinefactor*Cm
              }
    }
    }
}

print "Passive properties and channels are initialized"




/********************************************************************
section list of the spine - written in python code now           

objref all_spines
all_spines = new SectionList()
spine_head all_spines.append
spine_neck all_spines.append

spine_head {
    insert pas  e_pas=Vleak  g_pas=spinefactor/Rm  Ra=global_ra  cm=spinefactor*Cm 
    insert car
    insert cadiffus
    insert canmda
}
spine_neck{
    insert pas  e_pas=Vleak  g_pas=spinefactor/Rm  Ra=global_ra  cm=spinefactor*Cm 
    insert cadiffus
}
*************************************************/