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("%c %d | ", qSeq[i], quals[i]);
}
printf("
\n");
}
}