5add048a3ba033e17e6c0f5643e9985ef8a15f44 max Thu Jun 13 02:59:16 2024 -0700 adding legend under cigar display on bam hgc page, refs #33292 diff --git src/hg/hgc/bamClick.c src/hg/hgc/bamClick.c index 2d3c9b8..f80a35f 100644 --- src/hg/hgc/bamClick.c +++ src/hg/hgc/bamClick.c @@ -72,71 +72,77 @@ /* Print out the properties of this alignment. */ { const bam1_core_t *core = &bam->core; char *itemName = bam1_qname(bam); int tLength = bamGetTargetLength(bam); int tStart = core->pos, tEnd = tStart+tLength; boolean isRc = useStrand && bamIsRc(bam); printPosOnChrom(seqName, tStart, tEnd, NULL, FALSE, itemName); if (!skipQualityScore) printf("Alignment Quality: %d
\n", core->qual); if (core->n_cigar > 50) printf("CIGAR string: Cannot show long CIGAR string, more than 50 operations. Contact us if you need to see the full CIGAR string here.
\n"); else { printf("CIGAR string: %s", bamGetCigar(bam)); - //bamShowCigarEnglish(bam); printf("
\n"); + //bamShowCigarEnglish(bam); + printf("

CIGAR Legend:
" + "M : alignment match (seq. match or mismatch), I : insert from genome, D : deletion from genome, " + "N : skipped from genome,
" + "S : soft clipping, H : hard clipping, P : padding, " + "= : sequence match, X : sequence mismatch\n"); + printf("

\n"); } int clippedBases[4]; getClippedBases(bam, clippedBases); printf("Start clipping: hard: %d soft: %d
\n", clippedBases[0], clippedBases[1]); printf("End clipping: hard: %d soft: %d
\n", clippedBases[3], clippedBases[2]); printf("Tags:"); bamShowTags(bam); puts("
"); printf("Flags: 0x%02x:
\n   ", core->flag); bamShowFlagsEnglish(bam); puts("
"); if (bamIsRc(bam)) printf("Note: although the read was mapped to the reverse strand of the genome, " "the sequence and CIGAR in BAM are relative to the forward strand.
\n"); puts("
"); struct dnaSeq *genoSeq = hChromSeq(database, seqName, tStart, tEnd); char *qSeq = bamGetQuerySequence(bam, FALSE); if (core->l_qseq > 5000) - printf("Alignment not shown, very long sequence
\n"); + printf("Alignment not shown, query sequence is %d bp long > 5000bp
\n", core->l_qseq); else { if (isNotEmpty(qSeq) && !sameString(qSeq, "*")) { char *qSeq = NULL; struct ffAli *ffa = bamToFfAli(bam, genoSeq, tStart, useStrand, &qSeq); printf("Alignment of %s to %s:%d-%d%s:
\n", itemName, seqName, tStart+1, tEnd, (isRc ? " (reverse complemented)" : "")); ffShowSideBySide(stdout, ffa, qSeq, 0, genoSeq->dna, tStart, tLength, 0, tLength, 8, isRc, FALSE); } } if (!skipQualityScore && core->l_qseq > 0) { if (core->l_qseq > 5000) { - printf("Sequence too long to show quality scores
\n"); + printf("Sequence quality not shown, query sequence %d bp long > 5000bp
\n", core->l_qseq); } else { printf("Sequence quality scores:
\n\n"); UBYTE *quals = bamGetQueryQuals(bam, useStrand); int i; for (i = 0; i < core->l_qseq; i++) { if (i > 0 && (i % 24) == 0) printf("\n"); printf("", qSeq[i], quals[i]); } printf("
%c
%d
\n"); } }