4a8ae7aa07f62b9b598b16648f260496b34d7005 galt Fri Dec 18 20:12:14 2015 -0800 Handle when the emGeneTable has poor coverage for a chromosome, leaving regionList empty. Gives the user a warning and returns to default view. diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 6ca5c8f..8913633 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -4181,30 +4181,35 @@ knownToTag = "knownToTag"; } } } if (sameString(emGeneTable, "refGene")) { char varName[SMALLBUF]; safef(varName, sizeof(varName), "%s.hideNoncoding", emGeneTable); showNoncoding = !cartUsualBoolean(cart, varName, FALSE); //DISGUISE makes obsolete dySaveCartSetting(dy, varName); } initVirtRegionsFromEMGeneTableExons(showNoncoding, knownCanonical, knownToTag, geneMostly); //warn("slCount(virtRegionList)=%d", slCount(virtRegionList)); // DEBUG REMOVE + if (!virtRegionList) + { + warn("No genes found on chrom %s for track %s, returning to default view", chromName, emGeneTrack->shortLabel); + return FALSE; // regionList is empty, nothing found. + } if (geneMostly) virtModeShortDescr = "genes"; else virtModeShortDescr = "exons"; // DISGUISE makes obsolete dyStringPrintf(dy," %s %s", dy->string, knownCanonical, knownToTag); } else if (sameString(virtModeType, "kcGenes")) // TODO obsolete { //warn("demo KnownCanonical gene regions genome-wide."); // DEBUG REMOVE initVirtRegionsFromKnownCanonicalGenes("knownCanonical"); virtModeShortDescr = "genes"; } else if (sameString(virtModeType, "customUrl")) { //warn("custom regions from BED URL."); // DEBUG REMOVE @@ -4296,30 +4301,33 @@ { //warn("demo SOD1\n" //"Shows zoomed in exon-exon junction from SOD1 gene, between exon1 and exon2."); // DEBUG REMOVE initVirtRegionsFromSOD1Hardwired(); } else { //warn("unrecognized virtModeType = %s", virtModeType); return FALSE; // return to default mode } virtModeExtraState = dyStringCannibalize(&dy); +if (!virtRegionList) + return FALSE; // regionList is empty, nothing found. + return TRUE; } boolean isLimitedVisHiddenForAllWindows(struct track *track) /* Check if track limitedVis == hidden for all windows. * Return true if all are hidden */ { boolean result = TRUE; for(;track;track=track->nextWindow) if (track->limitedVis != tvHide) result = FALSE; return result; }