Using Strahler's analysis to reduce realistic models (Marasco et al, 2013)

 Download zip file 
Help downloading and running models
Accession:149000
Building on our previous work (Marasco et al., (2012)), we present a general reduction method based on Strahler's analysis of neuron morphologies. We show that, without any fitting or tuning procedures, it is possible to map any morphologically and biophysically accurate neuron model into an equivalent reduced version. Using this method for Purkinje cells, we demonstrate how run times can be reduced up to 200-fold, while accurately taking into account the effects of arbitrarily located and activated synaptic inputs.
Reference:
1 . Marasco A, Limongiello A, Migliore M (2013) Using Strahler's analysis to reduce up to 200-fold the run time of realistic neuron models. Sci Rep 3:2934 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Dendrite;
Brain Region(s)/Organism: Hippocampus; Cerebellum;
Cell Type(s): Hippocampus CA1 pyramidal GLU cell; Cerebellum Purkinje GABA cell;
Channel(s): I Na,t; I T low threshold; I K; I Calcium; Ca pump;
Gap Junctions:
Receptor(s): AMPA;
Gene(s):
Transmitter(s): Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Active Dendrites; Influence of Dendritic Geometry; Detailed Neuronal Models; Action Potentials; Synaptic Integration;
Implementer(s): Limongiello, Alessandro [alessandro.limongiello at unina.it];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; Cerebellum Purkinje GABA cell; AMPA; I Na,t; I T low threshold; I K; I Calcium; Ca pump; Glutamate;
/
PurkReductionOnLine
morphologies
readme.txt
CaE.mod *
CalciumP.mod *
CaP.mod *
CaP2.mod *
CaT.mod *
K2.mod *
K22.mod *
K23.mod *
KA.mod *
KC.mod *
KC2.mod *
KC3.mod *
KD.mod *
Kdr.mod *
Kh.mod *
Khh.mod *
KM.mod *
Leak.mod *
NaF.mod *
NaP.mod *
pj.mod
clusterisingMethods.hoc
fixnseg.hoc
mergingMethods.hoc
mosinit.hoc
ranstream.hoc *
RedPurk.hoc
stimulation1.hoc
useful&InitProc.hoc
                            
/*---------------------------------------------------------------------

   Written by Alessandro Limongiello
   University "Federico II" of Naples, 2012-2013

-----------------------------------------------------------------------*/


/*---------------------------------------------
                    STIMULATION
  ---------------------------------------------*/

gnabar_NaFSoma0 = 10
gcabar_CaP2Soma0 = 0.0005
gkbar_KhSoma0 = 0.0005

gcabar_CaP20 = 0.004
gcabar_CaT0 = 0.0015
gcabar_CaE0 = 0.008
gkbar_Khh0 = 0.0006
gkbar_KM0  = 0.00001
gkbar_KA0  = 0.08
gkbar_KD0  = 0.09
gkbar_KC30  = 0.06

