906e4969503040c01d52cff8545f2050ce367390
fanhsu
  Fri Feb 18 08:34:22 2011 -0800
Updated functions for new OMIM tracks.
diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index 8029826..7012f5c 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -121,30 +121,31 @@
 #include "variome.h"
 #endif /* GBROWSE */
 
 #ifdef LOWELAB
 #include "loweLabTracks.h"
 #include "rnaPLFoldTrack.h"
 #endif /* LOWELAB */
 #ifdef LOWELAB_WIKI
 #include "wiki.h"
 #endif /* LOWELAB_WIKI */
 
 static char const rcsid[] = "$Id: simpleTracks.c,v 1.149 2010/06/05 19:29:42 braney Exp $";
 
 #define CHROM_COLORS 26
 #define SMALLDYBUF 64
+#define OMIM_MAX_DESC_LEN 256
 
 int colorBin[MAXPIXELS][256]; /* count of colors for each pixel for each color */
 /* Declare our color gradients and the the number of colors in them */
 Color shadesOfGreen[EXPR_DATA_SHADES];
 Color shadesOfRed[EXPR_DATA_SHADES];
 Color shadesOfBlue[EXPR_DATA_SHADES];
 Color shadesOfYellow[EXPR_DATA_SHADES];
 Color shadesOfGreenOnWhite[EXPR_DATA_SHADES];
 Color shadesOfRedOnWhite[EXPR_DATA_SHADES];
 Color shadesOfBlueOnWhite[EXPR_DATA_SHADES];
 Color shadesOfYellowOnWhite[EXPR_DATA_SHADES];
 Color shadesOfRedOnYellow[EXPR_DATA_SHADES];
 Color shadesOfBlueOnYellow[EXPR_DATA_SHADES];
 Color orangeColor = 0;
 Color brickColor = 0;
@@ -10910,61 +10911,81 @@
 tg->nextItemButtonable = TRUE;
 tg->nextPrevItem = linkedFeaturesLabelNextPrevItem;
 }
 
 void oregannoMethods (struct track *tg)
 /* load so can allow filtering on type */
 {
 tg->loadItems = loadOreganno;
 tg->itemColor = oregannoColor;
 tg->itemNameColor = oregannoColor;
 tg->nextItemButtonable = TRUE;
 tg->nextPrevItem = linkedFeaturesLabelNextPrevItem;
 }
 
 /* reserve space no more than 20 unique OMIM entries */
-#define OMIM_MAX_DESC_LEN 256
-char omimGeneClass3Buffer[20 * OMIM_MAX_DESC_LEN];
+char omimGeneClass3Buffer[21 * OMIM_MAX_DESC_LEN];
 
 char *omimGeneClass3DisorderList(struct track *tg, struct bed *item)
 /* Return list of disorders associated with a OMIM entry */
 {
 struct sqlConnection *conn;
 char query[256];
 struct sqlResult *sr;
 char **row;
 char *chp;
 int i=0;
 
+// get gene symbol(s) first
+
+conn = hAllocConn(database);
+safef(query,sizeof(query),
+        "select geneSymbol from omimGeneMap where omimId =%s", item->name);
+sr = sqlMustGetResult(conn, query);
+row = sqlNextRow(sr);
+
+if (row != NULL) 
+    {
+    safef(omimGeneClass3Buffer, sizeof(omimGeneClass3Buffer), "%s; disorder(s): ", row[0]);
+    }
+
+chp = omimGeneClass3Buffer + (long)strlen(row[0]) + 15L; 
+
 conn = hAllocConn(database);
 safef(query,sizeof(query),
         "select distinct disorder from omimDisorderMap, omimGeneClass3 where name='%s' and name=cast(omimId as char) order by disorder", item->name);
 sr = sqlMustGetResult(conn, query);
 row = sqlNextRow(sr);
 
 /* show up to 20 max entries */
-chp = omimGeneClass3Buffer;
+//chp = omimGeneClass3Buffer;
 while ((row != NULL) && i<20)
     {
+    int lengthLeft = sizeof(omimGeneClass3Buffer) - strlen(omimGeneClass3Buffer);
     /* omimDisorderMap disorder field some times have trailing blanks. */
     eraseTrailingSpaces(row[0]);
     if (i != 0)
 	{
 	safef(chp, 3, "; ");
 	chp++;chp++;
 	}
+    safecpy(chp, lengthLeft, row[0]);
+    lengthLeft = lengthLeft - strlen(row[0]) - 2;
+    
     safecpy(chp, OMIM_MAX_DESC_LEN, row[0]);
+    
+    
     chp = chp+strlen(row[0]);
     row = sqlNextRow(sr);
     i++;
     }
 
 if ((i == 20) && (row != NULL))
     {
     safef(chp, 5, " ...");
     chp++;chp++;chp++;chp++;
     }
 
 *chp = '\0';
 
 hFreeConn(&conn);
 sqlFreeResult(&sr);
@@ -11013,31 +11034,30 @@
     if (dir != 0 && w > 2)
 	{
 	int midY = y + (heightPer>>1);
 	Color textColor = hvGfxContrastingColor(hvg, color);
 	clippedBarbs(hvg, x1, midY, w, tl.barbHeight, tl.barbSpacing,
 		dir, textColor, TRUE);
 	}
     }
 }
 
 void omimGeneClass3Methods (struct track *tg)
 {
 tg->drawItemAt    = omimGeneClass3DrawAt;
 }
 
