struct xaAli *getOneXaAli(char *organism, char *xaName) /* Return a single named xaAli for organism. */ { char ixFileName[512]; char dataFileName[512]; char *xDir; struct snof *snof; long offset; FILE *f; struct xaAli *xa; xDir = wormXenoDir(); sprintf(ixFileName, "%s%s/all", xDir, organism); sprintf(dataFileName, "%s%s/all%s", xDir, organism, xaAlignSuffix()); snof = snofMustOpen(ixFileName); if (!snofFindOffset(snof, xaName, &offset)) errAbort("Couldn't find %s", xaName); snofClose(&snof); f = xaOpenVerify(dataFileName); fseek(f, offset, SEEK_SET); xa = xaReadNext(f, FALSE); fclose(f); return xa; }
int main(int argc, char *argv[]) { char *outName; char xaFileName[512]; char region[64]; FILE *xaFile, *out; struct xaAli *xaList = NULL, *xa; char *sortBy; char *subtitle; int (*cmp)(const void *va, const void *vb); if (argc != 3) { usage(); } sortBy = argv[1]; outName = argv[2]; if (sameWord(sortBy, "score")) { cmp = cmpXaScore; subtitle = "(sorted by alignment score)"; } else if (sameWord(sortBy, "briggsae")) { cmp = cmpXaQuery; subtitle = "(sorted by <I>C. briggsae</I> region)"; } else if (sameWord(sortBy, "elegans")) { cmp = cmpXaTarget; subtitle = "(sorted by <I>C. elegans</I> region)"; } else usage(); /* Read in alignment file. */ sprintf(xaFileName, "%s%s/all%s", wormXenoDir(), "cbriggsae", xaAlignSuffix()); printf("Scanning %s\n", xaFileName); xaFile = xaOpenVerify(xaFileName); while ((xa = xaReadNext(xaFile, FALSE)) != NULL) { xa->milliScore = round(0.001 * xa->milliScore * (xa->tEnd - xa->tStart)); freeMem(xa->qSym); freeMem(xa->tSym); freeMem(xa->hSym); slAddHead(&xaList, xa); } /* Sort by score. */ printf("Sorting..."); slSort(&xaList, cmp); printf(" best score %d\n", xaList->milliScore); /* Write out .html */ printf("Writing %s\n", outName); out = mustOpen(outName, "w"); htmStart(out, "C. briggsae/C. elegans Homologies"); fprintf(out, "<H2>Regions with Sequenced <I>C. briggsae</I> Homologs</H2>\n"); fprintf(out, "<H3>%s</H3>\n", subtitle); fprintf(out, "<TT><PRE><B>"); fprintf(out, "Score <I>C. elegans Region</I> <I>C. briggsae</I> Region </B>\n"); fprintf(out, "--------------------------------------------------------\n"); for (xa = xaList; xa != NULL; xa = xa->next) { fprintf(out, "%6d ", xa->milliScore); sprintf(region, "%s:%d-%d", xa->target, xa->tStart, xa->tEnd); fprintf(out, "<A HREF=\"../cgi-bin/tracks.exe?where=%s\">%21s</A> %s:%d-%d %c", region, region, xa->query, xa->qStart, xa->qEnd, xa->qStrand); fprintf(out, "\n"); } htmEnd(out); return 0; }