"""
This script aims to measure the Ca PIC, and do the IV test
# some of the functions here depend on defining the dendrites list as "basal" list
"""


from neuron import h

#####-----------------End of Function------------------------------------------------

def setDendriticdistance(cellObj):
    """This function calculate path distance of each segments to the soma"""
    
    new_nseg    =13
    for sec in cellObj.basal:
        if(sec.nseg < new_nseg):
            sec.nseg = new_nseg

    for sec in cellObj.basal:
        for seg in sec:
            seg.DendDist_info       = h.distance(cellObj.soma(0.5),seg)
    ###---------------end of for loop---------------------------------------------

    for sec in cellObj.basal:
        for seg in sec:
            if(seg.DendDist_info < -0.0001):
                print "ERROR: Negative dendritic path distance in segment %s (%f)\n" %(h.secname(sec=sec), seg.x)
                print "Revise where the dendrite is connected to the soma \n"
    ###---------------end of for loop---------------------------------------------
    print "Distance calculated"

#####-----------------End of Function------------------------------------------------

def placePunctaCaPIC(cellObj,cond,proximalLimit, distalLimit, theta = -43, clusterFreq = 100, clusterwidth = 25):
    """This function place the CaPIC channels

    INPUTS:
    clusterFreq : distance to repeat the Ca cluster , default = 100 um
    clusterwidth:  cluster width , default = 25 um
    theta       : Activation voltage, default = -43 mV

    the cluster width is 25 um 
    """

    ### place CaPIC on the dendrites
    for sec in cellObj.basal:
        sec.insert('Llva')
        sec.gcaLlvabar_Llva     = 0
        sec.theta_m_Llva        = theta       #(mV)
        # sec.tau_m_Llva          = 60        #(ms)
        # sec.kappa_m_Llva        = -6
    ##---------------------------------------

    d = proximalLimit
    while (d<distalLimit):
        for sec in cellObj.basal:
            for seg in sec:
                if( (seg.DendDist_info >= d) and (seg.DendDist_info < d+clusterwidth) ):
                    seg.gcaLlvabar_Llva     = cond
        d += clusterFreq
    ##------end of while loop-------------
    print "CaPIC channels has beem added from %d to %d" %(proximalLimit,distalLimit)

#####-----------------End of Function------------------------------------------------