Transforming XML file: NeuroMLFiles/Examples/ChannelML/CaHVA_Chan.xml using XSL file: NeuroMLFiles/Schemata/v1.8.1/Level2/ChannelML_v1.8.1_GENESIStab.xsl

View original file before transform

Converting the file: CaHVA_Chan.xml

// This is a GENESIS script file generated from a ChannelML v1.8.1 file
// The ChannelML file is mapped onto a tabchannel object


// Units of ChannelML file: SI Units, units of GENESIS file generated: Physiological Units

/*
    A channel from Maex, R and De Schutter, E. Synchronization of Golgi and Granule Cell Firing in a
    Detailed Network Model of the Cerebellar Granule Cell Layer
*/

function make_Gran_CaHVA_98

        /*
            A High Voltage Activated Ca2+ channel

            Reference: Maex, R and De Schutter, E.
           Synchronization of Golgi and Granule Cell Firing in a Detailed Network Model of the
           cerebellar Granule Cell Layer. J Neurophysiol, Nov 1998; 80: 2521 - 2537
            Pubmed: http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=9819260&dopt=Abstract
        */
        

        str chanpath = "/library/Gran_CaHVA_98"

        if ({exists {chanpath}})
            return
        end
        
        create tabchannel {chanpath}
            

        setfield {chanpath} \
            Ek 80 \
            Ik 0 \
            Xpower 2 \
            Ypower 1
        
        setfield {chanpath} \
            Gbar 0.9084215999999999 \
            Gk 0

        
        // There is a Q10 factor which will alter the tau of the gates
             
        float temp_adj_m = {pow 3 {(celsius - 17.350264793)/10}}
        float temp_adj_h = {pow 3 {(celsius - 17.350264793)/10}}

        float tab_divs = 400
        float v_min = -100

        float v_max = 100

        float v, dv, i
            
        // Creating table for gate m, using name X for it here

        float dv = ({v_max} - {v_min})/{tab_divs}
            
        call {chanpath} TABCREATE X {tab_divs} {v_min} {v_max}
                
        v = {v_min}

              
        // There is a voltage offset of 0.010. This will shift the dependency of the rate equations
        v = v - 10
            

        for (i = 0; i <= ({tab_divs}); i = i + 1)
            
            // Looking at rate: alpha
                
            float alpha
                
            float A, B, Vhalf
                         
            // ChannelML form of equation: alpha which is of form sigmoid, with params:
            // A = 1600, B = -0.01388888889, Vhalf = 0.005, in units: SI Units
            A = 1.6
            B = -13.888888889999999
            Vhalf = 5
            alpha = A / ( {exp {(v - Vhalf) / B}} + 1)
        
            // Looking at rate: beta
                
            float beta
                
            float A, B, Vhalf
                         
            // ChannelML form of equation: beta which is of form exp_linear, with params:
            // A = 100, B = -0.005, Vhalf = -0.0089, in units: SI Units
            A = 0.1
            B = -5
            Vhalf = -8.9
            

            if ( {abs {(v - Vhalf)/ B}} < 1e-6)
                beta = A * (1 + (v - Vhalf)/B/2)
            else
                beta = A * ((v - Vhalf) / B) /(1 - {exp {-1 * (v - Vhalf)/B}})
            end

        

            // Using the alpha and beta expressions to populate the tables

            float tau = 1/(temp_adj_m * (alpha + beta))
            
            setfield {chanpath} X_A->table[{i}] {temp_adj_m * alpha}
            setfield {chanpath} X_B->table[{i}] {temp_adj_m * (alpha + beta)}
                    
            v = v + dv

        end // end of for (i = 0; i <= ({tab_divs}); i = i + 1)
            
        setfield {chanpath} X_A->calc_mode 1 X_B->calc_mode 1
                    
        // Creating table for gate h, using name Y for it here

        float dv = ({v_max} - {v_min})/{tab_divs}
            
        call {chanpath} TABCREATE Y {tab_divs} {v_min} {v_max}
                
        v = {v_min}

              
        // There is a voltage offset of 0.010. This will shift the dependency of the rate equations
        v = v - 10
            

        for (i = 0; i <= ({tab_divs}); i = i + 1)
            
            // Looking at rate: alpha
                
            float alpha
                
                        
            // Found a generic form of rate equation for alpha, using expression: v < -0.060 ? 5.0 : 5 * (exp (-50 * (v - (-0.060))))
            // Will translate this for GENESIS compatibility...
                    
            // Equation (and all ChannelML file values) in SI Units but this script in Physiological Units
            
            v = v * 0.001 // temporarily set v to units of equation...
            

            if (v < -0.060 )
                alpha = 5.0
            else
                alpha = 5 * {exp {-50 * {v - {-0.060}}}}
            end
        
            
            v = v * 1000 // reset v
            
            // Set correct units of alpha
            alpha = alpha * 0.001

            
            // Looking at rate: beta
                
            float beta
                
                        
            // Found a generic form of rate equation for beta, using expression: v < -0.060 ? 0 : 5 - (5 * (exp (-50 * (v - (-0.060)))))
            // Will translate this for GENESIS compatibility...
                    
            // Equation (and all ChannelML file values) in SI Units but this script in Physiological Units
            
            v = v * 0.001 // temporarily set v to units of equation...
            

            if (v < -0.060 )
                beta = 0
            else
                beta = 5 - {5 * {exp {-50 * {v - {-0.060}}}}}
            end
        
            
            v = v * 1000 // reset v
            
            // Set correct units of beta
            beta = beta * 0.001

            

            // Using the alpha and beta expressions to populate the tables

            float tau = 1/(temp_adj_h * (alpha + beta))
            
            setfield {chanpath} Y_A->table[{i}] {temp_adj_h * alpha}
            setfield {chanpath} Y_B->table[{i}] {temp_adj_h * (alpha + beta)}
                    
            v = v + dv

        end // end of for (i = 0; i <= ({tab_divs}); i = i + 1)
            
        setfield {chanpath} Y_A->calc_mode 1 Y_B->calc_mode 1
                    


end

Time to transform file: 0.074 secs