src/hg/instinct/hgPathways/hgCircleMaps.c 1.15
1.15 2009/09/15 00:08:14 sbenz
Fixed gene sorting in cgi, need to add to interface
Index: src/hg/instinct/hgPathways/hgCircleMaps.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/hgPathways/hgCircleMaps.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -b -B -U 4 -r1.14 -r1.15
--- src/hg/instinct/hgPathways/hgCircleMaps.c 18 Aug 2009 20:57:31 -0000 1.14
+++ src/hg/instinct/hgPathways/hgCircleMaps.c 15 Sep 2009 00:08:14 -0000 1.15
@@ -1090,15 +1089,72 @@
struct sqlConnection *conn = hAllocConnProfile(heatMapDbProfile, database);
if (!conn)
errAbort("Couldn't connect to database");
+char *sortGene = cartOptionalString(cart, hgh2SortGene);
+
struct slName *sl, *slList = slNameListFromComma(datasets);
for (sl = slList; sl; sl = sl->next)
{
char query[1024];
struct sqlResult *sr = NULL;
char **row = NULL;
+ if(sl == slList && !sameString(sortGene,"")) // first time
+ {
+ struct ring *sortRg = addRingToCircleMap(cm, sortGene, sl->name, FALSE);
+ if (!sortRg->data)
+ sortRg->data = hashNew(0);
+ if(sameStringN(sl->name,"factorGraph_",12) || sameStringN(sl->name,"fg_",3) )
+ {
+ safef(query, sizeof(query), "select DISTINCT samples.name,val from %s data inner join entities_ncipid on entities_ncipid.entity_id = data.feature_id left join samples on samples.id = data.sample_id where data.pathway_id = \"%s\" AND entities_ncipid.entity_name LIKE(\"%s\") ORDER BY samples.id",
+ sl->name,pathwayID,sortGene);
+ }
+ else
+ {
+ safef(query, sizeof(query), "select DISTINCT samples.name,val from %s data inner join analysisFeatures on analysisFeatures.id = data.feature_id left join samples on samples.id = data.sample_id where analysisFeatures.feature_name LIKE(\"%s\") ORDER BY samples.id",
+ sl->name,sortGene);
+ }
+ sr = sqlGetResult(conn, query);
+ struct slDouble *ad, *allData = NULL;
+ while ((row = sqlNextRow(sr)) != NULL)
+ {
+ if(!slNameInList(validSamples,row[0]))
+ continue;
+
+ double val = strtod(row[1],NULL);
+ struct slDouble *sd, *sdList = NULL;
+
+ if (val > sortRg->maxVal)
+ sortRg->maxVal = val;
+
+ /* Store copy of all data in list to determine median value */
+ ad = slDoubleNew(val);
+ slAddHead(&allData, ad);
+
+ sd = slDoubleNew(val);
+ slAddHead(&sdList, sd);
+
+ if (slNameInList(cm->samples, row[0]))
+ continue;
+ slNameAddHead(&cm->samples, row[0]);
+ hashAdd(sortRg->data, row[0], sdList);
+ sortRg->numSamples += 1;
+ //printf("%s %s",row[0],row[1]);
+ }
+ if(sortRg->numSamples > 0)
+ sortRg->median = slDoubleMedian(allData);
+ else
+ sortRg->median = 0;
+ //printf("%d\n",rg->numSamples);
+ sortRg->numElements = 1; // number of probes matching 'gene'
+ slFreeList(&allData);
+ slReverse(&cm->samples);
+ sqlFreeResult(&sr);
+
+ }
+
+
struct ring *rg = addRingToCircleMap(cm, gene, sl->name, TRUE);
if (!rg->data)
rg->data = hashNew(0);
@@ -1114,8 +1170,9 @@
sl->name,gene);
}
//errAbort(query);
//printf("%s",query);
+ slReverse(&cm->samples);
sr = sqlGetResult(conn, query);
struct slDouble *ad, *allData = NULL;
while ((row = sqlNextRow(sr)) != NULL)
{
@@ -1134,13 +1191,13 @@
sd = slDoubleNew(val);
slAddHead(&sdList, sd);
- if (slNameInList(cm->samples, row[0]))
- continue;
+ if (!slNameInList(cm->samples, row[0]))
slNameAddHead(&cm->samples, row[0]);
- hashAdd(rg->data, row[0], sdList);
+
rg->numSamples += 1;
+ hashAdd(rg->data, row[0], sdList);
//printf("%s %s",row[0],row[1]);
}
if(rg->numSamples > 0)
rg->median = slDoubleMedian(allData);