@Override public void setAlignmentStart(final int value) { if (!initializedFields.contains(LazyField.ALIGNMENT_START)) { initializedFields.add(LazyField.ALIGNMENT_START); } super.setAlignmentStart(value); }
@Override public void setAlignmentStart(final int value) { if (!initializedFields.contains(LazyField.ALIGNMENT_START)) { initializedFields.add(LazyField.ALIGNMENT_START); } super.setAlignmentStart(value); }
@Test public void testInvalidAlignmentStartValidation() { final SAMRecord sam = createTestRecordHelper(); sam.setAlignmentStart(0); List<SAMValidationError> validationErrors = sam.isValid(false); Assert.assertTrue(validationErrors != null && validationErrors.size() == 1); }
private SAMRecord makeRead(final SAMFileHeader alignedHeader, final SAMRecord unmappedRec, final HitSpec hitSpec, final boolean firstOfPair, final int hitIndex) { if (hitSpec == null) return null; final SAMRecord rec = makeRead(alignedHeader, unmappedRec, hitSpec, hitIndex); rec.setReadPairedFlag(true); if (firstOfPair) { rec.setFirstOfPairFlag(true); rec.setAlignmentStart(hitIndex + 1); } else { rec.setSecondOfPairFlag(true); rec.setAlignmentStart(hitIndex + 201); } return rec; }
private static SAMRecord createSAMRecord(SAMFileHeader header, int recordIndex, int seqId, int start) { byte[] bases = "AAAAA".getBytes(); final SAMRecord record = new SAMRecord(header); record.setReferenceIndex(seqId); record.setAlignmentStart(start); record.setReadBases(bases); record.setBaseQualities(bases); record.setReadName(Integer.toString(recordIndex)); return record; }
@Test public void testBizilionTags() throws IOException { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(); builder.addFrag("1", 0, 1, false); SAMRecord record = builder.getRecords().iterator().next(); for (int i = 0; i < 1000; i++) { char b1 = (char) ('A' + i / 26); char b2 = (char) ('A' + i % 26); String tag = new String(new char[]{b1, b2}); if ("RG".equals(tag)) { continue; } record.setAttribute(tag, i); } record.setAlignmentStart(1); testSingleRecord(record, record.getReadBases()); }
@Test public void canShadeBaseQuality() throws InvalidGenomicCoordsException, IOException, InvalidColourException { GenomicCoords gc= new GenomicCoords("chr7:1-80", 80, null, null); SAMRecord rec= new SAMRecord(null); rec.setAlignmentStart(1); rec.setCigarString("2M3D8M"); rec.setMappingQuality(30); rec.setReadBases("AAAAATTTTT".getBytes()); rec.setBaseQualities("!!!!!IIIII".getBytes()); System.err.println(rec.getSAMString()); TextRead tr= new TextRead(rec, gc, false); System.err.println(Splitter.on("m").omitEmptyStrings().splitToList(tr.getPrintableTextRead(false, false, false))); }
public static void trim(SAMRecord read, int startCount, int endCount) { int readLength = read.getReadLength(); read.setReadBases(Arrays.copyOfRange(read.getReadBases(), startCount, readLength - endCount)); read.setBaseQualities(Arrays.copyOfRange(read.getBaseQualities(), startCount, readLength - endCount)); if (read.getCigar() != null && read.getCigar().getCigarElements().size() > 0) { read.setAlignmentStart(read.getAlignmentStart() + CigarUtil.offsetOf(read.getCigar(), startCount)); read.setCigar(CigarUtil.trimReadBases(read.getCigar(), startCount, endCount)); assert (read.getReadLength() == read.getCigar().getReadLength()); } }
@Test(dataProvider = "serializationTestData") public void testCloneAndEquals(final SRAAccession accession) throws Exception { final SRAFileReader reader = new SRAFileReader(accession); final SAMRecord record = reader.getIterator().next(); reader.close(); final SAMRecord newRecord = (SAMRecord)record.clone(); Assert.assertFalse(record == newRecord); Assert.assertNotSame(record, newRecord); Assert.assertEquals(record, newRecord); Assert.assertEquals(newRecord, record); newRecord.setAlignmentStart(record.getAlignmentStart() + 100); Assert.assertFalse(record.equals(newRecord)); Assert.assertFalse(newRecord.equals(record)); } }
@Test public void canShadeBaseQualityWithSoftClip() throws InvalidGenomicCoordsException, IOException, InvalidColourException { // Ensure this is the colour we expect with low base quality assertEquals("249", Config.get(ConfigKey.shade_low_mapq)); GenomicCoords gc= new GenomicCoords("chr7:100-170", 80, null, null); SAMRecord rec= new SAMRecord(null); rec.setAlignmentStart(100); rec.setCigarString("2S4M"); rec.setMappingQuality(30); rec.setReadBases("NNNNNN".getBytes()); rec.setBaseQualityString("##ABC#"); TextRead tr= new TextRead(rec, gc, false); List<String> printable= Splitter.on("N").omitEmptyStrings().splitToList(tr.getPrintableTextRead(false, false, false)); assertTrue( ! printable.get(0).contains("249")); // Base qual= A assertTrue( ! printable.get(1).contains("249")); // Base qual= B assertTrue( ! printable.get(2).contains("249")); // Base qual= C assertTrue( printable.get(3).contains("249")); // Base qual= # }
@Test(dataProvider = "deepCopyTestData") public void testDeepCopyMutate(final SAMRecord sam) { final byte[] initialBaseQualityCopy = Arrays.copyOf(sam.getBaseQualities(), sam.getBaseQualities().length); final int initialStart = sam.getAlignmentStart(); final SAMRecord deepCopy = testDeepCopy(sam); Assert.assertTrue(Arrays.equals(sam.getBaseQualities(), deepCopy.getBaseQualities())); Assert.assertTrue(sam.getAlignmentStart() == deepCopy.getAlignmentStart()); // mutate copy and make sure original remains unchanged final byte[] copyBaseQuals = deepCopy.getBaseQualities(); for (int i = 0; i < copyBaseQuals.length; i++) { copyBaseQuals[i]++; } deepCopy.setBaseQualities(copyBaseQuals); deepCopy.setAlignmentStart(initialStart + 1); Assert.assertTrue(Arrays.equals(sam.getBaseQualities(), initialBaseQualityCopy)); Assert.assertTrue(sam.getAlignmentStart() == initialStart); }
/** * Adjusts the start/end alignment bounds of the given alignment. Expanded alignments are converted * @param r * @param expandStartBy * @param expandEndBy * @return record passed in */ public static SAMRecord adjustAlignmentBounds(SAMRecord r, int expandStartBy, int expandEndBy) { Cigar newCigar = softClipToAligned(r.getCigar(), expandStartBy, 0); r.setAlignmentStart(r.getAlignmentStart() + r.getCigar().getReferenceLength() - newCigar.getReferenceLength()); newCigar = softClipToAligned(newCigar, 0, expandEndBy); r.setCigar(newCigar); return r; } private static Cigar softClipToAligned(Cigar cigar, int startunclip, int endunclip) {
@Test(dataProvider = "homopolymerStratifierData") public void testHomopolymerLength(final int offset, final boolean readStrandPositive, final byte referenceBase, final Object expectedStratum, final ReadBaseStratification.RecordAndOffsetStratifier<?> recordAndOffsetStratifier) { final SAMSequenceRecord samSequenceRecord = new SAMSequenceRecord("chr1", 200); final SAMFileHeader samFileHeader = new SAMFileHeader(); final SAMRecord samRecord = new SAMRecord(samFileHeader); samRecord.setReadBases("CATGGGGAAAAAAAAA".getBytes()); samRecord.setReadUnmappedFlag(false); samRecord.setReadNegativeStrandFlag(!readStrandPositive); samRecord.setAlignmentStart(1); SamLocusIterator.RecordAndOffset recordAndOffset = new SamLocusIterator.RecordAndOffset(samRecord, offset); SamLocusIterator.LocusInfo locusInfo = new SamLocusIterator.LocusInfo(samSequenceRecord, 1); final SAMLocusAndReference locusAndReference = new SAMLocusAndReference(locusInfo, referenceBase); Assert.assertEquals(recordAndOffsetStratifier.stratify(recordAndOffset, locusAndReference), expectedStratum); }
private static SAMRecord createRecord(int start, int mappingQuality) { final SAMRecord rec = new SAMRecord(getHeader()); rec.setReadName("read"); rec.setReferenceName("1"); rec.setAlignmentStart(start); rec.setMappingQuality(mappingQuality); return rec; }
@Override public String getRemoteEvidenceID() { SAMRecord remote = this.getSAMRecord().deepCopy(); remote.setReferenceName(remoteAlignment.rname); remote.setAlignmentStart(remoteAlignment.pos); remote.setReadUnmappedFlag(false); remote.setReadNegativeStrandFlag(remoteAlignment.isNegativeStrand); remote.setCigar(remoteAlignment.cigar); remote.setAttribute(SAMTag.SA.name(), new ChimericAlignment(this.getSAMRecord()).toString()); SplitReadEvidence remoteEvidence = SplitReadEvidence.create(source, remote).get(0); return source.getContext().getEvidenceIDGenerator().getEvidenceID(remoteEvidence); } @Override
@BeforeClass public void init() { header = ArtificialSAMUtils.createArtificialSamHeader(3, 1, ArtificialSAMUtils.DEFAULT_READ_LENGTH * 2); readMapped = createMappedRead("mapped", 1); readNoReference = createUnmappedRead("unmappedNoReference"); readUnmappedFlag = createMappedRead("unmappedFlagged", 2); readUnmappedFlag.setReadUnmappedFlag(true); readUnknownContig = createMappedRead("unknownContig", 3); readUnknownContig.setReferenceName("unknownContig"); readUnknownStart = createMappedRead("unknownStart", 1); readUnknownStart.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START); }
public static void makeReadUnmapped(final SAMRecord rec) { if (rec.getReadNegativeStrandFlag()) { SAMRecordUtil.reverseComplement(rec); rec.setReadNegativeStrandFlag(false); } rec.setDuplicateReadFlag(false); rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START); rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR); rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY); rec.setInferredInsertSize(0); rec.setNotPrimaryAlignmentFlag(false); rec.setProperPairFlag(false); rec.setReadUnmappedFlag(true); }
@Test public void canPrintFormattedRead() throws InvalidGenomicCoordsException, IOException, InvalidColourException { GenomicCoords gc= new GenomicCoords("chr7:5566778-5566798", 80, null, null); SAMRecord rec= new SAMRecord(null); rec.setAlignmentStart(5566780); rec.setCigarString("24M"); rec.setReadBases("AACCGGTTAACCGGTTAACCGGTT".getBytes()); TextRead textRead= new TextRead(rec, gc, false); rec.setSecondOfPairFlag(false); assertTrue( ! textRead.getPrintableTextRead(true, false, false).contains("4;")); // '4': Underline rec.setSecondOfPairFlag(true); assertTrue( textRead.getPrintableTextRead(true, false, false).contains("4;")); // '4': Underline }
@Test public void canPrintSquashedRead() throws InvalidGenomicCoordsException, IOException, InvalidColourException{ GenomicCoords gc= new GenomicCoords("chr7:5566778-5566978", 80, samSeqDict, fastaFile); SAMRecord rec= new SAMRecord(null); rec.setAlignmentStart(5566780); rec.setCigarString("24M"); rec.setReadBases("AACCGGTTAACCGGTTAACCGGTT".getBytes()); TextRead textRead= new TextRead(rec, gc, false); assertEquals(2, textRead.getTextStart()); assertEquals(11, textRead.getTextEnd()); assertEquals(textRead.getTextEnd() - textRead.getTextStart() + 1, ">>>>>>>>>>".length()); assertEquals(textRead.getPrintableTextRead(false, true, false), ">>>>>>>>>>"); // System.out.println(textRead); }
private void addAlignmentForMostStrategy( final SAMFileWriter writer, final SAMRecord unmappedRecord, final MostDistantStrategyAlignmentSpec spec, final boolean reverse) { final SAMRecord alignedRecord = new SAMRecord(writer.getFileHeader()); alignedRecord.setReadName(unmappedRecord.getReadName()); alignedRecord.setReadBases(unmappedRecord.getReadBases()); alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities()); alignedRecord.setReferenceName(spec.sequence); alignedRecord.setAlignmentStart(spec.alignmentStart); alignedRecord.setReadNegativeStrandFlag(reverse); alignedRecord.setCigarString(unmappedRecord.getReadBases().length + "M"); alignedRecord.setMappingQuality(spec.mapQ); alignedRecord.setReadPairedFlag(unmappedRecord.getReadPairedFlag()); alignedRecord.setFirstOfPairFlag(unmappedRecord.getFirstOfPairFlag()); alignedRecord.setSecondOfPairFlag(unmappedRecord.getSecondOfPairFlag()); alignedRecord.setMateUnmappedFlag(true); writer.addAlignment(alignedRecord); }