95efc27edf24bba8d0c7e53d2ef4aead59982826
braney
  Mon Jun 15 18:29:39 2020 -0700
Merging in our gencode merge code to master branch

diff --git src/hg/hgGene2/hgGene2.c src/hg/hgGene2/hgGene2.c
new file mode 100644
index 0000000..2adf858
--- /dev/null
+++ src/hg/hgGene2/hgGene2.c
@@ -0,0 +1,104 @@
+/* hgGene2 - hgGene support for gencodeAttr table set. */
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "options.h"
+#include "jksql.h"
+#include "htmshell.h"
+#include "web.h"
+#include "cheapcgi.h"
+#include "cart.h"
+#include "hui.h"
+#include "udc.h"
+#include "knetUdc.h"
+#include "genbank.h"
+
+#include "assoc.h"
+#include "sections.h"
+
+/* Global Variables */
+struct cart *cart;             /* CGI and other variables */
+struct hash *oldVars = NULL;
+char *database = NULL;
+
+
+
+static void doPage(struct cart *cart, char *id)
+{
+struct sqlConnection *conn = hAllocConn(database);
+
+char *table = cartUsualString(cart, "hgg_type" , NULL);
+struct trackDb *tdb = hTrackDbForTrack(database, table);
+char *fileName = bbiNameFromSettingOrTable(tdb, NULL, tdb->table);
+struct bbiFile *bbi = bigBedFileOpen(fileName);
+char *gene = cartUsualString(cart, "hgg_gene" , 0);
+char *chrom = cartUsualString(cart, "hgg_chrom" , 0);
+int start = cartUsualInt(cart, "hgg_start" , 0);
+int end = cartUsualInt(cart, "hgg_end" , 0);
+struct lm *lm = lmInit(0);
+struct asObject *as = asForDb(tdb, database);
+
+
+struct bigBedInterval *bb, *bbList = bigBedIntervalQuery(bbi, chrom, start, end, 0, lm);
+ char startBuf[128], endBuf[128];
+ char *bedRow[40];
+
+ 
+for (bb = bbList; bb != NULL; bb = bb->next)
+    {
+    if (!(bb->start == start && bb->end == end))
+        continue;
+    int bbFieldCount = bigBedIntervalToRow(bb, chrom, startBuf, endBuf, bedRow, ArraySize(bedRow));
+
+    char *name = cloneFirstWordByDelimiterNoSkip(bb->rest, '\t');
+    boolean match = (isEmpty(name) && isEmpty(gene)) || sameOk(name, gene);
+    freez(&name);
+    if (!match)
+        continue;
+    int ii;
+    struct asColumn *col = as->columnList;
+    for(ii=0; ii < bbFieldCount; ii++, col = col->next)
+        {
+        if (ii < 20)
+            continue;
+        printf("<b>%s</b>: %s<BR>", col->comment, bedRow[ii]);
+        }
+    }
+
+doAssociations(conn, tdb, gene);
+doSections(conn, tdb, gene);
+}
+
+void doMiddle(struct cart *theCart)
+/* Set up globals and make web page */
+{
+cart = theCart;
+char *genome = NULL;
+getDbAndGenome(cart, &database, &genome, oldVars);
+initGenbankTableNames(database);
+
+int timeout = cartUsualInt(cart, "udcTimeout", 300);
+if (udcCacheTimeout() < timeout)
+    udcSetCacheTimeout(timeout);
+knetUdcInstall();
+
+char *id = cartUsualString(cart, "hgg_gene" , NULL);
+
+cartWebStart(cart, database, "%s Gene %s (%s) Description and Page Index",
+            genome, id, id);
+
+doPage(cart, id);
+cartWebEnd();
+}
+
+/* Null terminated list of CGI Variables we don't want to save
+ * permanently. */
+char *excludeVars[] = {"Submit", "submit", NULL,};
+
+int main(int argc, char *argv[])
+/* Process command line. */
+{
+cgiSpoof(&argc, argv);
+cartEmptyShell(doMiddle, hUserCookie(), excludeVars, oldVars);
+return 0;
+}