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; }
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; }