1b4e388a646ec3b5f5662ba6e979f23bc6ebc5e5
fanhsu
  Tue May 31 14:00:49 2011 -0700
Updated OMIM entry selection logic.
diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index b833c4d..93eb3ff 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -10746,49 +10746,52 @@
 if (isNotEmpty(ret))
     dyStringAppend(dy, ret);
 
 safef(query,sizeof(query),
         "select distinct description from omimPhenotype, omimGene2 where name='%s' and name=cast(omimId as char) order by description", name);
 char *disorders = collapseRowsFromQuery(query, "; ", 20);
 if (isNotEmpty(disorders))
     {
     dyStringAppend(dy, "; disorder(s): ");
     dyStringAppend(dy, disorders);
     }
 hFreeConn(&conn);
 return(dy->string);
 }
 
-char *getDisorderClass(char *omimId)
+boolean hasOmimPhenotypeClass(char *omimId, int targetClass)
 /* Look up phenotypeClass for omimId, for filtering items.  Don't free result! */
 {
-static char answer[256];
+boolean result;
+char answer[255];
 struct sqlConnection *conn = hAllocConn(database);
 char query[256];
 safef(query,sizeof(query),
-      "select phenotypeClass from omimPhenotype where omimId =%s", omimId);
+      "select phenotypeClass from omimPhenotype where omimId =%s and phenotypeClass=%d", omimId, 
+      targetClass);
 char *ret = sqlQuickQuery(conn, query, answer, sizeof(answer));
 if (ret == NULL)
-    safecpy(answer, sizeof(answer), "0");
+    result = FALSE;
+else
+    result = TRUE;
 hFreeConn(&conn);
-return(answer);
+return(result);
 }
 
 boolean doThisOmimEntry(struct track *tg, char *omimId)
 /* check if the specific class of this OMIM entry is selected by the user */
 {
-char *disorderClass = NULL;
 boolean doIt;
 
 char labelName[255];
 boolean doClass1 = FALSE;
 boolean doClass2 = FALSE;
 boolean doClass3 = FALSE;
 boolean doClass4 = FALSE;
 boolean doOthers = FALSE;
 
 struct hashEl *omimLocationLabels;
 struct hashEl *label;
 
 safef(labelName, sizeof(labelName), "%s.label", tg->table);
 omimLocationLabels = cartFindPrefix(cart, labelName);
 /* if user has not made selection(s) from the filter, enable every item */
@@ -10807,38 +10810,37 @@
 	}
     if (endsWith(label->name, "class3") && differentString(label->val, "0"))
 	{
 	doClass3 = TRUE;
 	}
     if (endsWith(label->name, "class4") && differentString(label->val, "0"))
 	{
 	doClass4 = TRUE;
 	}
     if (endsWith(label->name, "others") && differentString(label->val, "0"))
 	{
 	doOthers = TRUE;
 	}
     }
 
-disorderClass = getDisorderClass(omimId);
-
 doIt = FALSE;
