834653e22227fcea282e12a48910bb73068b34df
angie
Mon Apr 29 15:33:06 2024 -0700
Don't depend on having a PSL alignment for the results table, precompute the same values whether aligning with gf/blat or nextclade.
diff --git src/hg/hgPhyloPlace/phyloPlace.c src/hg/hgPhyloPlace/phyloPlace.c
index b3c2da1..37c94d7 100644
--- src/hg/hgPhyloPlace/phyloPlace.c
+++ src/hg/hgPhyloPlace/phyloPlace.c
@@ -1992,57 +1992,49 @@
dyStringAppendSep(dy, ", ");
dyStringPrintf(dy, "%c%d%c", snc->refBase, snc->chromStart+1, snc->newBase);
alignedAmbigCount++;
}
}
if (isEmpty(dy->string))
dyStringAppend(dy, "(Masked or not aligned to reference)");
else if (alignedAmbigCount != si->ambigCount)
dyStringPrintf(dy, " (%d masked or not aligned to reference)",
si->ambigCount - alignedAmbigCount);
printTooltip(dy->string);
}
printf("");
if (isFasta)
{
- struct psl *psl = si->psl;
- if (psl)
- {
- int aliCount = psl->match + psl->misMatch + psl->repMatch;
- printf("
%d ", qcClassForLength(aliCount), aliCount);
+ printf(" | %d ", qcClassForLength(si->basesAligned), si->basesAligned);
dyStringClear(dy);
- dyStringPrintf(dy, "bases %d - %d align to reference bases %d - %d",
- psl->qStart+1, psl->qEnd, psl->tStart+1, psl->tEnd);
+ dyStringPrintf(dy, "aligned to reference bases %d - %d",
+ si->tStart+1, si->tEnd);
printTooltip(dy->string);
printf(" | %d ",
qcClassForIndel(si->insBases), si->insBases);
if (si->insBases)
{
printTooltip(si->insRanges);
}
printf(" | %d ",
qcClassForIndel(si->delBases), si->delBases);
if (si->delBases)
{
printTooltip(si->delRanges);
}
printf(" | ");
}
- else
- printf(" not alignable | ",
- qcClassForLength(0));
- }
int snvCount = slCount(si->sncList) - alignedAmbigCount;
printf("%d", qcClassForSNVs(snvCount), snvCount);
if (snvCount > 0)
{
dyStringClear(dy);
struct singleNucChange *snc;
for (snc = si->sncList; snc != NULL; snc = snc->next)
{
if (!isIupacAmbiguous(snc->newBase))
{
dyStringAppendSep(dy, ", ");
dyStringPrintf(dy, "%c%d%c", snc->refBase, snc->chromStart+1, snc->newBase);
}
}
printTooltip(dy->string);
@@ -2541,43 +2533,36 @@
{
if (bv != info->imputedBases)
fputc(',', f);
fprintf(f, "%d%s", bv->chromStart+1, bv->val);
}
fputc('\t', f);
// path through tree to sample
printVariantPathNoNodeNames(f, info->variantPath);
// number of equally parsimonious placements
fprintf(f, "\t%d", info->bestNodeCount);
// parsimony score
fprintf(f, "\t%d", info->parsimonyScore);
struct seqInfo *si = hashFindVal(seqInfoHash, sampleId);
if (si)
{
- if (si->psl)
- {
// length
fprintf(f, "\t%d", si->seq->size);
- struct psl *psl = si->psl;
// aligned bases, indel counts & ranges
- int aliCount = psl->match + psl->misMatch + psl->repMatch;
fprintf(f, "\t%d\t%d\t%s\t%d\t%s",
- aliCount, si->insBases, emptyForNull(si->insRanges),
+ si->basesAligned, si->insBases, emptyForNull(si->insRanges),
si->delBases, emptyForNull(si->delRanges));
- }
- else
- fprintf(f, "\tn/a\tn/a\tn/a\tn/a\tn/a\tn/a");
// SNVs that were masked (Problematic Sites track), not used in placement
fputc('\t', f);
struct singleNucChange *snc;
for (snc = si->maskedSncList; snc != NULL; snc = snc->next)
{
if (snc != si->maskedSncList)
fputc(',', f);
fprintf(f, "%c%d%c", snc->refBase, snc->chromStart+1, snc->newBase);
}
}
else
{
warn("writeOneTsvRow: no sequenceInfo for sample '%s'", sampleId);
fprintf(f, "\tn/a\tn/a\tn/a\tn/a\tn/a\tn/a\tn/a");
}
|