229b9f6993152bab7202c2a32f461ecaa478e140 kate Mon Oct 1 16:28:22 2018 -0700 Rename merge mode to cluster mode. refs #21917 diff --git src/hg/hgc/interactClick.c src/hg/hgc/interactClick.c index 2dcbfca..0e688e7 100644 --- src/hg/hgc/interactClick.c +++ src/hg/hgc/interactClick.c @@ -9,33 +9,33 @@ #include "jksql.h" #include "hgc.h" #include "interact.h" #include "interactUi.h" struct interactPlusRow { /* Keep field values in string format, for url processing */ struct interactPlusRow *next; struct interact *interact; char **row; }; static struct interactPlusRow *getInteractsFromTable(struct trackDb *tdb, char *chrom, - int start, int end, char *name, char *mergeMode, char *foot) + int start, int end, char *name, char *clusterMode, char *foot) /* Retrieve interact items at this position from track table */ -// TODO: Support for mergeMode +// TODO: Support for clusterMode { struct sqlConnection *conn = NULL; struct customTrack *ct = lookupCt(tdb->track); char *table; if (ct != NULL) { conn = hAllocConn(CUSTOM_TRASH); table = ct->dbTableName; } else { conn = hAllocConnTrack(database, tdb); table = tdb->table; } if (conn == NULL) @@ -67,91 +67,91 @@ if (fieldCount == 0) fieldCount = sqlCountColumns(sr); AllocArray(fieldVals, fieldCount); int i; for (i = 0; i < fieldCount; i++) fieldVals[i] = cloneString(row[i]); ipr->row = fieldVals; slAddHead(&iprs, ipr); } sqlFreeResult(&sr); hFreeConn(&conn); return iprs; } static struct interactPlusRow *getInteractsFromFile(char *file, char *chrom, int start, int end, - char *name, char *mergeMode, char *foot) + char *name, char *clusterMode, char *foot) /* Retrieve interact items at this position or name from big file */ { struct bbiFile *bbi = bigBedFileOpen(file); struct lm *lm = lmInit(0); struct bigBedInterval *bb, *bbList = bigBedIntervalQuery(bbi, chrom, start, end, 0, lm); struct interactPlusRow *iprs = NULL; for (bb = bbList; bb != NULL; bb = bb->next) { char startBuf[16], endBuf[16]; int maxFields = 32; char *row[maxFields]; // big enough ? int fieldCount = bigBedIntervalToRow(bb, chrom, startBuf, endBuf, row, maxFields); struct interact *inter = interactLoadAndValidate(row); if (inter == NULL) continue; - if (!name) + if (!name || sameString(name, ".")) { if (inter->chromStart != start || inter->chromEnd != end) continue; } else { char *match = inter->name; - if (mergeMode) - match = sameString(mergeMode, INTERACT_MERGE_SOURCE) ? + if (clusterMode) + match = sameString(clusterMode, INTERACT_CLUSTER_SOURCE) ? inter->sourceName : inter->targetName; if (differentString(name, match)) continue; } // got one, save object and row representation struct interactPlusRow *ipr; AllocVar(ipr); ipr->interact = inter; char **fieldVals; AllocArray(fieldVals, fieldCount); int i; for (i = 0; i < fieldCount; i++) fieldVals[i] = cloneString(row[i]); ipr->row = fieldVals; slAddHead(&iprs, ipr); } return iprs; } static struct interactPlusRow *getInteractions(struct trackDb *tdb, char *chrom, int start, int end, char *name, char *foot) /* Retrieve interact items at this position or name. * Also any others with the same endpoint, if endpoint clicked on*/ { struct interactPlusRow *iprs = NULL; char *file = trackDbSetting(tdb, "bigDataUrl"); -char *mergeMode = interactUiMergeMode(cart, tdb->track, tdb); +char *clusterMode = interactUiClusterMode(cart, tdb->track, tdb); if (file != NULL) - iprs = getInteractsFromFile(file, chrom, start, end, name, mergeMode, foot); + iprs = getInteractsFromFile(file, chrom, start, end, name, clusterMode, foot); else - iprs = getInteractsFromTable(tdb, chrom, start, end, name, mergeMode, foot); + iprs = getInteractsFromTable(tdb, chrom, start, end, name, clusterMode, foot); -// TODO: add sort on score, or position for merged items ? +// TODO: add sort on score, or position for clustered items ? //slSort(&inters, bedCmpScore); //slReverse(&inters); return iprs; } void doInteractRegionDetails(struct trackDb *tdb, struct interact *inter) { /* print info for both regions */ /* Use different labels: 1) directional (source/target) 2) non-directional same chrom (lower/upper) 3) non-directional other chrom (this/other) */ char startBuf[1024], endBuf[1024], sizeBuf[1024]; printf("Interaction region: "); @@ -248,52 +248,52 @@ if (!isMultiple) doInteractRegionDetails(tdb, inter); } void doInteractDetails(struct trackDb *tdb, char *item) /* Details of interaction items */ { char *chrom = cartString(cart, "c"); int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); char *foot = cartOptionalString(cart, "foot"); struct interactPlusRow *iprs = getInteractions(tdb, chrom, start, end, item, foot); if (iprs == NULL) errAbort("Can't find interaction %s", item ? item : ""); int count = slCount(iprs); -char *mergeMode = interactUiMergeMode(cart, tdb->track, tdb); +char *clusterMode = interactUiClusterMode(cart, tdb->track, tdb); if (count > 1) { printf("Interactions: %d

", count); - if (mergeMode) + if (clusterMode) { char startBuf[1024], endBuf[1024], sizeBuf[1024]; sprintLongWithCommas(startBuf, start + 1); sprintLongWithCommas(endBuf, end); sprintLongWithCommas(sizeBuf, end - start); printf("%s interactions region:   " "%s:%s-%s ", item, chrom, start+1, end, chrom, startBuf, endBuf); printf("  %s bp
\n", sizeBuf); } else doInteractRegionDetails(tdb, iprs->interact); printf("

"); } genericHeader(tdb, item); static struct interactPlusRow *ipr = NULL; for (ipr = iprs; ipr != NULL; ipr = ipr->next) { if (count > 1) printf("
\n"); - if (mergeMode) + if (clusterMode) doInteractRegionDetails(tdb, ipr->interact); else doInteractItemDetails(tdb, ipr, item, count > 1); if (count > 1 && !isEmptyTextField(ipr->interact->name) && sameString(ipr->interact->name, item)) printf("
\n"); } -if (count > 1 && mergeMode) +if (count > 1 && clusterMode) printf("
\n"); }