void altSummary(char *db, char *agxFileName, char *summaryOutName, char *htmlOutName, char *htmlFramesOutName) /* Look through a bunch of splice sites and output some statistics and links. */ { struct altGraphX *agList = NULL, *ag = NULL; struct altSpliceSite *aSpliceList = NULL, *aSplice=NULL; char *RDataName = optionVal("RData", NULL); char *bedName = optionVal("bedName", NULL); FILE *htmlOut = NULL; FILE *htmlFramesOut = NULL; FILE *summaryOut = NULL; int altSpliceSites = 0, altSpliceLoci = 0, totalSpliceSites = 0; warn("Loading splicing graphs."); agList = altGraphXLoadAll(agxFileName); htmlFramesOut = mustOpen(htmlFramesOutName, "w"); htmlOut = mustOpen(htmlOutName, "w"); summaryOut = mustOpen(summaryOutName, "w"); if(RDataName != NULL) { char buff[256]; safef(buff, sizeof(buff), "%s.control", RDataName); RDataCont = mustOpen(buff, "w"); outputRHeader(RDataCont); safef(buff, sizeof(buff), "%s.alt", RDataName); RData = mustOpen(buff, "w"); outputRHeader(RData); } if(bedName != NULL) { openBedFiles(bedName); } writeOutFrames(htmlFramesOut, htmlOutName, db); carefulClose(&htmlFramesOut); warn("Examining splicing graphs."); fprintf(htmlOut, "<html>\n<body bgcolor=\"#FFF9D2\"><b>Alt-Splice List</b>\n" "<table border=1><tr><th>Name (count)</th><th>Type</th><th>Size</th></tr>\n"); for(ag=agList; ag != NULL; ag=ag->next) { lookForAltSplicing(db, ag, &aSpliceList, &altSpliceSites, &altSpliceLoci, &totalSpliceSites); for(aSplice=aSpliceList; aSplice != NULL; aSplice= aSplice->next) { altSpliceSiteOutput(aSplice, summaryOut, '\t', '\n'); htmlLinkOut(db, aSplice, htmlOut); if(bedViewOutFile != NULL) bedViewOut(aSplice, bedViewOutFile); } altSpliceSiteFreeList(&aSpliceList); } warn("\nDone."); fprintf(htmlOut,"</body></html>\n"); warn("%d altSpliced sites in %d alt-spliced loci out of %d total loci.", altSpliceSites, altSpliceLoci, slCount(agList)); printSpliceTypeInfo(altSpliceLoci); altGraphXFreeList(&agList); if(RData != NULL) { carefulClose(&RData); carefulClose(&RDataCont); } carefulClose(&htmlOut); carefulClose(&summaryOut); }
void pickIntrons() /** Top level routine, actually picks the introns. */ { char *htmlFileName=NULL, *htmlFrameFileName=NULL; char *bedFileName=NULL, *orthoBedFileName=NULL; FILE *htmlOut=NULL, *htmlFrameOut=NULL; FILE *bedOut=NULL, *orthoBedOut=NULL; char *orthoEvalFile = NULL; char *db = NULL; struct orthoEval *ev=NULL, *evList = NULL; struct intronEv *iv=NULL, *ivList = NULL; int maxPicks = optionInt("numPicks", 100); int i=0; boolean isRefSeq=FALSE, isMgcBad=FALSE; struct hash *posHash = newHash(12), *agxHash = newHash(12); struct bed *bed = NULL; char buff[256]; htmlFileName = optionVal("htmlFile", NULL); htmlFrameFileName = optionVal("htmlFrameFile", "frame.html"); orthoEvalFile = optionVal("orthoEvalFile", NULL); db = optionVal("db", NULL); bedFileName = optionVal("bedOutFile", NULL); orthoBedFileName = optionVal("orthoBedOut", NULL); if(htmlFileName == NULL || orthoEvalFile == NULL || db == NULL || bedFileName == NULL || orthoBedFileName == NULL ) errAbort("Missing parameters. Use -help for usage."); warn("Loading orthoEvals."); evList = orthoEvalLoadAll(orthoEvalFile); warn("Creating intron records"); for(ev = evList; ev != NULL; ev = ev->next) { for(i=0; i<ev->numIntrons; i++) { occassionalDot(); iv = intronIvForEv(ev, i); slAddHead(&ivList, iv); } } warn("\nDone"); warn("Sorting"); slSort(&ivList, intronEvalCmp); warn("Done."); htmlOut = mustOpen(htmlFileName, "w"); bedOut = mustOpen(bedFileName, "w"); htmlFrameOut = mustOpen(htmlFrameFileName, "w"); orthoBedOut = mustOpen(orthoBedFileName, "w"); i=0; fprintf(htmlOut, "<html><body><table border=1><tr><th>Num</th><th>Mouse Acc.</th><th>Score</th><th>TS Pick</th></tr>\n"); warn("Filtering"); safef(buff, sizeof(buff), "tmp"); for(iv = ivList; iv != NULL && maxPicks > 0; iv = iv->next) { if(isUniqueCoordAndAgx(db, iv, posHash, agxHash) && iv->support == 0 && !isOverlappedByRefSeq(db, iv) && ! isOverlappedByEst(db, iv) && ! isOverlappedByMRna(db, iv)) { boolean twinScan = (coordOverlappedByTable(db, iv->chrom, iv->e1S, iv->e1E, "mgcTSExpPcr") && coordOverlappedByTable(db, iv->chrom, iv->e2S, iv->e2E, "mgcTSExpPcr")); bed = bedForIv(iv); if(sameString(buff, "tmp")) safef(buff, sizeof(buff), "%s:%d-%d", bed->chrom, bed->chromStart-50, bed->chromEnd+50); // isMgcBad = isOverlappedByMgcBad(iv); fprintf(htmlOut, "<tr><td>%d</td><td><a target=\"browser\" " "href=\"http://mgc.cse.ucsc.edu/cgi-bin/hgTracks?db=hg15&position=%s:%d-%d\"> " "%s </a></td><td>%d</td><td>%s</td></tr>\n", ++i,bed->chrom, bed->chromStart-50, bed->chromEnd+50, bed->name, bed->score, twinScan ? "yes" : "no"); bedTabOutN(bed, 12, bedOut); bedTabOutN(iv->ev->orthoBed, 12, orthoBedOut); bedFree(&bed); maxPicks--; } } writeOutFrames(htmlFrameOut, htmlFileName, db, bedFileName, buff); fprintf(htmlOut, "</table></body></html>\n"); carefulClose(&bedOut); carefulClose(&htmlOut); carefulClose(&htmlFrameOut); carefulClose(&orthoBedOut); warn("Done."); hashFree(&posHash); hashFree(&agxHash); }