char readBase= Character.toUpperCase((char)recOff.getReadBase());
@Override public void addInfo(final AbstractLocusInfo<SamLocusIterator.RecordAndOffset> info, final ReferenceSequence ref, boolean referenceBaseN) { if (referenceBaseN) { return; } // Figure out the coverage while not counting overlapping reads twice, and excluding various things final HashSet<String> readNames = new HashSet<>(info.getRecordAndOffsets().size()); int pileupSize = 0; int unfilteredDepth = 0; for (final SamLocusIterator.RecordAndOffset recs : info.getRecordAndOffsets()) { if (recs.getBaseQuality() <= 2) { ++basesExcludedByBaseq; continue; } // we add to the base quality histogram any bases that have quality > 2 // the raw depth may exceed the coverageCap before the high-quality depth does. So stop counting once we reach the coverage cap. if (unfilteredDepth < coverageCap) { unfilteredBaseQHistogramArray[recs.getRecord().getBaseQualities()[recs.getOffset()]]++; unfilteredDepth++; } if (recs.getBaseQuality() < collectWgsMetrics.MINIMUM_BASE_QUALITY || SequenceUtil.isNoCall(recs.getReadBase())) { ++basesExcludedByBaseq; continue; } if (!readNames.add(recs.getRecord().getReadName())) { ++basesExcludedByOverlap; continue; } pileupSize++; } final int highQualityDepth = Math.min(pileupSize, coverageCap); if (highQualityDepth < pileupSize) basesExcludedByCapping += pileupSize - coverageCap; highQualityDepthHistogramArray[highQualityDepth]++; unfilteredDepthHistogramArray[unfilteredDepth]++; } }
@Override public void addInfo(final AbstractLocusInfo<SamLocusIterator.RecordAndOffset> info, final ReferenceSequence ref, boolean referenceBaseN) { if (referenceBaseN) { return; } // Figure out the coverage while not counting overlapping reads twice, and excluding various things final HashSet<String> readNames = new HashSet<>(info.getRecordAndOffsets().size()); int pileupSize = 0; int unfilteredDepth = 0; for (final SamLocusIterator.RecordAndOffset recs : info.getRecordAndOffsets()) { if (recs.getBaseQuality() <= 2) { ++basesExcludedByBaseq; continue; } // we add to the base quality histogram any bases that have quality > 2 // the raw depth may exceed the coverageCap before the high-quality depth does. So stop counting once we reach the coverage cap. if (unfilteredDepth < coverageCap) { unfilteredBaseQHistogramArray[recs.getRecord().getBaseQualities()[recs.getOffset()]]++; unfilteredDepth++; } if (recs.getBaseQuality() < collectWgsMetrics.MINIMUM_BASE_QUALITY || SequenceUtil.isNoCall(recs.getReadBase())) { ++basesExcludedByBaseq; continue; } if (!readNames.add(recs.getRecord().getReadName())) { ++basesExcludedByOverlap; continue; } pileupSize++; } final int highQualityDepth = Math.min(pileupSize, coverageCap); if (highQualityDepth < pileupSize) basesExcludedByCapping += pileupSize - coverageCap; highQualityDepthHistogramArray[highQualityDepth]++; unfilteredDepthHistogramArray[unfilteredDepth]++; } }
if (!usedReadNames.contains(readName)) { final HaplotypeProbabilitiesFromSequence probs = (HaplotypeProbabilitiesFromSequence) fingerprintsByReadGroup.get(details).get(haplotypeBlock); final byte base = StringUtil.toUpperCase(rec.getReadBase()); final byte qual = rec.getBaseQuality();
final HaplotypeProbabilitiesFromContaminatorSequence probs = (HaplotypeProbabilitiesFromContaminatorSequence) fingerprintsBySample.get(rg.getSample()).get(haplotypeBlock); final byte base = StringUtil.toUpperCase(rec.getReadBase()); final byte qual = rec.getBaseQuality();
char rb= Character.toUpperCase((char)recOff.getReadBase());
final HaplotypeProbabilitiesFromContaminatorSequence probs = (HaplotypeProbabilitiesFromContaminatorSequence) fingerprintsBySample.get(rg.getSample()).get(haplotypeBlock); final byte base = StringUtil.toUpperCase(rec.getReadBase()); final byte qual = rec.getBaseQuality();
if (!usedReadNames.contains(readName)) { final HaplotypeProbabilitiesFromSequence probs = (HaplotypeProbabilitiesFromSequence) fingerprintsByReadGroup.get(details).get(haplotypeBlock); final byte base = StringUtil.toUpperCase(rec.getReadBase()); final byte qual = rec.getBaseQuality();
final byte base = rec.getReadBase(); final byte baseAsRead = samrec.getReadNegativeStrandFlag() ? SequenceUtil.complement(base) : base; final int read = samrec.getReadPairedFlag() && samrec.getSecondOfPairFlag() ? 2 : 1;
public void addBase(final SamLocusIterator.RecordAndOffset recordAndOffset, final SamLocusAndReferenceIterator.SAMLocusAndReference locusAndRef) { super.addBase(recordAndOffset, locusAndRef); final byte readBase = recordAndOffset.getReadBase(); final SAMRecord record = recordAndOffset.getRecord(); final byte mateBase = mate.getReadBase(); if (SequenceUtil.isNoCall(readBase)) return; if (SequenceUtil.isNoCall(mateBase)) return;
public void addBase(final SamLocusIterator.RecordAndOffset recordAndOffset, final SamLocusAndReferenceIterator.SAMLocusAndReference locusAndRef) { super.addBase(recordAndOffset, locusAndRef); final byte readBase = recordAndOffset.getReadBase(); final SAMRecord record = recordAndOffset.getRecord(); final byte mateBase = mate.getReadBase(); if (SequenceUtil.isNoCall(readBase)) return; if (SequenceUtil.isNoCall(mateBase)) return;
final byte base = rec.getReadBase(); final byte baseAsRead = samrec.getReadNegativeStrandFlag() ? SequenceUtil.complement(base) : base; final int read = samrec.getReadPairedFlag() && samrec.getSecondOfPairFlag() ? 2 : 1;
@Test public void testSamLocusAndReferenceIterator() { final File reference = new File(TEST_DATA_DIR, "Homo_sapiens_assembly18.trimmed.fasta"); final File samFile = new File(TEST_DATA_DIR, "simpleSmallFile.sam"); final ReferenceSequenceFile referenceSequenceFile = new FastaSequenceFile(reference, false); final ReferenceSequenceFileWalker referenceSequenceFileWalker = new ReferenceSequenceFileWalker(referenceSequenceFile); final SamReader samReader = SamReaderFactory.makeDefault().open(samFile); final SamLocusIterator samLocusIterator = new SamLocusIterator(samReader); final SamLocusAndReferenceIterator samLocusAndReferences = new SamLocusAndReferenceIterator(referenceSequenceFileWalker, samLocusIterator); IntervalList intervalList = new IntervalList(samReader.getFileHeader()); intervalList.add(new Interval("chrM", 1, 36)); intervalList.add(new Interval("chr20", 8401, 8460)); OverlapDetector<Interval> overlapDetector = new OverlapDetector<>(0, 0); overlapDetector.addAll(intervalList.getIntervals(), intervalList.getIntervals()); for (final SamLocusAndReferenceIterator.SAMLocusAndReference samLocusAndReference : samLocusAndReferences) { // The sam file only has coverage in the intervals that are within 'intervalList', and there the coverage should // be exactly 2 since there are two overlapping, paired reads. This is what this test is testing: Assert.assertEquals(samLocusAndReference.getRecordAndOffsets().size(), overlapDetector.overlapsAny(samLocusAndReference.getLocus()) ? 2 : 0, "Position:" + samLocusAndReference.getLocus().toString()); // all the reads are equal to the reference...this is what this test is testing. for (final SamLocusIterator.RecordAndOffset recordAndOffset : samLocusAndReference.getRecordAndOffsets()) Assert.assertTrue(SequenceUtil.basesEqual(samLocusAndReference.getReferenceBase(), recordAndOffset.getReadBase()), "Record: " + recordAndOffset.getRecord() + " Position:" + samLocusAndReference.getLocus().toString()); } }
@Override public Integer stratify(final RecordAndOffset recordAndOffset, final SAMLocusAndReference locusInfo) { Integer numberMismatches = recordAndOffset.getRecord().getIntegerAttribute(SAMTag.NM.name()); // Record may not contain an NM tag in which case we cannot stratify over it. if (numberMismatches == null) { return null; } // We are only interested in the number of errors on the read // not including the current base. if (recordAndOffset.getReadBase() != locusInfo.getReferenceBase()) { return numberMismatches - 1; } return numberMismatches; }
@Override public Integer stratify(final RecordAndOffset recordAndOffset, final SAMLocusAndReference locusInfo) { Integer numberMismatches = recordAndOffset.getRecord().getIntegerAttribute(SAMTag.NM.name()); // Record may not contain an NM tag in which case we cannot stratify over it. if (numberMismatches == null) { return null; } // We are only interested in the number of errors on the read // not including the current base. if (recordAndOffset.getReadBase() != locusInfo.getReferenceBase()) { return numberMismatches - 1; } return numberMismatches; }
/** * The function by which new loci are "shown" to the calculator **/ @Override public void addBase(final SamLocusIterator.RecordAndOffset recordAndOffset, final SamLocusAndReferenceIterator.SAMLocusAndReference locusAndRef) { super.addBase(recordAndOffset, locusAndRef); final byte readBase = recordAndOffset.getReadBase(); if (!SequenceUtil.isNoCall(readBase) && (readBase != locusAndRef.getReferenceBase())) { nMismatchingBases++; } }
/** * the function by which new loci are "shown" to the calculator **/ @Override public void addBase(final SamLocusIterator.RecordAndOffset recordAndOffset, final SamLocusAndReferenceIterator.SAMLocusAndReference locusAndRef) { if (!SequenceUtil.isNoCall(recordAndOffset.getReadBase())) { nBases++; } } }
/** * The function by which new loci are "shown" to the calculator **/ @Override public void addBase(final SamLocusIterator.RecordAndOffset recordAndOffset, final SamLocusAndReferenceIterator.SAMLocusAndReference locusAndRef) { super.addBase(recordAndOffset, locusAndRef); final byte readBase = recordAndOffset.getReadBase(); if (!SequenceUtil.isNoCall(readBase) && (readBase != locusAndRef.getReferenceBase())) { nMismatchingBases++; } }
/** * the function by which new loci are "shown" to the calculator **/ @Override public void addBase(final SamLocusIterator.RecordAndOffset recordAndOffset, final SamLocusAndReferenceIterator.SAMLocusAndReference locusAndRef) { if (!SequenceUtil.isNoCall(recordAndOffset.getReadBase())) { nBases++; } } }