@Override protected byte[] refSeqChanged(int seqID) { SAMSequenceRecord sequence = header.getSequence(seqID); return referenceSource.getReferenceBases(sequence, true); } }
@BeforeClass public void beforeClass() { header = ArtificialSAMUtils.createArtificialSamHeader((endingChr - startingChr) + 1, startingChr, readCount + DEFAULT_READ_LENGTH); contig = header.getSequence(0).getSequenceName(); genomeLocParser = new GenomeLocParser(header.getSequenceDictionary()); initializeTests(); }
public static HashSet<Integer> makeIgnoredSequenceIndicesSet(final SAMFileHeader header, final Set<String> ignoredSequence) { final HashSet<Integer> ignoredSequenceIndices = new HashSet<Integer>(); for (final String sequenceName: ignoredSequence) { final SAMSequenceRecord sequenceRecord = header.getSequence(sequenceName); if (sequenceRecord == null) { throw new PicardException("Unrecognized sequence " + sequenceName + " passed as argument to IGNORE_SEQUENCE"); } ignoredSequenceIndices.add(sequenceRecord.getSequenceIndex()); } return ignoredSequenceIndices; }
/** * Adds an interval to the list of intervals. */ public void add(final Interval interval) { if (header.getSequence(interval.getContig()) == null) { throw new IllegalArgumentException(String.format("Cannot add interval %s, contig not in header", interval.toString())); } this.intervals.add(interval); }
/** * Adds an interval to the list of intervals. */ public void add(final Interval interval) { if (header.getSequence(interval.getContig()) == null) { throw new IllegalArgumentException(String.format("Cannot add interval %s, contig not in header", interval.toString())); } this.intervals.add(interval); }
public static HashSet<Integer> makeIgnoredSequenceIndicesSet(final SAMFileHeader header, final Set<String> ignoredSequence) { final HashSet<Integer> ignoredSequenceIndices = new HashSet<Integer>(); for (final String sequenceName: ignoredSequence) { final SAMSequenceRecord sequenceRecord = header.getSequence(sequenceName); if (sequenceRecord == null) { throw new PicardException("Unrecognized sequence " + sequenceName + " passed as argument to IGNORE_SEQUENCE"); } ignoredSequenceIndices.add(sequenceRecord.getSequenceIndex()); } return ignoredSequenceIndices; }
/** * @return the largest position on the last sequence index */ @Override public int getMaxPosition() { SAMSequenceRecord lastSequenceRecord = header.getSequence(getMaxSequenceIndex()); return lastSequenceRecord.getSequenceLength(); } }
/** * @return the largest position on the last sequence index */ public int getMaxPosition() { SAMSequenceRecord lastSequenceRecord = header.getSequence(getMaxSequenceIndex()); return lastSequenceRecord.getSequenceLength(); } }
/** * @return the largest position on the last sequence index */ @Override public int getMaxPosition() { SAMSequenceRecord lastSequenceRecord = header.getSequence(getMaxSequenceIndex()); return lastSequenceRecord.getSequenceLength(); } }
@DataProvider(name = "GenomeLocOnContig") public Object[][] makeGenomeLocOnContig() { final List<Object[]> tests = new LinkedList<Object[]>(); final int contigLength = header.getSequence(0).getSequenceLength(); for ( int start = -10; start < contigLength + 10; start++ ) { for ( final int len : Arrays.asList(1, 10, 20) ) { tests.add(new Object[]{ "chr1", start, start + len }); } } return tests.toArray(new Object[][]{}); }
/** * Creates an IntervalList from the given sequence name * * @param header header to use to create IntervalList * @param sequenceName name of sequence in header * @return a new intervalList with given header that contains the reference name */ public static IntervalList fromName(final SAMFileHeader header, final String sequenceName) { final IntervalList ref = new IntervalList(header); ref.add(new Interval(sequenceName, 1, header.getSequence(sequenceName).getSequenceLength())); return ref; }
@Test public void testGetSequenceIfSequenceDictionaryIsEmpty() { final SAMFileHeader header = new SAMFileHeader(); header.setSequenceDictionary(null); Assert.assertNull(header.getSequence("chr1")); }
/** * Tests if the provided record is mapped entirely beyond the end of the reference (i.e., the alignment start is greater than the * length of the sequence to which the record is mapped). */ public static boolean recordMapsEntirelyBeyondEndOfReference(final SAMRecord record) { return record.getHeader().getSequence(record.getReferenceIndex()).getSequenceLength() < record.getAlignmentStart(); }
/** * Creates an IntervalList from the given sequence name * * @param header header to use to create IntervalList * @param sequenceName name of sequence in header * @return a new intervalList with given header that contains the reference name */ public static IntervalList fromName(final SAMFileHeader header, final String sequenceName) { final IntervalList ref = new IntervalList(header); ref.add(new Interval(sequenceName, 1, header.getSequence(sequenceName).getSequenceLength())); return ref; }
@Test public void testGetSequenceIfNameIsNotFound() { final SAMFileHeader header = new SAMFileHeader(); final SAMSequenceRecord rec = new SAMSequenceRecord("chr1",1); final SAMSequenceDictionary dict = new SAMSequenceDictionary(Arrays.asList(rec)); header.setSequenceDictionary(dict); Assert.assertNull(header.getSequence("chr2")); }
private void warnIfReferenceIsTooLargeForBinField(final SAMRecord rec) { final SAMSequenceRecord sequence = rec.getHeader() != null ? rec.getHeader().getSequence(rec.getReferenceName()) : null; if (!isReferenceSizeWarningShowed && sequence != null && SAMUtils.isReferenceSequenceCompatibleWithBAI(sequence) && rec.getValidationStringency() != ValidationStringency.SILENT) { LOG.warn("Reference length is too large for BAM bin field. Values in the bin field could be incorrect."); isReferenceSizeWarningShowed = true; } }
@Test( dataProvider = "GenomeLocPadding") public void testGenomeLocPadding(final GenomeLoc input, final int pad) { final int contigLength = header.getSequence(0).getSequenceLength(); final GenomeLoc padded = genomeLocParser.createPaddedGenomeLoc(input, pad); Assert.assertNotNull(padded); Assert.assertEquals(padded.getContig(), input.getContig()); Assert.assertEquals(padded.getStart(), Math.max(input.getStart() - pad, 1)); Assert.assertEquals(padded.getStop(), Math.min(input.getStop() + pad, contigLength)); } }
@Test public void realignAtContigBorderTest() { final int contigEnd = header.getSequence(0).getSequenceLength(); final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "goodRead", 0, contigEnd - 1, 2); read.setCigarString("2M"); Assert.assertEquals(IndelRealigner.realignmentProducesBadAlignment(read, contigEnd), false); read.setCigarString("1M1D1M"); Assert.assertEquals(IndelRealigner.realignmentProducesBadAlignment(read, contigEnd), true); }
@Test(dataProvider = "queryIntervalIssue76TestCases") public void queryIntervalIssue76(final String sequenceName, final int start, final int end, final int expectedCount) throws IOException { final File input = new File(TEST_DATA_DIR, "issue76.bam"); final SamReader reader = SamReaderFactory.makeDefault().open(input); final QueryInterval interval = new QueryInterval(reader.getFileHeader().getSequence(sequenceName).getSequenceIndex(), start, end); Assert.assertEquals(countRecordsInQueryInterval(reader, interval), expectedCount); reader.close(); }
@Test public void testCigarOffEndOfReferenceValidation() throws Exception { final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder(); samBuilder.addFrag(String.valueOf(0), 0, 1, false); final int contigLength = samBuilder.getHeader().getSequence(0).getSequenceLength(); // Should hang off the end. samBuilder.addFrag(String.valueOf(1), 0, contigLength - 1, false); final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE); Assert.assertNotNull(results.get(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE.getHistogramString())); Assert.assertEquals(results.get(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE.getHistogramString()).getValue(), 1.0); }