src/hg/hgTracks/simpleTracks.c 1.63

1.63 2009/02/23 22:57:30 angie
Added dgvMethods: filter items by publication reference.
Index: src/hg/hgTracks/simpleTracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/simpleTracks.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -b -B -U 4 -r1.62 -r1.63
--- src/hg/hgTracks/simpleTracks.c	18 Feb 2009 23:58:35 -0000	1.62
+++ src/hg/hgTracks/simpleTracks.c	23 Feb 2009 22:57:30 -0000	1.63
@@ -9328,8 +9328,50 @@
 linkedFeaturesMethods(tg);
 tg->itemName = kiddEichlerItemName;
 }
 
+boolean dgvFilter(struct track *tg, void *item)
+/* For use with filterItems -- return TRUE if item's PubMed ID is in the list
+ * specified by the user. */
+{
+static struct slName *filterPmIds = NULL;
+struct linkedFeatures *lf = item;
+struct sqlConnection *conn = hAllocConn(database);
+char query[512];
+safef(query, sizeof(query), "select pubmedId from %s where name = '%s'",
+      tg->tdb->tableName, lf->name);
+char buf[32];
+char *pmId = sqlQuickQuery(conn, query, buf, sizeof(buf));
+hFreeConn(&conn);
+if (filterPmIds == NULL)
+    {
+    char cartVarName[256];
+    safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterPmId", tg->tdb->tableName);
+    filterPmIds = cartOptionalSlNameList(cart, cartVarName);
+    }
+return slNameInList(filterPmIds, pmId);
+}
+
+void loadDgv(struct track *tg)
+/* Load Database of Genomic Variants items, filtering by pubmedId if specified. */
+{
+loadBed9(tg);
+char cartVarName[256];
+safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterType", tg->tdb->tableName);
+char *incOrExc = cartUsualString(cart, cartVarName, NULL);
+safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterPmId", tg->tdb->tableName);
+struct slName *filterPmIds = cartOptionalSlNameList(cart, cartVarName);
+if (isNotEmpty(incOrExc) && filterPmIds != NULL)
+    filterItems(tg, dgvFilter, incOrExc);
+}
+
+void dgvMethods(struct track *tg)
+/* Database of Genomic Variants. */
+{
+linkedFeaturesMethods(tg);
+tg->loadItems = loadDgv;
+}
+
 void loadGenePred(struct track *tg)
 /* Convert gene pred in window to linked feature. */
 {
 tg->items = lfFromGenePredInRange(tg, tg->mapName, chromName, winStart, winEnd);
@@ -10984,8 +11026,9 @@
 retroRegisterTrackHandlers();
 registerTrackHandler("retroposons", dbRIPMethods);
 registerTrackHandler("kiddEichlerDisc", kiddEichlerMethods);
 registerTrackHandler("kiddEichlerValid", kiddEichlerMethods);
+registerTrackHandler("dgv", dgvMethods);
 
 registerTrackHandler("hapmapSnps", hapmapMethods);
 registerTrackHandler("omicia", omiciaMethods);
 registerTrackHandler("omimGene", omimGeneMethods);