void maskFeatures(char *database, struct sqlConnection *conn, char *chrom, int chromSize, Bits *maskBits) /* Mask out bits we're not interested in for conservation. */ { fbOrTableBits(database, maskBits, "gap", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "refGene:exon:12", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "mrna:exon:12", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "ensGene:exon:12", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "softberryGene:exon:12", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "twinscan:exon:12", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "xenoMrna:exon:12", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "intronEst:exon:12", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "anyMrnaCov", chrom, chromSize, conn); fbOrTableBits(database, maskBits, "rmsk", chrom, chromSize, conn); printf("%s: %d bits masked\n", chrom, bitCountRange(maskBits, 0, chromSize)); }
void explainSome(char *database, Bits *h**o, Bits *once, Bits *bits, char *chrom, int chromSize, struct sqlConnection *conn, char *trackSpec, char *homologyTrack) /* Explain some of homology. */ { int trackSize = 0, homoSize = 0, andSize = 0, cumSize = 0, newSize = 0; homoSize = bitCountRange(h**o, 0, chromSize); bitClear(bits, chromSize); if (trackSpec != NULL) { fbOrTableBits(database, bits, trackSpec, chrom, chromSize, conn); trackSize = bitCountRange(bits, 0, chromSize); bitAnd(bits, h**o, chromSize); andSize = bitCountRange(bits, 0, chromSize); bitAnd(bits, once, chromSize); newSize = bitCountRange(bits, 0, chromSize); bitNot(bits, chromSize); bitAnd(once, bits, chromSize); cumSize = homoSize - bitCountRange(once, 0, chromSize); } else { trackSpec = homologyTrack; trackSize = andSize = homoSize; cumSize = newSize = 0; } printf("%-21s %8d %8d %5.2f%% %6.2f%% %6.2f%% %5.2f%% %5.2f%%\n", trackSpec, trackSize, andSize, 100.0*trackSize/chromSize, 100.0*andSize/trackSize, 100.0*andSize/homoSize, 100.0*newSize/homoSize, 100.0*cumSize/homoSize); }
void whyConserved(char *database, char *chrom, char *homologyTrack) /* whyConserved - Try and analyse why a particular thing is conserved. */ { struct sqlConnection *conn; int chromSize; Bits *h**o = NULL; Bits *bits = NULL; Bits *once = NULL; hSetDb(database); conn = hAllocConn(); chromSize = hChromSize(chrom); h**o = bitAlloc(chromSize); bits = bitAlloc(chromSize); once = bitAlloc(chromSize); /* Get homology bitmap and set once mask to be the same. */ fbOrTableBits(h**o, homologyTrack, chrom, chromSize, conn); bitOr(once, h**o, chromSize); /* printHeader */ printf("%-21s %8s %8s %5s %6s %6s %5s %5s \n", "Track Specification", "track", "overlap", "track", "mus", "track", "new", "cum"); printf("%-21s %8s %8s %5s %6s %6s %5s %5s \n", "", "size", "size", "geno", "track", "mus", "mus", "mus"); printf("-----------------------------------------------------------------------------\n"); /* Whittle awway at homology... */ explainSome(h**o, once, bits, chrom, chromSize, conn, NULL, homologyTrack); explainSome(h**o, once, bits, chrom, chromSize, conn, "simpleRepeat", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "rmsk", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "sanger22:CDS:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "refGene:CDS:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "sanger22:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "refGene:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "ensGene:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "rnaGene", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "mrna:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "intronEst:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "xenoMrna:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "xenoEst:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "genscan:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "genscanSubopt", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "psu:exon:10", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "sanger22:upstream:200", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "refGene:upstream:200", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "mrna:upstream:200", NULL); explainSome(h**o, once, bits, chrom, chromSize, conn, "est", NULL); hFreeConn(&conn); }
void statsOnSpan(char *database, struct sqlConnection *conn, struct region *r, char *axtBestDir, struct stats *stats, FILE *f, struct scoredWindow **pWinList) /* Gather region info on one chromosome/region. */ { char *chrom = r->chrom; int chromSize = hChromSize(database, chrom); Bits *maskBits = bitAlloc(chromSize); Bits *aliBits = bitAlloc(chromSize); Bits *matchBits = bitAlloc(chromSize); Bits *geneBits = bitAlloc(chromSize); /* Set up aliBits and matchBits for to be turned on * where bases align, and where bases align and match. * Zero both bitmaps in areas that are transcribed. */ setAliBits(axtBestDir, chrom, chromSize, aliBits, matchBits); maskFeatures(database, conn, chrom, chromSize, maskBits); bitNot(maskBits, chromSize); bitAnd(aliBits, maskBits, chromSize); bitAnd(matchBits, maskBits, chromSize); /* Set up maskBits to have 0's on gaps in genome */ bitClear(maskBits, chromSize); fbOrTableBits(database, maskBits, "gap", chrom, chromSize, conn); bitNot(maskBits, chromSize); /* Set up bitmap for Ensemble or mRNA. */ fbOrTableBits(database, geneBits, "ensGene", chrom, chromSize, conn); fbOrTableBits(database, geneBits, "mrna", chrom, chromSize, conn); /* Calculate various stats on windows. */ addToStats(stats, aliBits, matchBits, geneBits, maskBits, r, f, pWinList); /* Cleanup */ bitFree(&geneBits); bitFree(&maskBits); bitFree(&aliBits); bitFree(&matchBits); }
void trackOverlap(char *database, char *chrom, char *homologyTrack, char *specFile) /* trackOverlap - Correlate a track with a series of tracks specified in specFile. */ { struct lineFile *lf = NULL; char *line = NULL; struct sqlConnection *conn; int chromSize; Bits *h**o = NULL; Bits *bits = NULL; Bits *once = NULL; lf = lineFileOpen(specFile, TRUE); conn = hAllocConn(database); chromSize = hChromSize(database, chrom); h**o = bitAlloc(chromSize); bits = bitAlloc(chromSize); once = bitAlloc(chromSize); /* Get homology bitmap and set once mask to be the same. */ fbOrTableBits(database, h**o, homologyTrack, chrom, chromSize, conn); bitOr(once, h**o, chromSize); /* printHeader */ printf("%-21s %8s %8s %5s %6s %6s %5s %5s \n", "Track Specification", "track", "overlap", "track", "cov", "track", "new", "cum"); printf("%-21s %8s %8s %5s %6s %6s %5s %5s \n", "", "size", "size", "geno", "track", "cov", "cov", "cov"); printf("-----------------------------------------------------------------------------\n"); /* Whittle awway at homology... */ explainSome(database, h**o, once, bits, chrom, chromSize, conn, NULL, homologyTrack); while(lineFileNextReal(lf, &line)) { explainSome(database, h**o, once, bits, chrom, chromSize, conn, line, NULL); } lineFileClose(&lf); hFreeConn(&conn); }