void doinit() { /* initializes variables */ inputnumbers2(&spp, &nonodes2, 1); if (inputnumbers2error) return; nonodes2--; alloctree(&curtree.nodep, nonodes2); allocd(nonodes2, curtree.nodep); allocw(nonodes2, curtree.nodep); alloctree(&bestree.nodep, nonodes2); allocd(nonodes2, bestree.nodep); allocw(nonodes2, bestree.nodep); alloctree(&priortree.nodep, nonodes2); allocd(nonodes2, priortree.nodep); allocw(nonodes2, priortree.nodep); if (njumble > 1) { alloctree(&bestree2.nodep, nonodes2); allocd(nonodes2, bestree2.nodep); allocw(nonodes2, bestree2.nodep); } allocrest(); } /* doinit */
void doinit() { /* initializes variables */ inputnumbers2(&spp, &nonodes2, 1); getoptions(); if ( !usertree ) nonodes2--; alloctree(&curtree.nodep, nonodes2); allocd(nonodes2, curtree.nodep); allocw(nonodes2, curtree.nodep); if (!usertree) { alloctree(&bestree.nodep, nonodes2); allocd(nonodes2, bestree.nodep); allocw(nonodes2, bestree.nodep); alloctree(&priortree.nodep, nonodes2); allocd(nonodes2, priortree.nodep); allocw(nonodes2, priortree.nodep); if (njumble > 1) { alloctree(&bestree2.nodep, nonodes2); allocd(nonodes2, bestree2.nodep); allocw(nonodes2, bestree2.nodep); } } allocrest(); } /* doinit */
void globrearrange(long* numtrees,boolean* succeeded) { /* does global rearrangements */ tree globtree; tree oldtree; int i,j,k,num_sibs,num_sibs2; node *where,*sib_ptr,*sib_ptr2; double oldbestyet = curtree.likelihood; int success = false; alloctree(&globtree.nodep,nonodes2); alloctree(&oldtree.nodep,nonodes2); setuptree(&globtree,nonodes2); setuptree(&oldtree,nonodes2); allocd(nonodes2, globtree.nodep); allocd(nonodes2, oldtree.nodep); allocw(nonodes2, globtree.nodep); allocw(nonodes2, oldtree.nodep); copy_(&curtree,&globtree); copy_(&curtree,&oldtree); for ( i = spp ; i < nonodes2 ; i++ ) { num_sibs = count_sibs(curtree.nodep[i]); if(openloop)return; sib_ptr = curtree.nodep[i]; if ( (i - spp) % (( nonodes2 / 72 ) + 1 ) == 0 ) putchar('.'); fflush(stdout); for ( j = 0 ; j <= num_sibs ; j++ ) { re_move(&sib_ptr,&where); copy_(&curtree,&priortree); if (where->tip) { copy_(&oldtree,&curtree); copy_(&oldtree,&bestree); sib_ptr=sib_ptr->next; continue; } else { num_sibs2 = count_sibs(where); if(openloop)return; } sib_ptr2 = where; for ( k = 0 ; k < num_sibs2 ; k++ ) { addwhere = NULL; addtraverse(sib_ptr,sib_ptr2->back,true,numtrees,succeeded); if ( addwhere && where != addwhere && where->back != addwhere && bestree.likelihood > globtree.likelihood) { copy_(&bestree,&globtree); success = true; } sib_ptr2 = sib_ptr2->next; } copy_(&oldtree,&curtree); copy_(&oldtree,&bestree); sib_ptr = sib_ptr->next; } } copy_(&globtree,&curtree); copy_(&globtree,&bestree); if (success && globtree.likelihood > oldbestyet) { *succeeded = true; } else { *succeeded = false; } freed(nonodes2, globtree.nodep); freed(nonodes2, oldtree.nodep); freew(nonodes2, globtree.nodep); freew(nonodes2, oldtree.nodep); freetree(&globtree.nodep,nonodes2); freetree(&oldtree.nodep,nonodes2); }