25a1ed58b2f9fc2d9ad7fdbe9117f0b2f47253f3
fanhsu
  Tue Nov 9 16:38:23 2010 -0800
Update for RGD Genes, Redmine issue #29.
diff --git src/hg/hgGene/hgGene.c src/hg/hgGene/hgGene.c
index c8a78f6..399eeff 100644
--- src/hg/hgGene/hgGene.c
+++ src/hg/hgGene/hgGene.c
@@ -22,30 +22,32 @@
 
 /* ---- Global variables. ---- */
 struct cart *cart;	/* This holds cgi and other variables between clicks. */
 struct hash *oldVars;	/* Old cart hash. */
 char *database;		/* Name of genome database - hg15, mm3, or the like. */
 char *genome;		/* Name of genome - mouse, human, etc. */
 char *curGeneId;	/* Current Gene Id. */
 char *curGeneName;		/* Biological name of gene. */
 char *curGeneChrom;	/* Chromosome current gene is on. */
 struct genePred *curGenePred;	/* Current gene prediction structure. */
 int curGeneStart,curGeneEnd;	/* Position in chromosome. */
 struct sqlConnection *spConn;	/* Connection to SwissProt database. */
 char *swissProtAcc;		/* SwissProt accession (may be NULL). */
 int  kgVersion = KG_UNKNOWN;	/* KG version */
 
+//#include "rgdInfo.c"
+
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "hgGene - A CGI script to display the gene details page.\n"
   "usage:\n"
   "   hgGene cgi-vars in var=val format\n"
   "options:\n"
   "   -hgsid=XXX Session ID to grab vars from session database\n"
   "   -db=XXX  Genome database associated with gene\n"
   "   -org=XXX  Organism associated with gene\n"
   "   -hgg_gene=XXX ID of gene\n"
   );
 }
 