proc channelsByMiyasho01(){ local ii,i

    
    forsec "soma.*" {  
        insert NaF  gnabar_NaF = gnabar_NaFSoma0
        insert NaP  gnabar_NaP = gnabar_NaP
        insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP2Soma0
        insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = 0
        insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = 0
        insert Khh gkbar_Khh = gkbar_Khh
        insert KM gkbar_KM = gkbar_KM
        insert KA gkbar_KA = gkbar_KA
        insert KD  gkbar_KD  = 0
        insert Kh   gkbar_Kh = gkbar_KhSoma0
        insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5 
    }
    
    forsec SmoothSectList{
         insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP20
         insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = gcabar_CaT0
         insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = gcabar_CaE0
         insert Khh gkbar_Khh = gkbar_Khh0
         insert KM  gkbar_KM  = gkbar_KM0
         insert KA  gkbar_KA  = gkbar_KA0
         insert KD  gkbar_KD  = gkbar_KD0
         insert KC3 gkbar_KC3  = gkbar_KC30
         insert K23 gkbar_K23 = gkbar_K23
         insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5            
    }
    
    forsec TrunkSectList{
         insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP20
         insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = gcabar_CaT0
         insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = gcabar_CaE0
         insert Khh gkbar_Khh = gkbar_Khh0
         insert KM  gkbar_KM  = gkbar_KM0
         insert KA  gkbar_KA  = gkbar_KA0
         insert KD  gkbar_KD  = gkbar_KD0
         insert KC3 gkbar_KC3  = gkbar_KC30
         insert K23 gkbar_K23 = gkbar_K23
         insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5            
    }
    
    forsec SpinySectList{
         insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP20
         insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = gcabar_CaT0
         insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = gcabar_CaE0
         insert Khh gkbar_Khh = gkbar_Khh0
         insert KM  gkbar_KM  = gkbar_KM0
         insert KA  gkbar_KA  = gkbar_KA0
         insert KD  gkbar_KD  = gkbar_KD0
         insert KC3 gkbar_KC3  = gkbar_KC30
         insert K23 gkbar_K23 = gkbar_K23
         insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5            
    }
    
    for (i = 0; i < eqSomaVector.size(); i = i + 1){
        ii = eqSomaVector.x(i)
        eqSection[ii] {   
            insert NaF  gnabar_NaF = gnabar_NaFSoma0*surfFact.x(ii)
            insert NaP  gnabar_NaP = gnabar_NaP*surfFact.x(ii)
            insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP2Soma0*surfFact.x(ii)
            insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = 0*surfFact.x(ii)
            insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = 0*surfFact.x(ii)
            insert Khh gkbar_Khh = gkbar_Khh*surfFact.x(ii)
            insert KM gkbar_KM = gkbar_KM*surfFact.x(ii)
            insert KA gkbar_KA = gkbar_KA*surfFact.x(ii)
            insert KD  gkbar_KD  = 0*surfFact.x(ii)
            insert Kh   gkbar_Kh = gkbar_KhSoma0*surfFact.x(ii)
            insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5 
        } 
    }

    for (i = 0; i < eqTrunkVector.size(); i = i + 1){
        ii = eqTrunkVector.x(i)
        eqSection[ii]{
             insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP20*surfFact.x(ii)
             insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = gcabar_CaT0*surfFact.x(ii)
             insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = gcabar_CaE0*surfFact.x(ii)
             insert Khh gkbar_Khh = gkbar_Khh0*surfFact.x(ii)
             insert KM  gkbar_KM  = gkbar_KM0*surfFact.x(ii)
             insert KA  gkbar_KA  = gkbar_KA0*surfFact.x(ii)
             insert KD  gkbar_KD  = gkbar_KD0*surfFact.x(ii)
             insert KC3 gkbar_KC3  = gkbar_KC30*surfFact.x(ii)
             insert K23 gkbar_K23 = gkbar_K23*surfFact.x(ii)
             insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5            
        }
    }
   
    for (i = 0; i < eqSmoothVector.size(); i = i + 1){
        ii = eqSmoothVector.x(i)
        eqSection[ii]{
             insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP20*surfFact.x(ii)
             insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = gcabar_CaT0*surfFact.x(ii)
             insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = gcabar_CaE0*surfFact.x(ii)
             insert Khh gkbar_Khh = gkbar_Khh0*surfFact.x(ii)
             insert KM  gkbar_KM  = gkbar_KM0*surfFact.x(ii)
             insert KA  gkbar_KA  = gkbar_KA0*surfFact.x(ii)
             insert KD  gkbar_KD  = gkbar_KD0*surfFact.x(ii)
             insert KC3 gkbar_KC3  = gkbar_KC30*surfFact.x(ii)
             insert K23 gkbar_K23 = gkbar_K23*surfFact.x(ii)
             insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5            
        }
    }

    for (i = 0; i < eqSpinyVector.size(); i = i + 1){
        ii = eqSpinyVector.x(i)
        eqSection[ii]{
             insert CaP2 cai = 4e-5 cao = 2.4 gcabar_CaP2 = gcabar_CaP20*surfFact.x(ii)
             insert CaT cai = 4e-5 cao = 2.4  gcabar_CaT = gcabar_CaT0*surfFact.x(ii)
             insert CaE cai = 4e-5 cao = 2.4  gcabar_CaE = gcabar_CaE0*surfFact.x(ii)
             insert Khh gkbar_Khh = gkbar_Khh0*surfFact.x(ii)
             insert KM  gkbar_KM  = gkbar_KM0*surfFact.x(ii)
             insert KA  gkbar_KA  = gkbar_KA0*surfFact.x(ii)
             insert KD  gkbar_KD  = gkbar_KD0*surfFact.x(ii)
             insert KC3 gkbar_KC3  = gkbar_KC30*surfFact.x(ii)
             insert K23 gkbar_K23 = gkbar_K23*surfFact.x(ii)
             insert cad taur_cad = 2 cainf_cad = 4e-5 kt_cad = 4e-5 kd_cad = 4e-5            
        }
    }
   
}
	
	
proc initMiyasho01(){
     
	t=0

	finitialize(-65)
    fcurrent()  
	
}


