3b51318fe05fce338719b56a70d44f1436ff5311 kate Tue Dec 5 12:37:26 2017 -0800 Fix problems with computing centers and position starts (esp. noticeable for SNPs). Also some cleanup. refs #17512 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 3442af4..165fe18 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -4035,81 +4035,87 @@ int ii = 0; for(longRange = longRangeList; longRange; longRange = longRange->next, ii++) { if (longRange->id == itemNum) { ourLongRange = longRange; } doubleArray[ii] = longRange->score; } if (ourLongRange == NULL) errAbort("cannot find long range item with id %d\n", itemNum); printf("Item you clicked on:
\n"); +printf("    ID: %u
\n", ourLongRange->id); if (!ourLongRange->hasColor) // if there's color, then there's no score in this format - printf("Score: %g
\n", ourLongRange->score); -printf("ID: %u
\n", ourLongRange->id); + printf("   Score: %g
\n", ourLongRange->score); + unsigned padding = (ourLongRange->e - ourLongRange->s) / 10; int s = ourLongRange->s - padding; int e = ourLongRange->e + padding; if (s < 0 ) s = 0; int chromSize = hChromSize(database, seqName); if (e > chromSize) e = chromSize; -char num1Buf[1024],num2Buf[1024]; -char num3Buf[1024],num4Buf[1024]; -char num5Buf[1024],num6Buf[1024]; -char num7Buf[1024]; -sprintLongWithCommas(num1Buf, ourLongRange->s - ourLongRange->sw/2); -sprintLongWithCommas(num2Buf, ourLongRange->s + ourLongRange->sw/2); -sprintLongWithCommas(num3Buf, ourLongRange->e - ourLongRange->ew/2); -sprintLongWithCommas(num4Buf, ourLongRange->e + ourLongRange->ew/2); -sprintLongWithCommas(num5Buf, ourLongRange->sw); -sprintLongWithCommas(num6Buf, ourLongRange->ew); -sprintLongWithCommas(num7Buf, ourLongRange->ew + ourLongRange->e - ourLongRange->s); +char sStartPosBuf[1024], sEndPosBuf[1024]; +char eStartPosBuf[1024], eEndPosBuf[1024]; +// FIXME: longRange should store region starts, not centers +sprintLongWithCommas(sStartPosBuf, ourLongRange->s - ourLongRange->sw/2 + 1); +sprintLongWithCommas(sEndPosBuf, ourLongRange->s + ourLongRange->sw/2 + 1); +sprintLongWithCommas(eStartPosBuf, ourLongRange->e - ourLongRange->ew/2 + 1); +sprintLongWithCommas(eEndPosBuf, ourLongRange->e + ourLongRange->ew/2 + 1); +char sWidthBuf[1024], eWidthBuf[1024]; +char regionWidthBuf[1024]; +sprintLongWithCommas(sWidthBuf, ourLongRange->sw); +sprintLongWithCommas(eWidthBuf, ourLongRange->ew); +sprintLongWithCommas(regionWidthBuf, ourLongRange->ew + ourLongRange->e - ourLongRange->s); + if (differentString(ourLongRange->sChrom, ourLongRange->eChrom)) { printf("Current region: "); printf("%s:%s-%s (%s bp)
\n", - ourLongRange->sChrom, num1Buf,num2Buf,ourLongRange->sChrom, num1Buf,num2Buf, num5Buf); + ourLongRange->sChrom, sStartPosBuf, sEndPosBuf, + ourLongRange->sChrom, sStartPosBuf,sEndPosBuf, sWidthBuf); printf("Paired region: "); printf("%s:%s-%s (%s bp)

\n", - ourLongRange->eChrom, num3Buf, num4Buf, ourLongRange->eChrom, num3Buf, num4Buf, num6Buf); + ourLongRange->eChrom, eStartPosBuf, eEndPosBuf, + ourLongRange->eChrom, eStartPosBuf, eEndPosBuf, eWidthBuf); } else { printf("Lower region: "); printf("%s:%s-%s (%s bp)
\n", - ourLongRange->sChrom, num1Buf,num2Buf, ourLongRange->sChrom, num1Buf,num2Buf, num5Buf); + ourLongRange->sChrom, sStartPosBuf,sEndPosBuf, + ourLongRange->sChrom, sStartPosBuf,sEndPosBuf, sWidthBuf); printf("Upper region: "); printf("%s:%s-%s (%s bp)

\n", - ourLongRange->eChrom, num3Buf, num4Buf, ourLongRange->eChrom, num3Buf, num4Buf, num6Buf); - printf("Intrachromasomal interaction region: "); + ourLongRange->eChrom, eStartPosBuf, eEndPosBuf, + ourLongRange->eChrom, eStartPosBuf, eEndPosBuf, eWidthBuf); + printf("Interaction region: "); printf("%s:%s-%s (%s bp)

\n", - ourLongRange->eChrom, num1Buf, num4Buf, ourLongRange->eChrom, num1Buf, num4Buf, num7Buf); + ourLongRange->eChrom, sStartPosBuf, eEndPosBuf, + ourLongRange->eChrom, sStartPosBuf, eEndPosBuf, regionWidthBuf); } - if (ourLongRange->hasColor) return; struct aveStats *as = aveStatsCalc(doubleArray, count); - printf("
Statistics on the scores of all items in window (go to track controls to set minimum score to display):\n"); printf("\n"); printf("\n", as->q1); printf("\n", as->median); printf("\n", as->q3); printf("\n", as->average); printf("\n", as->minVal); printf("\n", as->maxVal); printf("\n", as->count); printf("\n", as->total); printf("\n", as->stdDev); printf("
Q1%f
median%f
Q3%f
average%f
min%f
max%f
count%d
total%f
standard deviation%f
\n"); }