-doIt = doIt || (doClass1 && sameWord(disorderClass, "1")) ;
-doIt = doIt || (doClass2 && sameWord(disorderClass, "2")) ;
-doIt = doIt || (doClass3 && sameWord(disorderClass, "3")) ;
-doIt = doIt || (doClass4 && sameWord(disorderClass, "4")) ;
-doIt = doIt || (doOthers && sameWord(disorderClass, "0")) ;
+
+doIt = doIt || (doClass1 && hasOmimPhenotypeClass(omimId, 1));
+doIt = doIt || (doClass2 && hasOmimPhenotypeClass(omimId, 2));
+doIt = doIt || (doClass3 && hasOmimPhenotypeClass(omimId, 3));
+doIt = doIt || (doClass4 && hasOmimPhenotypeClass(omimId, 4));
+doIt = doIt || (doOthers && hasOmimPhenotypeClass(omimId, 0));
 
 return(doIt);
 }
 
 static void omimFilter(struct track *tg)
 /* Filter the already-loaded items in the omimGene2 or the omimLocation track */
 {
 struct bed *bed, *nextBed = NULL, *list = NULL;
 for (bed = tg->items;  bed != NULL;  bed = nextBed)
     {
     nextBed = bed->next;
     /* check if user has selected the specific class for this OMIM entry */
     if (doThisOmimEntry(tg, bed->name))
 	slAddHead(&list, bed);
     }
@@ -10885,31 +10887,32 @@
 
 lighter.r = (6*normal->r + 4*255) / 10;
 lighter.g = (6*normal->g + 4*255) / 10;
 lighter.b = (6*normal->b + 4*255) / 10;
 
 lightest.r = (1*normal->r + 2*255) / 3;
 lightest.g = (1*normal->g + 2*255) / 3;
 lightest.b = (1*normal->b + 2*255) / 3;
 
 
 struct sqlConnection *conn = hAllocConn(database);
 
 class1Clr = hvGfxFindColorIx(hvg, lightest.r, lightest.g, lightest.b);
 class2Clr = hvGfxFindColorIx(hvg, lighter.r, lighter.g, lighter.b);
 class3Clr = hvGfxFindColorIx(hvg, normal->r, normal->g, normal->b);
-class4Clr = hvGfxFindColorIx(hvg, 153,0, 204);		// purple
+//class4Clr = hvGfxFindColorIx(hvg, 153,0, 204);		// purple
+class4Clr = hvGfxFindColorIx(hvg, 56,  11, 97);
 classOtherClr = hvGfxFindColorIx(hvg, 200, 200, 200);	// light gray
 
 safef(query, sizeof(query),
       "select omimId, phenotypeClass from omimPhenotype where omimId=%s", el->name);
 sr = sqlMustGetResult(conn, query);
 row = sqlNextRow(sr);
 
 hFreeConn(&conn);
 
 if (row == NULL)
     {
     // set to gray if this entry does not have any disorder info
     sqlFreeResult(&sr);
     return classOtherClr;
     }
@@ -11045,31 +11048,33 @@
     Light Gray:
     	for Others
 */
 
 lighter.r = (6*normal->r + 4*255) / 10;
 lighter.g = (6*normal->g + 4*255) / 10;
 lighter.b = (6*normal->b + 4*255) / 10;
 
 lightest.r = (1*normal->r + 2*255) / 3;
 lightest.g = (1*normal->g + 2*255) / 3;
 lightest.b = (1*normal->b + 2*255) / 3;
 
 class1Clr = hvGfxFindColorIx(hvg, lightest.r, lightest.g, lightest.b);
 class2Clr = hvGfxFindColorIx(hvg, lighter.r, lighter.g, lighter.b);
 class3Clr = hvGfxFindColorIx(hvg, normal->r, normal->g, normal->b);
-class4Clr = hvGfxFindColorIx(hvg, 153,0, 204);		// purple
+//class4Clr = hvGfxFindColorIx(hvg, 153,0, 204);		// purple
+class4Clr = hvGfxFindColorIx(hvg, 56,  11, 97);
+//class4Clr = hvGfxFindColorIx(hvg, 97, 11, 94);
 classOtherClr = hvGfxFindColorIx(hvg, 200, 200, 200);	// light gray
 
 struct sqlConnection *conn = hAllocConn(database);
 
 safef(query, sizeof(query),
       "select omimId, phenotypeClass from omimPhenotype where omimId=%s", el->name);
 sr = sqlMustGetResult(conn, query);
 row = sqlNextRow(sr);
 
 hFreeConn(&conn);
 
 if (row == NULL)
     {
     // set to gray if this entry does not have any disorder info
     sqlFreeResult(&sr);
@@ -11113,31 +11118,31 @@
     }
 }
 
 static void omimLocationLoad(struct track *tg)
 /* Load and filter OMIM Loci items, storing long label from omimLocationDescription. */
 {
 bedPlusLabelLoad(tg, omimLocationDescription);
 omimFilter(tg);
 }
 
 void omimLocationMethods (struct track *tg)
 /* Methods for OMIM Loci (Non-Gene Entry Cytogenetic Locations). */
 {
 tg->loadItems     = omimLocationLoad;
 tg->itemColor     = omimLocationColor;
-tg->itemNameColor = omimGene2Color;
+tg->itemNameColor = omimLocationColor;
 tg->drawItemAt    = bedPlusLabelDrawAt;
 tg->mapItem       = bedPlusLabelMapItem;
 tg->nextPrevExon  = simpleBedNextPrevEdge;
 }
 
 char *omimGeneName(struct track *tg, void *item)
 /* set name for omimGene track */
 {
 struct bed *el = item;
 char query[256];
 struct sqlConnection *conn = hAllocConn(database);
 char *geneLabel = NULL;
 
 char *omimGeneLabel = cartUsualString(cart, "omimGene.label", "OMIM ID");