src/hg/instinct/extractData/extractData.c 1.2

1.2 2010/01/14 05:37:23 jsanborn
updated
Index: src/hg/instinct/extractData/extractData.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/extractData/extractData.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 4 -r1.1 -r1.2
--- src/hg/instinct/extractData/extractData.c	14 Jan 2010 05:18:36 -0000	1.1
+++ src/hg/instinct/extractData/extractData.c	14 Jan 2010 05:37:23 -0000	1.2
@@ -127,9 +127,9 @@
 
 return gaHash;                   
 }
 
-void getProbeData(struct sqlConnection *hgConn, struct maGrouping *allA, 
+struct slDouble *getProbeData(struct sqlConnection *hgConn, struct maGrouping *allA, 
 		  char *dataTable, struct slName *probes)
 {
 struct slName *sl;
 struct dyString *dy = newDyString(100);
@@ -144,27 +144,35 @@
     }
 dyStringPrintf(dy, ");");
 char *query = dyStringCannibalize(&dy);
 
-fprintf(stderr, "query: %s\n", query);
 /* Get bed15 data from hg18 database */
 struct sqlResult *sr = sqlGetResult(hgConn, query);
 
 int count = 0;
 char **row = NULL;
+struct slDouble *sdList = NULL;
+
+int i = 1;
 while ((row = sqlNextRow(sr)) != NULL)
     {
     struct bed *nb = bedLoadN(row+1, 15);
   
 // nb->expCount
 // nb->expScores
     count += 1; 
 
+    if (i >= nb->expCount)
+	continue;
+
+    struct slDouble *sd = slDoubleNew(nb->expScores[i]);
+    slAddHead(&sdList, sd);
+
     bedFree(&nb);
     }
 sqlFreeResult(&sr);
 
-fprintf(stderr, "found %d probes\n", count);
+return sdList;
 }
 
 void extractData(char *tableName, char *sampleName, char *geneList)
 {
@@ -192,10 +200,33 @@
 
 struct hashCookie cookie = hashFirst(gaHash);
 while ((el = hashNext(&cookie)) != NULL)
     {
+    char *name = el->name;
     struct geneAlias *ga = el->val;    
-    getProbeData(hgConn, allA, tableName, ga->probes);
+    struct slDouble *sd, *sdList = getProbeData(hgConn, allA, tableName, ga->probes);
+
+    if (!sdList)
+	continue;
+
+    printf("%s\t", name);
+    if (median)
+	{
+	double val = slDoubleMedian(sdList);
+	printf("%f\n", val);
+	}
+    else
+	{
+	struct dyString *dy = newDyString(100);
+	for (sd = sdList; sd; sd = sd->next)
+	    {
+	    dyStringPrintf(dy, "%f", sd->val);
+	    if (sd->next)
+		dyStringPrintf(dy, ",");
+	    }
+	char *val = dyStringCannibalize(&dy);
+	printf("%s\n", val);
+	}
     }
 
 hFreeConn(&hgConn);
 }