objref stimApp,synApp,netConApp,stimEqApp,synEqApp,netConEqApp

tau10 = 0.5  //0.4
tau20 = 1.2  //0.6
freqSyn = 80
syn_asyn = 1 //0
gmaxSynSeed = 0
poissonSeed = 987651119

objref randNum,randInterval,randGmax0,randPoss
objectvar StimList,Exp2SynList,NetConList,StimEqList,Exp2SynEqList,NetConEqList

objref distanceVect
distanceVect = new Vector(2000)

objref forbiddenVect

gmax00 = 5
gmaxSynDiv = 10 //2

objref rslist,rs
rslist = new List()  //random list

proc insertPurkSyn(){ local sec, secApp, possApp, i, intervalApp

    gmax0 = gmax00*1e-3
    interval_mean = 1000/freqSyn
    //interval_sd = interval_mean/interval_meanDiv 
    gmax0_sd = gmax0/gmaxSynDiv    
    
    clusterListApp = $o4
    StimList = new List()
    rslist = new List()  //random list
    Exp2SynList = new List()
    NetConList = new List()
    randNum = new Random($2)
    secApp = randNum.discunif(0,NSEC-1)
    randPoss = new Random($2)
    possApp = randPoss.uniform(0, 1)
    
    //randInterval = new Random(intervalSynSeed)
    //intervalApp = randInterval.normal(interval_mean,interval_sd^2)
    randGmax0 = new Random(gmaxSynSeed)
    gmax0App = randGmax0.normal(gmax0,(gmax0_sd)^2)  
    
    access soma 
    distance()
    sec = 0
    forbiddenVect = new Vector()
       
    forall { 
       if (issection("eqSection.*")||issection("soma.*")){
           forbiddenVect.append(sec)
       }    
       //if (diam>3.17) forbiddenVect.append(sec)
       if (StimulationTypePartial_Total == 0){
              ifsec SmoothSectList forbiddenVect.append(sec)
              ifsec TrunkSectList forbiddenVect.append(sec)
       }else if (sec<stimulatedGroup1Vect.size()){
             if (stimulatedGroup1Vect.x(sec)!=indexStimulatedCluster) forbiddenVect.append(sec)
       }
       
       sec=sec+1
    } 
    
    numNetStim = 0
    if (syn_asyn==1) {numNetStim = 1  
    }else if (syn_asyn==2) {
          numNetStim = nStimulationClusterList1 
    }else if (syn_asyn==0) {numNetStim = $1}
    
    for (i = 0; i < numNetStim; i = i + 1){
        stimApp = new NetStim(.5)
        stimApp.number= 100000 //50
        stimApp.interval=interval_mean
        stimApp.start = 0
        stimApp.noise=noise0       
        stimApp.seed(poissonSeed)
        StimList.append(stimApp)          
    }
    
    indexNetStim = 0
        
    for (i = 0; i < $1; i = i + 1){
        secApp = randNum.repick()
        while (forbiddenVect.contains(secApp)){secApp = randNum.repick()}
        if(optPrint) print secApp, i
        sec = 0 
        forall {
          if (sec==secApp) {
            //if (syn_asyn==0) intervalApp = randInterval.repick()
            possApp = randPoss.repick()
            gmax0App = randGmax0.repick()
            if (gmax0App<0) gmax0App=0
            
            if(optPrint) print "ALE0: ",gmax0App,secApp                           
            distanceVect.set(i,distance(0.5))

            synApp = new Exp2Syn(possApp)
            Exp2SynList.append(synApp)
            synApp.tau1=tau10
            synApp.tau2=tau20
            synApp.e=0
                
            if (syn_asyn==1) {
                  netConApp = new NetCon(StimList.o[0], Exp2SynList.o[i], 0, 0, gmax0App)  
            }else if (syn_asyn==2) {
                  indexNetStim = stimulatedGroup1Vect.x(sec)-1                       
                  netConApp = new NetCon(StimList.o[indexNetStim], Exp2SynList.o[i], 0, 0, gmax0App)      
            }else if (syn_asyn==0){
                  netConApp = new NetCon(StimList.o[i], Exp2SynList.o[i], 0, 0, gmax0App)
            }

//            if (syn_asyn==0) {
//               netConApp = new NetCon(StimList.o[i], Exp2SynList.o[i], 0, 0, gmax0App)   
//            }else{
//               netConApp = new NetCon(StimList.o[0], Exp2SynList.o[i], 0, 0, gmax0App)
//            }


            NetConList.append(netConApp)
          }
          sec=sec+1
        }   
    }   
}


