bea3a22e1454e8fee62a026ffcec8c57af4005be markd Sat Jun 6 13:46:13 2026 -0700 added -tsv option blastToPsl and blastXmlToPsl to allow parsing scores with other programs diff --git src/hg/blastToPsl/pslBuild.c src/hg/blastToPsl/pslBuild.c index 2d7c2da001a..b1efa9cd6a3 100644 --- src/hg/blastToPsl/pslBuild.c +++ src/hg/blastToPsl/pslBuild.c @@ -258,35 +258,37 @@ // construct psl int pslSpace = 8; char strand[3]; safef(strand, sizeof(strand), "%c%c", qStrand, tStrand); struct psl *psl = pslNew(qName, blk.qCoordMult * qSize, blk.qCoordMult * qStart, blk.qCoordMult * qEnd, tName, blk.tCoordMult * tSize, blk.tCoordMult * tStart, blk.tCoordMult * tEnd, strand, pslSpace, ((flags & bldPslx) ? PSL_XA_FORMAT : 0)); // fill in psl hspToBlocks(psl, &pslSpace, &blk, flags); finishPsl(psl, flags); return psl; } -FILE *pslBuildScoresOpen(char *scoreFile, boolean inclDefs) +FILE *pslBuildScoresOpen(char *scoreFile, boolean inclDefs, boolean isTsv) /* open score file and write headers */ { +char *header = "#strand\tqName\tqStart\tqEnd\ttName\ttStart\ttEnd\tbitScore\teVal"; FILE *fh = mustOpen(scoreFile, "w"); -fputs("#strand\tqName\tqStart\tqEnd\ttName\ttStart\ttEnd\tbitScore\teVal", fh); +// skip # for real TSV +fputs(header + (isTsv ? 1 : 0) , fh); if (inclDefs) fputs("\tqDef\ttDef", fh); fputc('\n', fh); return fh; } static void writeBasicScores(FILE* scoreFh, struct psl *psl, double bitScore, double eValue) /* write first part of row */ { fprintf(scoreFh, "%s\t%s\t%d\t%d\t%s\t%d\t%d\t%g\t%g", psl->strand, psl->qName, psl->qStart, psl->qEnd, psl->tName, psl->tStart, psl->tEnd, bitScore, eValue); } void pslBuildScoresWrite(FILE* scoreFh, struct psl *psl, double bitScore, double eValue)