06be007e1b8b1724b61efcf0535089db5abb10da kate Wed Aug 29 15:00:46 2018 -0700 Refactor in preparation for flipped display. refs #21917 diff --git src/hg/hgc/interactClick.c src/hg/hgc/interactClick.c index 7f88357..01dd2ac 100644 --- src/hg/hgc/interactClick.c +++ src/hg/hgc/interactClick.c @@ -1,29 +1,29 @@ /* Details page for interact type tracks */ /* Copyright (C) 2018 The Regents of the University of California * See README in this or parent directory for licensing information. */ #include "common.h" #include "obscure.h" #include "hdb.h" #include "hgc.h" #include "interact.h" #include "interactUi.h" -static struct interact *getInteractFromTable(struct trackDb *tdb, char *chrom, int start, int end, +static struct interact *getInteractsFromTable(struct trackDb *tdb, char *chrom, int start, int end, char *foot) /* Retrieve interact items at this position from track table */ { 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; @@ -35,61 +35,63 @@ char **row; int offset; struct sqlResult *sr = hRangeQuery(conn, table, chrom, start, end, NULL, &offset); while ((row = sqlNextRow(sr)) != NULL) { inter = interactLoadAndValidate(row+offset); if (inter->chromStart != start || inter->chromEnd != end) continue; slAddHead(&inters, inter); } sqlFreeResult(&sr); hFreeConn(&conn); return inters; } -static struct interact *getInteractFromFile(char *file, char *chrom, int start, int end, char *foot) +static struct interact *getInteractsFromFile(char *file, char *chrom, int start, int end, + char *foot) /* Retrieve interact items at this position 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 interact *inters = NULL, *inter = NULL; for (bb = bbList; bb != NULL; bb = bb->next) { char startBuf[16], endBuf[16]; char *row[32]; bigBedIntervalToRow(bb, chrom, startBuf, endBuf, row, ArraySize(row)); inter = interactLoadAndValidate(row); if (inter == NULL) continue; if (inter->chromStart != start || inter->chromEnd != end) continue; slAddHead(&inters, inter); } return inters; } -static struct interact *getInteractions(struct trackDb *tdb, char *chrom, int start, int end, char *foot) +static struct interact *getInteractions(struct trackDb *tdb, char *chrom, int start, int end, + char *foot) /* Retrieve interact items at this position. Also any others with the same endpoint, if endpoint clicked on*/ { struct interact *inters = NULL; char *file = trackDbSetting(tdb, "bigDataUrl"); if (file != NULL) - inters = getInteractFromFile(file, chrom, start, end, foot); + inters = getInteractsFromFile(file, chrom, start, end, foot); else - inters = getInteractFromTable(tdb, chrom, start, end, foot); + inters = getInteractsFromTable(tdb, chrom, start, end, foot); slSort(&inters, bedCmpScore); slReverse(&inters); return inters; } 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: ");