3d865319000102f6164e546ddd9c959f67c664ce braney Wed Mar 30 13:09:30 2022 -0700 add chromAlias support to bam support diff --git src/hg/hgTracks/bamTrack.c src/hg/hgTracks/bamTrack.c index 8827217..bcf349e 100644 --- src/hg/hgTracks/bamTrack.c +++ src/hg/hgTracks/bamTrack.c @@ -10,30 +10,31 @@ #include "hash.h" #include "linefile.h" #include "htmshell.h" #include "hui.h" #include "jksql.h" #include "hdb.h" #include "hgTracks.h" #include "cds.h" #include "hgBam.h" #include "wigCommon.h" #include "knetUdc.h" #include "udc.h" #include "bigWarn.h" #include "errCatch.h" #include "hgConfig.h" +#include "chromAlias.h" struct bamTrackData { struct track *tg; struct hash *pairHash; int minAliQual; char *colorMode; char *grayMode; char *userTag; int aliQualShadeMin; int aliQualShadeMax; int baseQualShadeMin; int baseQualShadeMax; }; @@ -501,52 +502,62 @@ errAbort("bamLoadItemsCore: can't find bigDataUrl for custom track %s", tg->track); } else { struct sqlConnection *conn = hAllocConnTrack(database, tg->tdb); fileName = bamFileNameFromTable(conn, tg->table, chromName); hFreeConn(&conn); } } char *fileName2 = hReplaceGbdb(fileName); char *baiFileOrUrl = hReplaceGbdb(trackDbSetting(tg->tdb, "bigDataIndex")); char posForBam[512]; - safef(posForBam, sizeof(posForBam), "%s:%d-%d", chromName, winStart, winEnd); char *cacheDir = cfgOption("cramRef"); char *refUrl = trackDbSetting(tg->tdb, "refUrl"); + + struct slName *aliasList = chromAliasFindAliases(chromName); + struct slName *nativeName = newSlName(chromName); + slAddHead(&aliasList, nativeName); + for (; aliasList; aliasList = aliasList->next) + { + safef(posForBam, sizeof(posForBam), "%s:%d-%d", aliasList->name, winStart, winEnd); if (!isPaired) bamAndIndexFetchPlus(fileName2, baiFileOrUrl, posForBam, addBam, &btd, NULL, refUrl, cacheDir); else { char *setting = trackDbSettingClosestToHomeOrDefault(tg->tdb, "pairSearchRange", "20000"); int pairSearchRange = atoi(setting); if (pairSearchRange > 0) - safef(posForBam, sizeof(posForBam), "%s:%d-%d", chromName, + safef(posForBam, sizeof(posForBam), "%s:%d-%d", aliasList->name, max(0, winStart-pairSearchRange), winEnd+pairSearchRange); bamAndIndexFetchPlus(fileName2, baiFileOrUrl, posForBam, addBamPaired, &btd, NULL, refUrl, cacheDir); struct hashEl *hel; struct hashCookie cookie = hashFirst(btd.pairHash); while ((hel = hashNext(&cookie)) != NULL) { struct linkedFeatures *lf = hel->val; if (lf->start < winEnd && lf->end > winStart) slAddHead(&(tg->items), lfsFromLf(lf)); } } + + if (tg->items != NULL) + break; + } freez(&fileName2); if (tg->visibility != tvDense) { slReverse(&(tg->items)); if (isPaired) slSort(&(tg->items), linkedFeaturesSeriesCmp); else if (sameString(colorMode, BAM_COLOR_MODE_STRAND)) slSort(&(tg->items), linkedFeaturesCmpOri); else if (sameString(colorMode, BAM_COLOR_MODE_GRAY) && sameString(grayMode, BAM_GRAY_MODE_ALI_QUAL)) slSort(&(tg->items), linkedFeaturesCmpScore); else slSort(&(tg->items), linkedFeaturesCmpStart); if (slCount(tg->items) > MAX_ITEMS_FOR_MAPBOX)