@@ -136,30 +138,35 @@
 {
 char *name = genoQuery(id, "nameSql", conn);
 if (name == NULL)
     name = cloneString(id);
 return name;
 }
 
 char *getSwissProtAcc(struct sqlConnection *conn, struct sqlConnection *spConn, 
 	char *geneId)
 /* Look up SwissProt id.  Return NULL if not found.  FreeMem this when done.
  * spConn is existing SwissProt database conn.  May be NULL. */
 {
 char *proteinSql = genomeSetting("proteinSql");
 char query[256];
 char *someAcc, *primaryAcc = NULL;
+if (isRgdGene(conn))
+    {
+    return(getRgdGeneUniProtAcc(curGeneId, conn));
+    }
+
 safef(query, sizeof(query), proteinSql, geneId);
 someAcc = sqlQuickString(conn, query);
 if (someAcc == NULL || someAcc[0] == 0)
     return NULL;
 primaryAcc = spFindAcc(spConn, someAcc);
 freeMem(someAcc);
 return primaryAcc;
 }
 
 
 /* --------------- Page printers ----------------- */
 
 boolean idInAllMrna(char *id, struct sqlConnection *conn)
 /* Return TRUE if id is in allMrna table */
 {
@@ -326,48 +333,59 @@
 const struct section *a = *((struct section **)va);
 const struct section *b = *((struct section **)vb);
 float dif = a->priority - b->priority;
 if (dif < 0)
     return -1;
 else if (dif > 0)
     return 1;
 else
     return 0;
 }
 
 static void addGoodSection(struct section *section, 
 	struct sqlConnection *conn, struct section **pList)
 /* Add section to list if it is non-null and exists returns ok. */
 {
+//printf("<br>adding %s section \n", section->name);fflush(stdout);
 if (section != NULL && hashLookup(section->settings, "hide") == NULL
    && section->exists(section, conn, curGeneId))
      slAddHead(pList, section);
 }
 
 struct section *loadSectionList(struct sqlConnection *conn)
 /* Load up section list - first load up sections.ra, and then
  * call each section loader. */
 {
 struct hash *sectionRa = NULL;
 struct section *sectionList = NULL;
 
 readRa("section.ra", &sectionRa);
 addGoodSection(linksSection(conn, sectionRa), conn, &sectionList);
 /* disable ortherOrg section for CGB servers for the time being */
 if (!hIsCgbServer()) addGoodSection(otherOrgsSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(gadSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(ctdSection(conn, sectionRa), conn, &sectionList);
+/*if (isRgdGene(conn))
+    {
+    addGoodSection(ctdRgdGene2Section(conn, sectionRa), conn, &sectionList);
+    }
+else
+    {
+    addGoodSection(ctdSection(conn, sectionRa), conn, &sectionList);
+    }
+*/
+addGoodSection(rgdGeneRawSection(conn, sectionRa), conn, &sectionList);
 
 //addGoodSection(microarraySection(conn, sectionRa), conn, &sectionList);
 /* temporarily disable microarray section for Zebrafish, until a bug is fixed */
 if (strstr(database, "danRer") == NULL)
     {
     addGoodSection(microarraySection(conn, sectionRa), conn, &sectionList);
     }
 addGoodSection(rnaStructureSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(domainsSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(altSpliceSection(conn, sectionRa), conn, &sectionList);
 // addGoodSection(multipleAlignmentsSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(swissProtCommentsSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(flyBaseRolesSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(flyBasePhenotypesSection(conn, sectionRa), conn, &sectionList);
 addGoodSection(flyBaseSynonymsSection(conn, sectionRa), conn, &sectionList);
@@ -426,30 +444,32 @@
 }
 
 void printSections(struct section *sectionList, struct sqlConnection *conn,
 	char *geneId)
 /* Print each section in turn. */
 {
 struct section *section;
 for (section = sectionList; section != NULL; section = section->next)
     {
     char *closeVarName = sectionCloseVar(section->name);
     boolean isOpen = !(cartUsualInt(cart, closeVarName, 0));
     char *otherState = (isOpen ? "1" : "0");
     char *indicator = (isOpen ? "-" : "+");
     char *indicatorImg = (isOpen ? "../images/remove.gif" : "../images/add.gif");
     struct dyString *header = dyStringNew(0);
+    //keep the following line for future debugging need
+    //printf("<br>printing %s section\n", section->name);fflush(stdout);
     dyStringPrintf(header, "<A NAME=\"%s\"></A>", section->name);	
     dyStringPrintf(header, "<A HREF=\"%s?%s&%s=%s#%s\" class=\"bigBlue\"><IMG src=\"%s\" alt=\"%s\" class=\"bigBlue\"></A>&nbsp;&nbsp;",
     	geneCgi, cartSidUrlString(cart), closeVarName, otherState, section->name, indicatorImg, indicator);
     dyStringAppend(header, section->longLabel);
     webNewSection(header->string);
     if (isOpen)
 	{
 	section->print(section, conn, geneId);
 	}
     else
 	{
 	printf("Press \"+\" in the title bar above to open this section.");
 	}
     dyStringFree(&header);
     }
@@ -540,31 +560,30 @@
         hUserAbort("Couldn't find %s in %s.%s", curGeneId, database, table);
     sqlFreeResult(&sr);
     }
 }
 
 struct genePred *getCurGenePred(struct sqlConnection *conn)
 /* Return current gene in genePred. */
 {
 char *track = genomeSetting("knownGene");
 char table[64];
 boolean hasBin;
 char query[256];
 struct sqlResult *sr;
 char **row;
 struct genePred *gp = NULL;
-
 hFindSplitTable(sqlGetDatabase(conn), curGeneChrom, track, table, &hasBin);
 safef(query, sizeof(query), 
 	"select * from %s where name = '%s' "
 	"and chrom = '%s' and txStart=%d and txEnd=%d"
 	, table, curGeneId, curGeneChrom, curGeneStart, curGeneEnd);
 sr = sqlGetResult(conn, query);
 if ((row = sqlNextRow(sr)) != NULL)
     gp = genePredLoad(row + hasBin);
 sqlFreeResult(&sr);
 if (gp == NULL)
     errAbort("getCurGenePred: Can't find %s", query);
 return gp;
 }
 
 void doKgMethod()
@@ -597,30 +616,31 @@
 	// Silly googlebots.
 	hUserAbort("Error: the hgg_gene parameter is missing from the cart and the CGI params.");
 	}
 
     /* if kgProtMap2 table exists, this means we are doing KG III */
     if (hTableExists(database, "kgProtMap2")) kgVersion = KG_III;
 
     conn = hAllocConn(database);
     curGeneId = findGeneId(conn, geneName);
     getGenePosition(conn);
     curGenePred = getCurGenePred(conn);
     curGeneName = getGeneName(curGeneId, conn);
     spConn = hAllocConn(UNIPROT_DB_NAME);
     swissProtAcc = getSwissProtAcc(conn, spConn, curGeneId);
 
+    if (isRgdGene(conn)) swissProtAcc=getRgdGeneUniProtAcc(curGeneId, conn);
     /* Check command variables, and do the ones that
      * don't want to put up the hot link bar etc. */
     if (cartVarExists(cart, hggDoGetMrnaSeq))
 	doGetMrnaSeq(conn, curGeneId, curGeneName);
     else if (cartVarExists(cart, hggDoWikiTrack))
 	doWikiTrack(conn);
     else if (cartVarExists(cart, hggDoGetProteinSeq))
 	doGetProteinSeq(conn, curGeneId, curGeneName);
     else if (cartVarExists(cart, hggDoRnaFoldDisplay))
 	doRnaFoldDisplay(conn, curGeneId, curGeneName);
     else if (cartVarExists(cart, hggDoOtherProteinSeq))
 	doOtherProteinSeq(conn, curGeneName);
     else if (cartVarExists(cart, hggDoOtherProteinAli))
 	doOtherProteinAli(conn, curGeneId, curGeneName);
     else