1279043d2cb8d519a1ef0a7d1b80f6ab721d4b1f markd Sun Nov 14 15:10:36 2021 -0800 make TSV header work on other output files diff --git src/hg/pslStats/pslStats.c src/hg/pslStats/pslStats.c index 2032f52..c5ed7b8 100644 --- src/hg/pslStats/pslStats.c +++ src/hg/pslStats/pslStats.c @@ -348,53 +348,55 @@ fprintf(fh, alnStatsFmt, psl->qName, psl->qSize, psl->tName, psl->tStart, psl->tEnd, calcIdent(psl), calcQCover(psl), calcRepMatch(psl), calcTCover(psl)); if (querySizesTbl != NULL) querySizeCntGet(querySizesTbl, psl->qName, psl->qSize)->alnCnt++; pslFree(&psl); } lineFileClose(&pslLf); if (querySizesTbl != NULL) alignStatsOutputUnaligned(fh, querySizesTbl); carefulClose(&fh); } /* header for query statistics */ -static char *queryStatsHdr = "#qName\t" "qSize\t" "alnCnt\t" "minIdent\t" "maxIdent\t" "meanIdent\t" +static char *queryStatsHdr = "qName\t" "qSize\t" "alnCnt\t" "minIdent\t" "maxIdent\t" "meanIdent\t" "minQCover\t" "maxQCover\t" "meanQCover\t" "minRepMatch\t" "maxRepMatch\t" "meanRepMatch\t" "minTCover\t" "maxTCover\n"; static void queryStatsOutput(FILE *fh, struct sumStats *qs) /* output statistic on a query */ { fprintf(fh, "%s\t%d\t%d\t" "%0.4f\t%0.4f\t%0.4f\t" "%0.4f\t%0.4f\t%0.4f\t" "%0.4f\t%0.4f\t%0.4f\t" "%0.4f\t%0.4f\n", qs->qName, qs->minQSize, qs->alnCnt, qs->minIdent, qs->maxIdent, calcMeanIdent(qs), qs->minQCover, qs->maxQCover, calcMeanQCover(qs), qs->minRepMatch, qs->maxRepMatch, calcMeanRepMatch(qs), qs->minTCover, qs->maxTCover); } static void outputQueryStats(struct hash *queryStatsTbl, char *statsFile) /* output statistics on queries */ { struct hashCookie cookie = hashFirst(queryStatsTbl); FILE *fh = mustOpen(statsFile, "w"); struct hashEl *hel; +if (!tsvHeader) + fputc('#', fh); fputs(queryStatsHdr, fh); while ((hel = hashNext(&cookie)) != NULL) queryStatsOutput(fh, hel->val); carefulClose(&fh); } static struct hash *collectQueryStats(char *pslFile, char *querySizeFile) /* collect per-query statistics */ { struct hash *queryStatsTbl = (querySizeFile != NULL) ? sumStatsLoad(querySizeFile) : hashNew(queryHashPowTwo); struct lineFile *pslLf = pslFileOpen(pslFile); @@ -406,39 +408,41 @@ sumStatsAccumulateQuery(ss, psl); pslFree(&psl); } lineFileClose(&pslLf); return queryStatsTbl; } static void pslQueryStats(char *pslFile, char *statsFile, char *querySizeFile) /* collect and output per-query stats */ { struct hash *queryStatsTbl = collectQueryStats(pslFile, querySizeFile); outputQueryStats(queryStatsTbl, statsFile); } /* header for overall statistics */ -static char *overallStatsHdr = "#queryCnt\t" "minQSize\t" "maxQSize\t" "meanQSize\t" +static char *overallStatsHdr = "queryCnt\t" "minQSize\t" "maxQSize\t" "meanQSize\t" "alnCnt\t" "minIdent\t" "maxIdent\t" "meanIdent\t" "minQCover\t" "maxQCover\t" "meanQCover\t" "minRepMatch\t" "maxRepMatch\t" "meanRepMatch\t" "minTCover\t" "maxTCover\t" "aligned\t" "aligned1\t" "alignedN\t" "totalAlignedSize\n"; static void outputOverallStats(char *statsFile, struct sumStats *os, int aligned1, int alignedN) /* output overall statistic */ { FILE *fh = mustOpen(statsFile, "w"); +if (!tsvHeader) + fputc('#', fh); fputs(overallStatsHdr, fh); fprintf(fh, "%d\t%d\t%d\t%d\t%d\t" "%0.4f\t%0.4f\t%0.4f\t" "%0.4f\t%0.4f\t%0.4f\t" "%0.4f\t%0.4f\t%0.4f\t" "%0.4f\t%0.4f\t" "%d\t%d\t%d\t%lld\n", os->queryCnt, os->minQSize, os->maxQSize, calcMeanQSize(os), os->alnCnt, os->minIdent, os->maxIdent, calcMeanIdent(os), os->minQCover, os->maxQCover, calcMeanQCover(os), os->minRepMatch, os->maxRepMatch, calcMeanRepMatch(os), os->minTCover, os->maxTCover, aligned1+alignedN, aligned1, alignedN, os->totalAlign); carefulClose(&fh); } static struct sumStats sumOverAllStats(struct hash *queryStatsTbl, int *aligned1, int *alignedN)