src/hg/pslStats/pslStats.c 1.9

1.9 2009/10/30 21:08:18 markd
fixed bug computing mean query size
Index: src/hg/pslStats/pslStats.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/pslStats/pslStats.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -b -B -U 4 -r1.8 -r1.9
--- src/hg/pslStats/pslStats.c	2 May 2009 08:13:29 -0000	1.8
+++ src/hg/pslStats/pslStats.c	30 Oct 2009 21:08:18 -0000	1.9
@@ -206,9 +206,9 @@
 {
 if (ss->totalQSize == 0)
     return 0.0;
 else
-    return (float)(((double)ss->totalAlign)/((double)ss->totalQSize));
+    return (float)(((double)ss->totalAlign)/((double)(ss->alnCnt*ss->totalQSize)));
 }
 
 static float calcMeanRepMatch(struct sumStats *ss)
 /* calculate the mean repmatch for a set of alignments */
@@ -218,18 +218,18 @@
 else
     return (float)(((double)ss->totalRepMatch)/((double)ss->totalAlign));
 }
 
-static void sumStatsAccumulate(struct sumStats *ss, struct psl *psl)
-/* accumulate stats from psl into sumStats object */
+static void sumStatsAccumulateQuery(struct sumStats *ss, struct psl *psl)
+/* accumulate stats from psl into sumStats object; must be for same query */
 {
 float ident = calcIdent(psl);
 float qCover = calcQCover(psl);
 float tCover = calcTCover(psl);
 float repMatch = calcRepMatch(psl);
-ss->totalQSize += psl->qSize;
 if (ss->alnCnt == 0)
     {
+    ss->totalQSize = psl->qSize;
     ss->minQSize = ss->maxQSize = psl->qSize;
     ss->minIdent = ss->maxIndent = ident;
     ss->minQCover = ss->maxQCover = qCover;
     ss->minTCover = ss->maxTCover = tCover;
@@ -375,9 +375,9 @@
 
 while ((psl = pslNext(pslLf)) != NULL)
     {
     struct sumStats *ss = sumStatsGetForQuery(queryStatsTbl, psl->qName, psl->qSize);
-    sumStatsAccumulate(ss, psl);
+    sumStatsAccumulateQuery(ss, psl);
     pslFree(&psl);
     }
 lineFileClose(&pslLf);
 return queryStatsTbl;