possEq0 = 0.999
factTau1Syn = 1
factTau2Syn = 1
factGmaxSyn = 1


factGmaxSyn0 = 1
factGmaxSyn1 = 0


proc createEqSyn(){local j
    StimEqList = new List()
    Exp2SynEqList = new List()
    NetConEqList = new List()  

    for (j = 0; j < $1; j = j + 1){     
        stimEqApp = new NetStim(.5)
        stimEqApp.number = StimList.o[j].number
        //stimEqApp.interval=StimList.o[j].interval
        //stimEqApp.start=StimList.o[j].start
        stimEqApp.noise=StimList.o[j].noise
        stimEqApp.seed(987651119)                    
        StimEqList.append(stimEqApp) 

        synEqApp = new Exp2Syn(.5)
        synEqApp.e = 0  
        Exp2SynEqList.append(synEqApp)  
        netConEqApp = new NetCon(StimEqList.o(j),Exp2SynEqList.o(j),0,0,gmax0)   
        NetConEqList.append(netConEqApp)      
    }     
  
}


objectvar alreadyVisited

proc changeSurf(){local sec,j,i,index,possApp
    clusterListApp = $o1
    nCluster = clusterListApp.count
    strdef sname
    alreadyVisited = new Vector(0,0)    
    nsyn = $2  
    
    for (j = 0; j < nsyn; j = j + 1){
        possApp=Exp2SynList.o(j).get_loc()

        sname = secname()
    	sec = 0
    	forall if (!issection("eqSection.*")){
            if (issection(sname)) {break}
            sec=sec+1
        }
        
        for (i = 0; i < nCluster; i = i + 1){
            if (clusterListApp.o(i).contains(sec)) {break}
        }        
        
        if (!alreadyVisited.contains(sec)) {
           alreadyVisited.append(sec)
           orSurf2.set(i,orSurf2.x(i)+secSurf.x(sec))   
        }        
        pop_section()
    }
    
    if(optPrint) print "__________surfFact after synapse stimulus__________"
    
    for (i = 0; i < nCluster; i = i + 1){
        if (SURFFACT_PARTIAL_METHOD == 2 ){
           if (orSurf2.x(i)!=0){
              surfFact.set(i,surfFactVect.x(i)*orSurf2.x(i)/eqSurf.x(i))
              surfFactRmCm.set(i,surfFactVect.x(i)*orSurf2.x(i)/eqSurf.x(i))
           }else{
              surfFact.set(i,surfFactVect.x(i)*orSurf1.x(i)/eqSurf.x(i))
              surfFactRmCm.set(i,surfFactVect.x(i)*orSurf1.x(i)/eqSurf.x(i))
           }
        }else if (SURFFACT_PARTIAL_METHOD > 2 && SURFFACT_PARTIAL_METHOD < 5){
           if (orSurf2.x(i)!=0){
              surfFact.set(i,surfFactVect.x(i)*orSurf2.x(i)/eqSurf.x(i))
           }else{
              surfFact.set(i,surfFactVect.x(i)*orSurf1.x(i)/eqSurf.x(i))
           }              
        }else if (SURFFACT_PARTIAL_METHOD == 5) {
              surfFact.set(i,surfFactVect.x(i))
              surfFactRmCm.set(i,surfFactVect.x(i))
        }
        if(optPrint) print surfFact.x(i)
    }    

}



