d6ca123aefad1ef858ed599214d6fc32496cc348 kate Wed Aug 21 09:33:04 2013 -0700 Special handling of antibody target ('factor') CV links. As a single factor may have multiple antibodies, show all for the factor. Response to QA question 6, note 52. refs #100097 diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c index b2aa75f..9eb22e5 100644 --- src/hg/hgc/peakClusters.c +++ src/hg/hgc/peakClusters.c @@ -194,30 +194,39 @@ char **row; while ((row = sqlNextRow(sr)) != NULL) { printf("\n"); webPrintIntCell(++displayNo); printControlledVocabFields(row+1, fieldCount, fieldList, vocabFile, vocabHash); printMetadataForTable(row[0]); } sqlFreeResult(&sr); freez(&vocabFile); dyStringFree(&query); } +static char *factorSourceVocabLink(char *vocabFile, char *fieldName, char *fieldVal) +/* Add link to show controlled vocabulary entry for term. + * Handles 'target' (factor) which is a special case, derived from Antibody entries */ +{ +char *vocabType = (sameString(fieldName, "target") || sameString(fieldName, "factor")) ? + "target" : "term"; +return controlledVocabLink(vocabFile, vocabType, fieldVal, fieldVal, fieldVal, ""); +} + static void printFactorSourceTableHits(struct factorSource *cluster, struct sqlConnection *conn, char *sourceTable, char *inputTrackTable, struct slName *fieldList, boolean invert, char *vocab) /* Put out a lines in an html table that shows assayed sources that have hits in this * cluster, or if invert is set, that have misses. */ { char *vocabFile = NULL; if (vocab) { vocabFile = cloneFirstWord(vocab); } /* Make the monster SQL query to get all assays*/ struct dyString *query = dyStringNew(0); sqlDyStringPrintf(query, "select %s.id,%s.name,%s.tableName", sourceTable, sourceTable, @@ -243,38 +252,40 @@ { if (cluster->expNums[i] == sourceId) { hit = TRUE; signal = cluster->expScores[i]; break; } } if (hit ^ invert) { printf("\n"); webPrintIntCell(++displayNo); if (!invert) webPrintDoubleCell(signal); webPrintLinkCell(row[1]); - int i; - for (i=0; inext) { - char *fieldVal = row[i+3]; + char *fieldVal = row[i+offset]; if (vocab) { - char *link = controlledVocabLink(vocabFile, "term", - fieldVal, fieldVal, fieldVal, ""); + char *link = cloneString(factorSourceVocabLink(vocabFile, field->name, fieldVal)); webPrintLinkCell(link); } else webPrintLinkCell(fieldVal); } printMetadataForTable(row[2]); } } sqlFreeResult(&sr); freez(&vocabFile); dyStringFree(&query); } void doPeakClusterListItemsAssayed() /* Put up a page that shows all experiments associated with a cluster track. */