Пример #1
0
Sequence* free_Alignment ( Alignment *LA)
	{
	  /* Does not free the A->S field (sequences of A)*/

	  Sequence *S;
	  //aln_stack checks the alignment has not already been freed
	  if ( LA==NULL || !aln_stack(LA,FREE_ALN)){return NULL;}

	  S=LA->S;
	  free_char ( LA->file, -1);
	  free_char ( LA->seq_al, -1);
	  free_int  ( LA->seq_cache, -1);
	  free_int  ( LA->cdna_cache, -1);
	  free_char ( LA->name,-1);

	  free_char ( LA->tree_order,-1);
	  vfree ( LA->generic_comment);
	  free_char ( LA->seq_comment, -1);
	  free_char ( LA->aln_comment, -1);

	  free_int  ( LA->order, -1);

	  vfree ( LA->score_seq);
	  vfree ( LA->len);

	  free_profile (LA->P);
	  if ( LA->A){free_Alignment (LA->A);LA->A=NULL;}


	  vfree ( LA);
	  return S;
	}
Пример #2
0
Sequence* free_aln ( Alignment *LA){ return free_Alignment(LA);}
Пример #3
0
char *
msa2tree (char **mfa, unsigned int num) {

//  fprintf(stderr, "TREELIB: Starting msa2tree [%d]\n", num);

  struct DistanceMatrix *mat = NULL;
  struct Alignment *aln = NULL;
  struct ClusterGroup *group = NULL;
  struct Tree *njTree = NULL;

  char *treestring = NULL;
  assert(num >= 0);
  if (num == 0) {
    return NULL;
  } else if (num == 1) {
    if(asprintf(&treestring, "%d;", 0) == -1)
        fatal_util("asprintf failed");
    return treestring;
  } else if (num == 2) {
    float dist = jcdist(mfa[0], mfa[1]);
    dist *= 0.5;
    if(asprintf(&treestring, "(%d:%g, %d:%g)", 0, dist, 1, dist) == -1)
        fatal_util("asprintf failed");
    return treestring;
  }

//  fprintf(stderr, "TREELIB: Here is the msa\n");
//  unsigned int i = 0;  
//  for (i=0; i<num; i++) {
//    fprintf(stderr, "TREELIB:\t[%s]\n", mfa[i]);
//  }

//  fprintf(stderr, "TREELIB: Building the distance matrix\n");
  mat = mfa2dist(mfa, num);
  aln_init(&aln, num);
  group = alignment_to_ClusterGroup(aln, 0);
  group->matrix = mat;
//  print_DistanceMatrix(stderr, mat);

  fprintf(stderr, "TREELIB: Building the NJ tree\n");
  njTree = neighbour_joining_buildtree(group, 0);

  struct Tnode *tmpNode = NULL;
  tmpNode = njTree->child[2];
  njTree->child[2] = NULL;

//  fprintf(stderr, "TREELIB: Rooting the tree\n");
  struct Tnode *leftNode = NULL;
  leftNode = (struct Tnode *) malloc_util(sizeof(struct Tnode));
  leftNode->left = njTree->child[0];
  leftNode->right = njTree->child[1];
  leftNode->distance = 0.0;

  struct Tnode *rootNode = NULL;
  rootNode = (struct Tnode *) malloc_util(sizeof(struct Tnode));
  rootNode->left = leftNode;
  rootNode->right = tmpNode;

  njTree->child[0] = rootNode;
  njTree->child[1] = NULL;

  fprintf(stderr, "TREELIB: Converting tree to string\n");
  treestring = tree2string(njTree);
//  fprintf(stderr, "TREELIB: [[%s]]\n", treestring);

//  fprintf(stderr, "TREELIB: free aln\n");
  aln = free_Alignment(aln);

//  fprintf(stderr, "TREELIB: free group\n");
  group = free_ClusterGroup(group);

//  fprintf(stderr, "TREELIB: free njTree\n");
//  njTree = free_Tree(njTree);

//  fprintf(stderr, "TREELIB: Ending msa2tree\n");

  return treestring;
}