src/hg/hgTables/wikiTrack.c 1.3
1.3 2010/05/11 01:43:25 kent
Refactoring to split the trackDb.tableName field into separate track and table fields. Similarly track.mapName field goes to the same track and table fields.
Index: src/hg/hgTables/wikiTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTables/wikiTrack.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -b -B -U 1000000 -r1.2 -r1.3
--- src/hg/hgTables/wikiTrack.c 9 Jan 2009 00:58:27 -0000 1.2
+++ src/hg/hgTables/wikiTrack.c 11 May 2010 01:43:25 -0000 1.3
@@ -1,128 +1,129 @@
/* hgTables - Main and utility functions for table browser. */
#include "common.h"
#include "trackDb.h"
#include "hui.h"
#include "hdb.h"
#include "wikiTrack.h"
#include "hgTables.h"
static char const rcsid[] = "$Id$";
void wikiTrackDb(struct trackDb **list)
/* create a trackDb entry for the wiki track */
{
struct trackDb *tdb;
AllocVar(tdb);
-tdb->tableName = WIKI_TRACK_TABLE;
+tdb->track = WIKI_TRACK_TABLE;
+tdb->table = WIKI_TRACK_TABLE;
tdb->shortLabel = WIKI_TRACK_LABEL;
tdb->longLabel = WIKI_TRACK_LONGLABEL;
tdb->visibility = tvFull;
tdb->priority = WIKI_TRACK_PRIORITY;
-tdb->html = hFileContentsOrWarning(hHelpFile(tdb->tableName));
+tdb->html = hFileContentsOrWarning(hHelpFile(tdb->track));
tdb->type = "none";
tdb->grp = "map";
tdb->canPack = FALSE;
slAddHead(list, tdb);
slSort(list, trackDbCmp);
}
struct hTableInfo *wikiHti()
/* Create an hTableInfo for the wikiTrack. */
{
struct hTableInfo *hti;
AllocVar(hti);
hti->rootName = cloneString(WIKI_TRACK_TABLE);
hti->isPos = TRUE;
hti->isSplit = FALSE;
hti->hasBin = TRUE;
hti->type = cloneString("none");
strncpy(hti->chromField, "chrom", 32);
strncpy(hti->startField, "chromStart", 32);
strncpy(hti->endField, "chromEnd", 32);
strncpy(hti->nameField, "name", 32);
strncpy(hti->scoreField, "score", 32);
strncpy(hti->strandField, "strand", 32);
return(hti);
}
void doSummaryStatsWikiTrack(struct sqlConnection *conn)
/* Put up page showing summary stats for wikiTrack. */
{
struct sqlConnection *wikiConn = wikiConnect();
doSummaryStatsBed(wikiConn);
wikiDisconnect(&wikiConn);
}
static void wikiTrackFilteredBedOnRegion(
struct region *region, /* Region to get data from. */
struct hash *idHash, /* Hash of identifiers or NULL */
struct bedFilter *bf, /* Filter or NULL */
struct lm *lm, /* Local memory pool. */
struct bed **pBedList /* Output get's appended to this list */
)
/* Get the wikiTrack items passing filter on a single region. */
{
struct bed *bed;
int fieldCount = 6;
char query[512];
int rowOffset;
char **row;
struct sqlConnection *wikiConn = wikiConnect();
struct sqlResult *sr = NULL;
char where[512];
char *filter = filterClause(wikiDbName(), WIKI_TRACK_TABLE, region->chrom, NULL);
if (filter)
safef(where, sizeof(where), "db='%s' AND %s", database, filter);
else
safef(where, sizeof(where), "db='%s'", database);
safef(query, sizeof(query), "select * from %s", WIKI_TRACK_TABLE);
sr = hRangeQuery(wikiConn, WIKI_TRACK_TABLE, region->chrom,
region->start, region->end, where, &rowOffset);
while ((row = sqlNextRow(sr)) != NULL)
{
bed = bedLoadN(row+rowOffset, fieldCount);
if ((idHash == NULL || hashLookup(idHash, bed->name)) &&
(bf == NULL || bedFilterOne(bf, bed)))
{
struct bed *copy = lmCloneBed(bed, lm);
slAddHead(pBedList, copy);
}
}
sqlFreeResult(&sr);
wikiDisconnect(&wikiConn);
}
struct bed *wikiTrackGetFilteredBeds(char *name, struct region *regionList,
struct lm *lm, int *retFieldCount)
/* Get list of beds from the wikiTrack * in current regions and that pass
* filters. You can bedFree this when done. */
{
struct bed *bedList = NULL;
struct hash *idHash = NULL;
struct bedFilter *bf = NULL;
struct region *region = NULL;
/* Figure out how to filter things. */
bf = bedFilterForCustomTrack(name);
idHash = identifierHash(database, name);
/* Grab filtered beds for each region. */
for (region = regionList; region != NULL; region = region->next)
wikiTrackFilteredBedOnRegion(region, idHash, bf, lm, &bedList);
/* clean up. */
hashFree(&idHash);
slReverse(&bedList);
return bedList;
}