a1dcdda03cad5b931d17066789091a64f8dceca6 max Tue Nov 22 16:05:21 2016 -0800 adding bigDataIndex support to the table browser, refs #18420 diff --git src/hg/hgTables/bam.c src/hg/hgTables/bam.c index 44199fd..44d6322 100644 --- src/hg/hgTables/bam.c +++ src/hg/hgTables/bam.c @@ -162,31 +162,33 @@ fprintf(f, "# Filtering on %d columns\n", slCount(filter->columnList)); } } /* Loop through outputting each region */ struct region *region, *regionList = getRegions(); struct trackDb *tdb = findTdbForTable(db, curTrack, table, ctLookupName); int maxOut = bigFileMaxOutput(); char *cacheDir = cfgOption("cramRef"); char *refUrl = trackDbSetting(tdb, "refUrl"); for (region = regionList; region != NULL && (maxOut > 0); region = region->next) { struct lm *lm = lmInit(0); char *fileName = bamFileName(table, conn, region->chrom); - struct samAlignment *sam, *samList = bamFetchSamAlignmentPlus(fileName, region->chrom, + char *baiUrl = bigDataIndexFromCtOrHub(table, conn); + + struct samAlignment *sam, *samList = bamAndIndexFetchSamAlignmentPlus(fileName, baiUrl, region->chrom, region->start, region->end, lm, refUrl, cacheDir); char *row[SAMALIGNMENT_NUM_COLS]; char numBuf[BAM_NUM_BUF_SIZE]; for (sam = samList; sam != NULL && (maxOut > 0); sam = sam->next) { samAlignmentToRow(sam, numBuf, row); if (asFilterOnRow(filter, row)) { /* if we're looking for identifiers, check if this matches */ if ((idHash != NULL)&&(hashLookup(idHash, row[idFieldNum]) == NULL)) continue; int i; fprintf(f, "%s", row[columnArray[0]]); for (i=1; i<fieldCount; ++i) @@ -303,30 +305,31 @@ if (maxOut <= 0) { errAbort("Reached output limit of %d data values, please make region smaller,\n" "\tor set a higher output line limit with the filter settings.", bigFileMaxOutput()); } } slReverse(&bedList); return bedList; } struct slName *randomBamIds(char *table, struct sqlConnection *conn, int count) /* Return some semi-random qName based IDs from a BAM file. */ { /* Read 10000 items from bam file, or if they ask for a big list, then 4x what they ask for. */ char *fileName = bamFileName(table, conn, NULL); + samfile_t *fh = bamOpen(fileName, NULL); struct lm *lm = lmInit(0); int orderedCount = count * 4; if (orderedCount < 10000) orderedCount = 10000; bam_hdr_t *header = sam_hdr_read(fh); if (fh->format.format == cram) { char *cacheDir = cfgOption("cramRef"); struct trackDb *tdb = findTdbForTable(database, curTrack, table, ctLookupName); char *refUrl = trackDbSetting(tdb, "refUrl"); cram_set_cache_url(fh, cacheDir, refUrl); } struct samAlignment *sam, *samList = bamReadNextSamAlignments(fh, header, orderedCount, lm);