void mapAltGraphXFile(struct sqlConnection *conn, char *db, char *orthoDb, char *chrom, char *netTable, char *altGraphXFileName, char *altGraphXTableName, FILE *agxOut, FILE *selectedOut, int *foundCount, int *notFoundCount) /* Map over altGraphX Structures from one organism to another. Basically create a mapping for the vertices and then reverse them if on '-' strand.*/ { int count =0; struct bed *bed = NULL; struct altGraphX *agList = NULL, *ag = NULL, *agNew = NULL; if(altGraphXFileName != NULL) { warn("Loading altGraphX Records from file %s.", altGraphXFileName); agList = altGraphXLoadAll(altGraphXFileName); } else if(altGraphXTableName != NULL) { char query[256]; warn("Reading altGraphX Records from table %s.", altGraphXTableName); sqlSafef(query, sizeof(query), "select * from %s where tName like '%s'", altGraphXTableName, chrom); agList = altGraphXLoadByQuery(conn, query); } else errAbort("orthoMap::mapAlGraphXFile() - Need a table name or file name to load altGraphX records"); warn("Mapping altGraphX records."); for(ag = agList; ag != NULL; ag = ag->next) { if(differentString(ag->tName, chrom)) continue; occassionalDot(); agNew = mapAltGraphX(ag, conn, db, netTable); if(agNew == NULL) (*notFoundCount)++; else { (*foundCount)++; altGraphXTabOut(agNew, agxOut); altGraphXFree(&agNew); if (selectedOut != NULL) altGraphXTabOut(ag, selectedOut); } count++; } }
int main(int argc, char *argv[]) { struct altGraphX *agList = NULL; int cassetteCount = 0; float minConfidence = 0; char *bedFileName = NULL; char *faFile = NULL; FILE *faOut = NULL; FILE *bedOut = NULL; boolean mrnaFilter = FALSE; float estPrior = 0.0; int minSize = 0; if(argc < 4) usage(); cgiSpoof(&argc, argv); warn("Loading graphs."); agList = altGraphXLoadAll(argv[1]); bedFileName = cgiOptionalString("bedFile"); minConfidence = cgiDouble("minConf"); db = cgiString("db"); faFile = cgiOptionalString("faFile"); estPrior = cgiOptionalDouble("estPrior", 10); minSize = cgiOptionalInt("minSize", 0); mrnaFilter = cgiBoolean("mrnaFilter"); if(mrnaFilter) loadMrnaHash(); warn("Counting cassette exons from %d clusters above confidence: %f", slCount(agList), minConfidence); if(bedFileName != NULL) { bedOut = mustOpen(bedFileName, "w"); printCommandState(argc, argv, bedOut); fprintf(bedOut, "track name=cass_conf-%4.2f_est-%3.2f description=\"spliceStats minConf=%4.2f estPrior=%3.2f minSize=%d\"\n", minConfidence, estPrior, minConfidence, estPrior, minSize); } if(faFile != NULL) faOut = mustOpen(faFile, "w"); cassetteCount = countCassetteExons(agList, minConfidence, faOut,bedOut ); carefulClose(&faOut); carefulClose(&bedOut); warn("%d cassette exons out of %d clusters in %s", cassetteCount, slCount(agList), argv[1]); altGraphXFreeList(&agList); return 0; }
void agxStartsEnds(char *agxFile, char *softBedFile, char *hardBedFile) /* Loop through each graph and output the exons with soft starts or ends. */ { FILE *softOut = mustOpen(softBedFile, "w"); FILE *hardOut = mustOpen(hardBedFile, "w"); struct altGraphX *agxList = NULL, *agx = NULL; int i; int softFoundCount = 0; int hardFoundCount = 0; int totalCount = 0; warn("Loading splice graphs"); agxList = altGraphXLoadAll(agxFile); warn("Looking for transcription starts and ends."); for(agx = agxList; agx != NULL; agx = agx->next) { int *vPos = agx->vPositions; int *starts = agx->edgeStarts; int *ends = agx->edgeEnds; for(i = 0; i < agx->edgeCount; i++) { if(isSoftExon(agx, i)) { fprintf(softOut, "%s\t%d\t%d\t%s.%d\t0\t%s\n", agx->tName, vPos[starts[i]], vPos[ends[i]], agx->name, totalCount++, agx->strand); softFoundCount++; } else if(getSpliceEdgeType(agx,i) == ggExon) { fprintf(hardOut, "%s\t%d\t%d\t%s.%d\t0\t%s\n", agx->tName, vPos[starts[i]], vPos[ends[i]], agx->name, totalCount++, agx->strand); hardFoundCount++; } } } warn("Found %d exons that start or end a transcript in %d total graphs. %.2f per graph", softFoundCount, slCount(agxList), (double)softFoundCount/slCount(agxList)); warn("Found %d internal exon in %d total graphs. %.2f per graph", hardFoundCount, slCount(agxList), (double)hardFoundCount/slCount(agxList)); altGraphXFreeList(&agxList); carefulClose(&softOut); carefulClose(&hardOut); }
void createIntronBeds(char *agxFile, char *bedFile) /* Make intron beds for evaluation. */ { struct altGraphX *ag=NULL, *agList = NULL; struct bed *bed=NULL, *bedList=NULL; FILE *bedOut = NULL; int count; warn("Rading AltGraphX list."); agList = altGraphXLoadAll(agxFile); warn("Converting to intron beds."); bedOut = mustOpen(bedFile, "w"); for(ag = agList; ag != NULL; ag = ag->next) { occassionalDot(); bedList = bedIntronsFromAgx(ag); for(bed=bedList; bed != NULL; bed=bed->next) { bedTabOutN(bed, 12, bedOut); } bedFreeList(&bedList); } altGraphXFreeList(&agList); }
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); }