5194786c88bd4ab5e802eec79089897461389fe9 hiram Fri Mar 22 14:52:22 2019 -0700 getting a little bit better refs #18869 diff --git src/hg/hubApi/hubApi.c src/hg/hubApi/hubApi.c index 410a905..76c7c93 100644 --- src/hg/hubApi/hubApi.c +++ src/hg/hubApi/hubApi.c @@ -6,33 +6,34 @@ | Field | Type | Null | Key | Default | Extra | +------------------+------------------+------+-----+---------+-------+ | hubUrl | longblob | NO | PRI | NULL | | | shortLabel | varchar(255) | NO | | NULL | | | longLabel | varchar(255) | NO | | NULL | | | registrationTime | varchar(255) | NO | | NULL | | | dbCount | int(10) unsigned | NO | | NULL | | | dbList | blob | YES | | NULL | | | descriptionUrl | longblob | YES | | NULL | | +------------------+------------------+------+-----+---------+-------+ */ /* Global Variables for all modules */ int maxItemsOutput = 1000; /* can be set in URL maxItemsOutput=N */ +static int maxItemLimit = 1000000; /* maximum of 1,000,000 items returned */ /* Global only to this one source file */ -static boolean debug = FALSE; /* can be set in URL debug=1 */ +static boolean debug = TRUE; /* can be set in URL debug=1 */ static struct cart *cart; /* CGI and other variables */ static struct hash *oldVars = NULL; static struct hash *trackCounter = NULL; static long totalTracks = 0; static boolean measureTiming = FALSE; /* set by CGI parameters */ static boolean allTrackSettings = FALSE; /* checkbox setting */ static char **shortLabels = NULL; /* public hub short labels in array */ // struct hubPublic *publicHubList = NULL; static int publicHubCount = 0; static char *defaultHub = "Plants"; static char *defaultDb = "ce11"; static long enteredMainTime = 0; /* will become = clock1000() on entry */ /* to allow calculation of when to bail out, taking too long */ static long timeOutSeconds = 100; static boolean timedOut = FALSE; @@ -192,31 +193,31 @@ hashIncInt(countTracks, "superTrack child"); hashIncInt(countTracks, stripType); hashIncInt(countTracks, "track count"); } else if (isEmpty(tdb->type)) hashIncInt(countTracks, "no type specified"); else { hashIncInt(countTracks, stripType); hashIncInt(countTracks, "track count"); } freeMem(stripType); // showCounts(countTracks); } -static void sampleUrl(struct trackHub *hub, char *db, struct trackDb *tdb, char *chrom, long long chromSize, char *errorString) +static void sampleUrl(struct trackHub *hub, char *db, struct trackDb *tdb, char *chrom, unsigned chromSize, char *errorString) /* print out a sample getData URL */ { char errorPrint[2048]; errorPrint[0] = 0; if (isNotEmpty(errorString)) { safef(errorPrint, sizeof(errorPrint), " ERROR: %s", errorString); } unsigned start = chromSize / 4; unsigned end = start + 10000; if (end > chromSize) end = chromSize; char *genome = NULL; @@ -239,92 +240,84 @@ else hPrintf("
  • %s : %s (sample getData)%s
  • \n", tdb->track, tdb->type, urlPrefix, db, chrom, tdb->track, start, end, errorPrint); } } else if (hub) { if (tdb->parent) hPrintf("
  • %s : %s subtrack of parent: %s (sample getData)%s
  • \n", tdb->track, tdb->type, tdb->parent->track, urlPrefix, hub->url, genome, chrom, tdb->track, start, end, errorPrint); else hPrintf("
  • %s : %s (sample getData)%s
  • \n", tdb->track, tdb->type, urlPrefix, hub->url, genome, chrom, tdb->track, start, end, errorPrint); } else hPrintf("
  • %s : %s not db hub track ?
  • \n", tdb->track, tdb->type); } -static void showSubTracks(struct trackHub *hub, char *db, struct trackDb *tdb, struct hash *countTracks, - char *chromName, long long chromSize, char *errorString) -/* tdb has subtracks, show only subTracks, no details */ -{ -hPrintf("
  • \n"); + safef(countsMessage, sizeof(countsMessage), " : %ld chroms : %ld count ", chromCount, itemCount); } -static void trackSettings(struct trackDb *tdb, struct hash *countTracks) -/* process the settingsHash for a trackDb, recursive when subtracks */ -{ -hPrintf("
  • \n"); + if (startsWithWord("bigBed", tdb->type)) + hPrintf("
  • %s : %s%s
  • \n", tdb->track, tdb->type, countsMessage); + else if (startsWithWord("bigWig", tdb->type)) + hPrintf("
  • %s : %s%s
  • \n", tdb->track, tdb->type, countsMessage); + else + hPrintf("
  • %s : %s%s
  • \n", tdb->track, tdb->type, countsMessage); } +} /* static void hubSampleUrl(struct trackHub *hub, struct trackDb *tdb, + * long chromCount, long itemCount, char *chromName, unsigned chromSize, + * char *genome) + */ static void bbiBiggestChrom(struct bbiChromInfo *chromList, char **chromName, unsigned *chromSize) /* find largest chromosome name and size in the chromList */ { if (chromName && chromSize) { *chromSize = 0; char *returnName = NULL; struct bbiChromInfo *el; for (el = chromList; el; el = el->next) { if (el->size > *chromSize) { *chromSize = el->size; @@ -425,149 +418,222 @@ retVal = 1; } } errCatchEnd(errCatch); if (errCatch->gotError) { retVal = 1; dyStringPrintf(errors, "%s", errCatch->message->string); } errCatchFree(&errCatch); return retVal; } /* static int bbiBriefMeasure() */ -static void hubSampleUrl(struct trackHub *hub, struct trackDb *tdb, - long chromCount, long itemCount, char *chromName, unsigned chromSize, - char *genome, char *errorString) +static void hubSubTracks(struct trackHub *hub, char *db, struct trackDb *tdb, + struct hash *countTracks, long chromCount, long itemCount, + char *chromName, unsigned chromSize, char *genome, char *errorString) +/* tdb has subtracks, show only subTracks, no details */ { -unsigned start = chromSize / 4; -unsigned end = start + 10000; -if (end > chromSize) - end = chromSize; - -char errorPrint[2048]; -errorPrint[0] = 0; - -if (isNotEmpty(errorString)) +hPrintf("
  • \n"); +} /* hubSubTracks() */ + +static void showSubTracks(struct trackHub *hub, char *db, struct trackDb *tdb, struct hash *countTracks, + char *chromName, unsigned chromSize, char *errorString) +/* tdb has subtracks, show only subTracks, no details */ +{ +hPrintf("
  • \n"); +} + +static void trackSettings(struct trackDb *tdb, struct hash *countTracks) +/* process the settingsHash for a trackDb, recursive when subtracks */ +{ +hPrintf("
  • \n"); } -} /* static void hubSampleUrl(struct trackHub *hub, struct trackDb *tdb, - * long chromCount, long itemCount, char *chromName, unsigned chromSize, - * char *genome) - */ static void hubCountOneTdb(struct trackHub *hub, char *db, struct trackDb *tdb, char *bigDataIndex, struct hash *countTracks, char *chromName, unsigned chromSize, char *genome) { char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl"); // char *compositeTrack = trackDbSetting(tdb, "compositeTrack"); boolean compositeContainer = tdbIsComposite(tdb); boolean compositeView = tdbIsCompositeView(tdb); // char *superTrack = trackDbSetting(tdb, "superTrack"); boolean superChild = tdbIsSuperTrackChild(tdb); boolean depthSearch = cartUsualBoolean(cart, "depthSearch", FALSE); hashCountTrack(tdb, countTracks); -char *longName = NULL; -unsigned longSize = 0; long chromCount = 0; long itemCount = 0; struct dyString *errors = newDyString(1024); +/* if given a chromSize, it belongs to a UCSC db and this is *not* an + * assembly hub, otherwise, look up a chrom and size in the bbi file + */ if (! (compositeContainer || compositeView) ) + { + if (chromSize < 1 || depthSearch) + { + char *longName = NULL; + unsigned longSize = 0; (void) bbiBriefMeasure(tdb->type, bigDataUrl, bigDataIndex, &chromCount, &itemCount, errors, &longName, &longSize); + chromSize = longSize; + chromName = longName; + } + } if (depthSearch && bigDataUrl) { if (isSupportedType(tdb->type)) - { - if (chromSize > 0) hubSampleUrl(hub, tdb, chromCount, itemCount, chromName, chromSize, genome, errors->string); - else - hubSampleUrl(hub, tdb, chromCount, itemCount, longName, longSize, genome, errors->string); - } } else { if (compositeContainer) hPrintf("
  • %s : %s : composite track container has %d subtracks
  • \n", tdb->track, tdb->type, slCount(tdb->subtracks)); else if (compositeView) hPrintf("
  • %s : %s : composite view of parent: %s
  • \n", tdb->track, tdb->type, tdb->parent->track); else if (superChild) hPrintf("
  • %s : %s : superTrack child of parent: %s (sample getData)
  • \n", tdb->track, tdb->type, tdb->parent->track); else if (! depthSearch && bigDataUrl) { if (isSupportedType(tdb->type)) { - if (chromSize > 0) hubSampleUrl(hub, tdb, chromCount, itemCount, chromName, chromSize, genome, errors->string); - else - hubSampleUrl(hub, tdb, chromCount, itemCount, longName, longSize, genome, errors->string); } - // hPrintf("
  • %s : %s : %s (maybe sample ?)
  • \n", tdb->track, tdb->type, bigDataUrl); } else { if (isSupportedType(tdb->type)) { - if (chromSize > 0) hubSampleUrl(hub, tdb, chromCount, itemCount, chromName, chromSize, genome, errors->string); - else - hubSampleUrl(hub, tdb, chromCount, itemCount, longName, longSize, genome, errors->string); } else hPrintf("
  • %s : %s (what is this)
  • \n", tdb->track, tdb->type); } } if (allTrackSettings) { hPrintf("
  • \n"); } else if (tdb->subtracks) { - showSubTracks(hub, db, tdb, countTracks, chromName, chromSize, errors->string); + hubSubTracks(hub, db, tdb, countTracks, chromCount, itemCount, chromName, chromSize, genome, errors->string); } return; } /* static void hubCountOneTdb(char *db, struct trackDb *tdb, * char *bigDataIndex, struct hash *countTracks, - * char *chromName, long long chromSize) + * char *chromName, unsigned chromSize) */ static void countOneTdb(char *db, struct trackDb *tdb, struct hash *countTracks, char *chromName, unsigned chromSize, char *errorString) /* for this tdb in this db, count it up and provide a sample */ { char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl"); // char *compositeTrack = trackDbSetting(tdb, "compositeTrack"); boolean compositeContainer = tdbIsComposite(tdb); boolean compositeView = tdbIsCompositeView(tdb); // char *superTrack = trackDbSetting(tdb, "superTrack"); boolean superChild = tdbIsSuperTrackChild(tdb); boolean depthSearch = cartUsualBoolean(cart, "depthSearch", FALSE); @@ -710,53 +776,44 @@ struct trackHubGenome *genome = hubTop->genomeList; hPrintf("

    genome sequences (and tracks) present in this track hub

    \n"); if (NULL == genome) { hPrintf("

    odd error, can not find a gnomeList ? at url: '%s'

    \n", hubTop->url); return; } hPrintf("