-#define OMIM_MAX_DESC_LEN 256
 char omimAvSnpBuffer[OMIM_MAX_DESC_LEN];
 
 char *omimAvSnpAaReplacement(struct track *tg, struct bed *item)
 /* Return replacement string associated with a OMIM AV entry */
 {
 struct sqlConnection *conn;
 char query[256];
 struct sqlResult *sr;
 char **row;
 char *chp;
 
 omimAvSnpBuffer[0] = '\0';
 
 conn = hAllocConn(database);
 safef(query,sizeof(query),
@@ -11098,31 +11118,30 @@
     if (dir != 0 && w > 2)
 	{
 	int midY = y + (heightPer>>1);
 	Color textColor = hvGfxContrastingColor(hvg, color);
 	clippedBarbs(hvg, x1, midY, w, tl.barbHeight, tl.barbSpacing,
 		dir, textColor, TRUE);
 	}
     }
 }
 
 void omimAvSnpMethods (struct track *tg)
 {
 tg->drawItemAt    = omimAvSnpDrawAt;
 }
 
-#define OMIM_MAX_DESC_LEN 256
 char omimLocationBuffer[OMIM_MAX_DESC_LEN*2];
 
 char *omimLocationDescription(struct track *tg, struct bed *item)
 /* Return description of an OMIM entry */
 {
 struct sqlConnection *conn;
 char query[256];
 struct sqlResult *sr;
 char **row;
 char *chp;
 
 omimLocationBuffer[0] = '\0';
 
 conn = hAllocConn(database);
 safef(query,sizeof(query),
@@ -11230,31 +11249,30 @@
 /* set the color to red if the entry is listed in morbidmap */
 safef(query, sizeof(query), "select geneSymbols from omimMorbidMap where omimId=%s", el->name);
 geneSymbols = sqlQuickString(conn, query);
 hFreeConn(&conn);
 if (geneSymbols != NULL)
     {
     return hvGfxFindColorIx(hvg, 255, 0, 0);
     }
 else
     {
     return hvGfxFindColorIx(hvg, 0, 0, 200);
     }
 }
 
 /* reserve space no more than 20 unique OMIM entries */
-#define OMIM_MAX_DESC_LEN 256
 char omimGeneBuffer[20 * OMIM_MAX_DESC_LEN];
 
 char *omimGeneDiseaseList(struct track *tg, struct bed *item)
 /* Return list of diseases associated with a OMIM entry */
 {
 struct sqlConnection *conn;
 char query[256];
 struct sqlResult *sr;
 char **row;
 char *chp;
 int i=0;
 
 conn = hAllocConn(database);
 
 safef(query,sizeof(query),