185686eee12878de494bd96ab0e3e8be4c8d03ed
hiram
Fri Mar 15 17:16:37 2019 -0700
adding user documentation refs #18869
diff --git src/hg/hubApi/hubApi.c src/hg/hubApi/hubApi.c
index 4cbfffb..09e9dac 100644
--- src/hg/hubApi/hubApi.c
+++ src/hg/hubApi/hubApi.c
@@ -4,31 +4,31 @@
/*
+------------------+------------------+------+-----+---------+-------+
| 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 */
-static boolean debug = TRUE;
+static boolean debug = FALSE;
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;
@@ -597,68 +597,113 @@
if (countTracks->elCount)
{
hPrintf("
\n");
struct hashEl *hel, *helList = hashElListHash(countTracks);
slSort(&helList, hashElCmpIntValDesc);
for (hel = helList; hel; hel = hel->next)
{
hPrintf(" - %d - %s
\n", ptToInt(hel->val), hel->name);
}
hPrintf("
\n");
}
hPrintf("\n");
hPrintf("\n");
} // static void tracksForUcscDb(char * db)
+static void introductionText()
+/* output explanation text */
+{
+char *scriptUri = getenv("SCRIPT_URI");
+
+hPrintf("JSON data API interface to U.C. Santa Cruz genome browser data
\n");
+hPrintf("Data access URL: %s
\n", scriptUri);
+hPrintf("Endpoint functions:
\n");
+hPrintf("\n");
+hPrintf("- /list/...
\n");
+hPrintf("\n");
+hPrintf("- /list/publicHubs - list public hubs
\n");
+hPrintf("- /list/ucscGenomes - list UCSC database genomes
\n");
+hPrintf("- /list/hubGenomes - list genomes from specified hub
\n");
+hPrintf("- /list/tracks - list data tracks available in specified hub or database genome
\n");
+hPrintf("- /list/chromosomes - list chromosomes from specified data track in specified hub or database genome
\n");
+hPrintf("
\n");
+hPrintf("- /getData/...
\n");
+hPrintf("\n");
+hPrintf("- /getData/sequence - return sequence from specified hub or database genome
\n");
+hPrintf("- /getData/track - return data from specified track in hub or database genome
\n");
+hPrintf("
\n");
+hPrintf("
\n");
+hPrintf("Parameters to endpoint functions:
\n");
+hPrintf("\n");
+hPrintf("- hubUrl=<url> - specify track hub or assembly hub URL
\n");
+hPrintf("- genome=<name> - specify genome assemby in track or assembly hub
\n");
+hPrintf("- db=<ucscDb> - specify database (aka genome assembly) in UCSC genome browser
\n");
+hPrintf("- track=<trackName> - specify data track in hub or UCSC database genome assembly
\n");
+hPrintf("- chrom=<chrN> - specify chromosome name for sequence or track data
\n");
+hPrintf("- start=<123> - specify start coordinate (0 relative) for data from track or sequence retrieval
\n");
+hPrintf("- end=<456> - specify end coordinate (1 relative) for data from track or sequence retrieval
\n");
+hPrintf("- (see also: UCSC browser coordinate counting systems)
");
+hPrintf("
\n");
+}
+
static void showExamples(char *url, struct trackHubGenome *hubGenome, char *ucscDb)
{
+char *urlPrefix = "";
+char *httpHost = getenv("HTTP_HOST");
+
+if (! startsWith("hgwdev-api", httpHost)) {
+ if (startsWith("hgwdev",httpHost) || startsWith("genome-test", httpHost))
+ {
+ urlPrefix = "../cgi-bin/hubApi";
+ }
+}
hPrintf("Example URLs to return json data structures:
\n");
hPrintf("listing functions
\n");
hPrintf("\n");
-hPrintf("- list public hubs /list/publicHubs
\n");
-hPrintf("- list database genomes /list/ucscGenomes
\n");
-hPrintf("- list genomes from specified hub /list/hubGenomes?hubUrl=%s
\n", url, url);
-hPrintf("- list tracks from specified hub and genome /list/tracks?hubUrl=%s&genome=%s
\n", url, url, hubGenome->name, url, hubGenome->name);
-hPrintf("- list tracks from specified UCSC database /list/tracks?db=%s
\n", ucscDb, ucscDb);
-hPrintf("- list chromosomes from specified UCSC database /list/chromosomes?db=%s
\n", ucscDb, ucscDb);
-hPrintf("- list chromosomes from specified track from UCSC databaset /list/chromosomes?db=%s&track=gap
\n", ucscDb, ucscDb);
+hPrintf("- list public hubs %s/list/publicHubs
\n", urlPrefix, urlPrefix);
+hPrintf("- list database genomes %s/list/ucscGenomes
\n", urlPrefix, urlPrefix);
+hPrintf("- list genomes from specified hub %s/list/hubGenomes?hubUrl=%s
\n", urlPrefix, url, urlPrefix, url);
+hPrintf("- list tracks from specified hub and genome %s/list/tracks?hubUrl=%s&genome=%s
\n", urlPrefix, url, hubGenome->name, urlPrefix, url, hubGenome->name);
+hPrintf("- list tracks from specified UCSC database %s/list/tracks?db=%s
\n", urlPrefix, ucscDb, urlPrefix, ucscDb);
+hPrintf("- list chromosomes from specified UCSC database %s/list/chromosomes?db=%s
\n", urlPrefix, ucscDb, urlPrefix, ucscDb);
+hPrintf("- list chromosomes from specified track from UCSC databaset %s/list/chromosomes?db=%s&track=gap
\n", urlPrefix, ucscDb, urlPrefix, ucscDb);
hPrintf("
\n");
hPrintf("getData functions
\n");
hPrintf("\n");
-hPrintf("- get sequence from specified database and chromosome /getData/sequence?db=%s&chrom=chrM
\n", ucscDb, ucscDb);
-hPrintf("- get sequence from specified database, chromosome with start,end coordinates /getData/sequence?db=%s&chrom=chrM&start=0&end=128
\n", ucscDb, ucscDb);
-hPrintf("- get entire track data from specified database and track name (gold == Assembly) /getData/track?db=%s&track=gold
\n", ucscDb, ucscDb);
-hPrintf("- get track data from specified database, chromosome and track name (gold == Assembly) /getData/track?db=%s&chrom=chrM&track=gold
\n", ucscDb, ucscDb);
-hPrintf("- get track data from specified database, chromosome, track name, start and end coordinates /getData/track?db=%s&chrom=chrI&track=gold&start=107680&end=186148
\n", defaultDb, defaultDb);
-hPrintf("- get entire track data from specified hub and track name /getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/GillBejerano/hub.txt&genome=hg19&track=ultraConserved
\n");
-hPrintf("- get track data from specified hub, chromosome and track name (full chromosome) /getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chrCp&track=assembly_
\n");
-hPrintf("- get track data from specified hub, chromosome, track name, start and end coordinates /getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chr1&track=assembly_&start=0&end=14309681
\n");
-hPrintf("- get all track data from specified hub and track name /getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&track=gc5Base
\n");
-hPrintf("- get track data from specified hub, chromosome, track name, start and end coordinates /getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chrMt&track=gc5Base&start=143600&end=143685
\n");
-hPrintf("- get bigWig track data from specified database, chromosome, track name, start and end coordinates /getData/track?db=%s&chrom=chrI&track=gc5BaseBw&start=107680&end=186148
\n", defaultDb, defaultDb);
-hPrintf("- get bigBed track data from specified database, chromosome, track name, start and end coordinates /getData/track?db=%s&chrom=chrII&track=ncbiRefSeqOther&start=14334626&end=14979625
\n", defaultDb, defaultDb);
-hPrintf("- get narrowPeak track data from specified database, chromosome, track name, start and end coordinates /getData/track?db=%s&chrom=chr1&track=wgEncodeAwgDnaseDuke8988tUniPk&start=14334626&end=14979625
\n", "hg19", "hg19");
-hPrintf("- get broadPeak track data from specified database, chromosome, track name, start and end coordinates /getData/track?db=%s&chrom=chr1&track=wgEncodeBroadHistoneOsteoP300kat3bPk&start=14334626&end=14979625
\n", "hg19", "hg19");
+hPrintf("- get sequence from specified database and chromosome %s/getData/sequence?db=%s&chrom=chrM
\n", urlPrefix, ucscDb, urlPrefix, ucscDb);
+hPrintf("- get sequence from specified database, chromosome with start,end coordinates %s/getData/sequence?db=%s&chrom=chrM&start=0&end=128
\n", urlPrefix, ucscDb, urlPrefix, ucscDb);
+hPrintf("- get entire track data from specified database and track name (gold == Assembly) %s/getData/track?db=%s&track=gold
\n", urlPrefix, ucscDb, urlPrefix, ucscDb);
+hPrintf("- get track data from specified database, chromosome and track name (gold == Assembly) %s/getData/track?db=%s&chrom=chrM&track=gold
\n", urlPrefix, ucscDb, urlPrefix, ucscDb);
+hPrintf("- get track data from specified database, chromosome, track name, start and end coordinates %s/getData/track?db=%s&chrom=chrI&track=gold&start=107680&end=186148
\n", urlPrefix, defaultDb, urlPrefix, defaultDb);
+hPrintf("- get entire track data from specified hub and track name %s/getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/GillBejerano/hub.txt&genome=hg19&track=ultraConserved
\n", urlPrefix, urlPrefix);
+hPrintf("- get track data from specified hub, chromosome and track name (full chromosome) %s/getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chrCp&track=assembly_
\n", urlPrefix, urlPrefix);
+hPrintf("- get track data from specified hub, chromosome, track name, start and end coordinates %s/getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chr1&track=assembly_&start=0&end=14309681
\n", urlPrefix, urlPrefix);
+hPrintf("- get all track data from specified hub and track name %s/getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&track=gc5Base
\n", urlPrefix, urlPrefix);
+hPrintf("- get track data from specified hub, chromosome, track name, start and end coordinates %s/getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chrMt&track=gc5Base&start=143600&end=143685
\n", urlPrefix, urlPrefix);
+hPrintf("- get bigWig track data from specified database, chromosome, track name, start and end coordinates %s/getData/track?db=%s&chrom=chrI&track=gc5BaseBw&start=107680&end=186148
\n", urlPrefix, defaultDb, urlPrefix, defaultDb);
+hPrintf("- get bigBed track data from specified database, chromosome, track name, start and end coordinates %s/getData/track?db=%s&chrom=chrII&track=ncbiRefSeqOther&start=14334626&end=14979625
\n", urlPrefix, defaultDb, urlPrefix, defaultDb);
+hPrintf("- get narrowPeak track data from specified database, chromosome, track name, start and end coordinates %s/getData/track?db=%s&chrom=chr1&track=wgEncodeAwgDnaseDuke8988tUniPk&start=14334626&end=14979625
\n", urlPrefix, "hg19", urlPrefix, "hg19");
+hPrintf("- get broadPeak track data from specified database, chromosome, track name, start and end coordinates %s/getData/track?db=%s&chrom=chr1&track=wgEncodeBroadHistoneOsteoP300kat3bPk&start=14334626&end=14979625
\n", urlPrefix, "hg19", urlPrefix, "hg19");
hPrintf("
\n");
hPrintf("Example URLs to generate errors:
\n");
hPrintf("\n");
-hPrintf("- get track data from specified hub, chromosome, track name, start and end coordinates /getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chrI&track=assembly_&start=0&end=14309681
\n");
+hPrintf("- get track data from specified hub, chromosome, track name, start and end coordinates %s/getData/track?hubUrl=http://genome-test.gi.ucsc.edu/~hiram/hubs/Plants/hub.txt&genome=_araTha1&chrom=chrI&track=assembly_&start=0&end=14309681
\n", urlPrefix, urlPrefix);
hPrintf("
\n");
} /* static void showExamples() */
static void showCartDump()
/* for information purposes only during development, will become obsolete */
{
hPrintf("cart dump
");
hPrintf("\n");
cartDump(cart);
hPrintf("
\n");
}
static void doMiddle(struct cart *theCart)
/* Set up globals and make web page */
{
@@ -741,42 +786,47 @@
char *ucscDb = cartUsualString(cart, "ucscGenomes", defaultDb);
char *urlInput = urlDropDown; /* assume public hub */
if (sameWord("go", goOtherHub)) /* requested other hub URL */
urlInput = otherHubUrl;
if (commandError)
{
hPrintf("ERROR: no such command: '%s/%s' for endpoint '%s'
", words[0], words[1], pathInfo);
}
long lastTime = clock1000();
struct trackHub *hub = errCatchTrackHubOpen(urlInput);
if (measureTiming)
{
long thisTime = clock1000();
+ if (debug)
hPrintf("hub open time: %ld millis
\n", thisTime - lastTime);
}
// hPrintf("ucscDb: '%s'\n", ucscDb);
struct trackHubGenome *hubGenome = hub->genomeList;
+introductionText();
+
showExamples(urlInput, hubGenome, ucscDb);
if (debug)
showCartDump();
+hPrintf("Explore hub or database assemblies and tracks
\n");
+
hPrintf("
\n");
if (sameWord("go", goUcscDb)) /* requested UCSC db track list */
{
tracksForUcscDb(ucscDb);
}
else
{
+ if (debug)
+ {
hPrintf("URL: %s - %s
\n", urlInput, sameWord("go",goPublicHub) ? "public hub" : "other hub");
hPrintf("name: %s
\n", hub->shortLabel);
hPrintf("description: %s
\n", hub->longLabel);
hPrintf("default db: '%s'
\n", isEmpty(hub->defaultDb) ? "(none available)" : hub->defaultDb);
printf("docRoot:'%s'
\n", docRoot);
+ }
if (hub->genomeList)
(void) genomeList(hub, NULL, NULL); /* ignore returned list */
hPrintf("
\n");
}
-
if (timedOut)
hPrintf("Reached time out %ld seconds
", timeOutSeconds);
if (measureTiming)
hPrintf("Overall total time: %ld millis
\n", clock1000() - enteredMainTime);
cartWebEnd();
} /* void doMiddle(struct cart *theCart) */
/* Null terminated list of CGI Variables we don't want to save
* permanently. */
static char *excludeVars[] = {"Submit", "submit", NULL,};
int main(int argc, char *argv[])
/* Process command line. */
{