3d865319000102f6164e546ddd9c959f67c664ce braney Wed Mar 30 13:09:30 2022 -0700 add chromAlias support to bam support diff --git src/hg/hgTables/bam.c src/hg/hgTables/bam.c index 02a262a..8a42df6 100644 --- src/hg/hgTables/bam.c +++ src/hg/hgTables/bam.c @@ -16,30 +16,31 @@ #include "hdb.h" #include "trackDb.h" #include "obscure.h" #include "hmmstats.h" #include "correlate.h" #include "asParse.h" #include "bbiFile.h" #include "bigBed.h" #include "hubConnect.h" #include "trackHub.h" #include "hgTables.h" #include "asFilter.h" #include "xmlEscape.h" #include "hgBam.h" #include "hgConfig.h" +#include "chromAlias.h" boolean isBamTable(char *table) /* Return TRUE if table corresponds to a BAM file. */ { if (isHubTrack(table)) { struct trackDb *tdb = hashFindVal(fullTableToTdbHash, table); return startsWithWord("bam", tdb->type); } else return trackIsType(database, table, curTrack, "bam", ctLookupName); } char *bamFileName(char *table, struct sqlConnection *conn, char *seqName) /* Return file name associated with BAM. This handles differences whether it's @@ -172,32 +173,44 @@ } /* 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); char *baiUrl = bigDataIndexFromCtOrHub(table, conn); - struct samAlignment *sam, *samList = bamAndIndexFetchSamAlignmentPlus(fileName, baiUrl, region->chrom, + struct samAlignment *sam, *samList = NULL; + + struct slName *aliasList = chromAliasFindAliases(region->chrom); + struct slName *nativeName = newSlName(region->chrom); + slAddHead(&aliasList, nativeName); + + for (; aliasList; aliasList = aliasList->next) + { + samList = bamAndIndexFetchSamAlignmentPlus(fileName, baiUrl, aliasList->name, region->start, region->end, lm, refUrl, cacheDir); + if (samList) + break; + } + 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; if (outSep == ',') fputc('"', f); fprintf(f, "%s", row[columnArray[0]]); if (outSep == ',') fputc('"', f);