Exemple #1
0
int main(int argc, char **argv) {
  data d;
  glam2_aln *alns;
  int r;

  prog_name = "glam2";  /* for error messages */
  getargs(&d.a, argc, argv);
  init(&d);

  fputs("GLAM2: Gapped Local Alignment of Motifs\nVersion "
#include "glam2_version.h"
	"\n\n", d.out);
  printargs(d.out, argc, argv);
  print_misc_info(d.out, &d);
  putc('\n', d.out);
  XMALLOC(alns, d.a.runs);

  for (r = 0; r < d.a.runs; ++r) {
    glam2_aln *aln = &alns[r];
    if (!d.a.quiet) {
      fprintf(stderr, "Run %d... ", r+1);
      fflush(stderr);
    }
    aln_init(aln, d.seqs.seqnum, d.a.max_width, d.alph.size);
    d.sm.underflow_flag = 1;  /* do we care about underflow in start_aln? */
    start_aln(aln, &d);
    optimise_aln(aln, &d);
    if (d.sm.underflow_flag < (d.a.algorithm == 2 ? DBL_EPSILON : DBL_MIN))
      fprintf(stderr, "%s: accuracy loss due to numeric underflow (%g)\nIf the alignment looks suspect, try rerunning with higher -u, or maybe lower -b\n", prog_name, d.sm.underflow_flag);
    if (d.a.profile)
      print_aln_info(d.out, aln, &d);
  }

  if (!d.a.quiet) putc('\n', stderr);

  SORT(alns, d.a.runs, aln_cmp);
  if (!d.a.profile)
    print_alns(d.out, alns, &d);

  xfclose(d.out);			// close text output file

  // Create the HTML output and MEME format output
  char *glam2html, *glam2psfm, *command;
  int command_length, command_ret;
  // create the paths to the programs
  glam2html = make_path_to_file(get_meme_bin_dir(), "glam2html");
  glam2psfm = make_path_to_file(get_meme_bin_dir(), "glam2psfm");
  // allocate memory for the command
  command_length = strlen(glam2html) + strlen(d.txt_filename) + strlen(d.html_filename) + 50;
  command = xmalloc(command_length);
  // run glam2html
  sprintf(command, "%s < %s > %s",  glam2html, d.txt_filename, d.html_filename);
  if ((command_ret = system(command)) != 0) {
    report_external_failure("glam2html", command_ret);
    fprintf(stderr, "Warning: failed to convert output to HTML!\n");
  }
  // run glam2psfm
  sprintf(command, "%s < %s > %s", glam2psfm, d.txt_filename, d.psfm_filename);
  if ((command_ret = system(command)) != 0) {
    report_external_failure("glam2psfm", command_ret);
    fprintf(stderr, "Warning: failed to convert output to MEME format motif!\n");
  }
  free(command);
  free(glam2psfm);
  free(glam2html);

  return 0;
}
Exemple #2
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;
}