objref strobj
strobj = new StringFunctions()

objref removingList
objref removingVector
objref StimEqToSynList
objref distVect


proc findSyn(){ local sec,j,i,index,possApp
    clusterListApp = $o1
    nCluster = clusterListApp.count
    
    strdef sname
    StimEqList = new List()
    Exp2SynEqList = new List()
    NetConEqList = new List() 

    if(optPrint) {print "Synapsi\tSection number\tSection name\tCluster\tpathRi\tpathRi0\tRi(pathRi- pathRi0)\
          \tposs\tpathRiEq\tpathRiEq0\tRiEq (pathRiEq - pathRiEq0)\tpossEq\tfactGmaxSyn"}
    
    nsyn = $3
    if ($4==1){ nsyn= NSEC-2 }
    
    numNetStim = 0
    if (syn_asyn==1) {numNetStim = 1  
    }else if (syn_asyn==2) {
          numNetStim = nStimulationClusterList1 
    }else if (syn_asyn==0) {numNetStim = nsyn}
    
    StimEqToSynList = new List()
    
    for (i = 0; i < numNetStim; i = i + 1){
        StimEqList.append(StimList.o(i))    
        StimEqToSynList.append(new Vector(0,0))
    }
    
    
    for (j = 0; j < nsyn; j = j + 1){
             
        possApp=Exp2SynList.o(j).get_loc()
        sname = secname()
       	sec = 0
    	
    	forall if (!issection("eqSection.*")){
            if (issection(sname)) {/*print "section number: ",sec*/ break}
            sec=sec+1
        }

        for (i = 0; i < nCluster; i = i + 1){
            if (clusterListApp.o(i).contains(sec)) {/*print "EqSection number: ",i*/ break}
        }
          

        if (withLocation==1){    
           locationSearch2(sec,possApp,i)
           possEq = eqPoss
        }else {possEq = possEq0}
        
        //print "corr: ","morf ",sec,"poss ",possApp,"eq ",i,"possEq ",possEq
        
        factGmaxSyn0 = 1        
        
        if ($2==0){
           if (withLocation==0){
              factGmaxSyn = factGmaxSyn0*eqsecpathri.x(i)/secpathri.x(sec)
           }else{
              factGmaxSyn = factGmaxSyn0*eqLocalpathri/Localpathri
              if(optPrint) print "pappa: ",eqLocalpathri,Localpathri,eqLocalpathri/Localpathri,factGmaxSyn
           }      
           factTauSyn = 1
        } else if ($2==1){
           if (withLocation==0){
              factGmaxSyn = factGmaxSyn0*secpathri.x(sec)^(factGmaxSyn1)
           }else{
              factGmaxSyn = factGmaxSyn0*Localpathri^(factGmaxSyn1)
           }
           factTauSyn = 1 
        } else if ($2==2){
           factGmaxSyn = 1
           factTauSyn = 1 
        }       
        
    
        if(optPrint) {print j+1,sec,secname(),"\t",i,secpathri.x(sec),secpathri0.x(sec),\
              secpathri.x(sec)-secpathri0.x(sec),possApp,eqsecpathri.x(i),eqsecpathri0.x(i),\
              eqsecpathri.x(i)-eqsecpathri0.x(i),possEq,factGmaxSyn}          
                        
        synEqApp = new Exp2Syn(possEq)
        synEqApp.tau1 = tau10*factTau1Syn
        synEqApp.tau2 = tau20*factTau2Syn
        synEqApp.e = 0  
        Exp2SynEqList.append(synEqApp)  

        ww =   NetConList.o(j).weight        
      
        if (syn_asyn==1) {       
              netConEqApp = new NetCon(StimEqList.o(0),Exp2SynEqList.o(j),0,0,factGmaxSyn*ww)  
              StimEqToSynList.o(0).append(j)
        }else if (syn_asyn==2) {
//              if (eqSmoothVector.contains(i)){ indexNetStim = 1
//              }else{indexNetStim = 0}                      
//              netConEqApp = new NetCon(StimEqList.o(indexNetStim),Exp2SynEqList.o(j),0,0,factGmaxSyn*ww) 
//              StimEqToSynList.o(indexNetStim).append(j)
          indexNetStim = stimulatedGroup1Vect.x(sec)-1                       
          netConEqApp = new NetCon(StimEqList.o(indexNetStim),Exp2SynEqList.o(j),0,0,factGmaxSyn*ww) 
          StimEqToSynList.o(indexNetStim).append(j)
        }else if (syn_asyn==0){
              netConEqApp = new NetCon(StimEqList.o(j),Exp2SynEqList.o(j),0,0,factGmaxSyn*ww)
        }  

        NetConEqList.append(netConEqApp)  
        
        eqSection[i] synEqApp.loc(possEq) 

        pop_section()
        
        possEqBis=Exp2SynEqList.o(j).get_loc()
        //print "possEqBis: ", possEqBis
        pop_section()
        
    }

    removingList = new List()
    removingVector = new Vector(0,0)


    if (syn_asyn==1 || syn_asyn==2) {
       i = 0
       forsec "eqSection.*"{
           sname = secname()
           for (x) if (x>0 && x<1){
                poss = x 
                for (jj = 0; jj < StimEqToSynList.count; jj = jj + 1){
                     removingList.append(new Vector())
                     for (j = 0; j < StimEqToSynList.o(jj).size(); j = j + 1){
                        possApp=Exp2SynEqList.o(StimEqToSynList.o(jj).x(j)).get_loc()
                        if (issection(sname) && poss == possApp){
                            removingList.o(i).append(StimEqToSynList.o(jj).x(j))       
                        }
                        pop_section()                
                    }
                    i = i + 1
                }
           }
        }

        for (j = 0; j < removingList.count; j = j + 1){
            if (removingList.o(j).size()>0) {
                 for (i = 1; i < removingList.o(j).size(); i = i + 1){
                     NetConEqList.o(removingList.o(j).x(0)).weight = NetConEqList.o(removingList.o(j).x(0)).weight \
                                                                     + NetConEqList.o(removingList.o(j).x(i)).weight
                     removingVector.append(removingList.o(j).x(i))
                 }             
                 removingList.o(j).remove(0)     
            }
        }
        
        removingVector.sort()
        
        for (j = removingVector.size()-1; j >=0; j = j - 1){
            Exp2SynEqList.remove(removingVector.x(j))
            NetConEqList.remove(removingVector.x(j))        
        }
    }

}



proc locationSearch2(){local nCluster,secNum,orPoss,j
    {secNum=$1 orPoss=$2 j=$3}
    
   
    if(optPrint) print "______locationSearch________"
    
    
    Localpathri=orPoss*secpathri.x(secNum)+(1-orPoss)*secpathri0.x(secNum)
    eqLocalpathri=(Localpathri-orMinpathri.x(j))*(eqsecpathri.x(j)-eqsecpathri0.x(j))\
                   /(orMaxpathri.x(j)-orMinpathri.x(j)) + eqsecpathri0.x(j)
    eqPoss = (eqLocalpathri-eqsecpathri0.x(j))/(eqsecpathri.x(j)-eqsecpathri0.x(j))


    if (eqPoss<=0) eqPoss=0.001
    if (eqPoss>=1) eqPoss=0.999
    if(optPrint) print "EqSection number: ",j,"eqPoss: ",eqPoss

}


Loading data, please wait...