/** * Creates an empty GATKSAMRecord with the read's header, read group and mate information, but * empty (not-null) fields: - Cigar String - Read Bases - Base Qualities * * <p>Use this method if you want to create a new empty GATKSAMRecord based on another * GATKSAMRecord * * @param read a read to copy the header from * @return a read with no bases but safe for the GATK */ public static GATKSAMRecord emptyRead(GATKSAMRecord read) { final GATKSAMRecord emptyRead = new GATKSAMRecord(read.getHeader()); emptyRead.setReferenceIndex(read.getReferenceIndex()); emptyRead.setAlignmentStart(0); emptyRead.setMappingQuality(0); // setting read indexing bin last emptyRead.setFlags(read.getFlags()); emptyRead.setMateReferenceIndex(read.getMateReferenceIndex()); emptyRead.setMateAlignmentStart(read.getMateAlignmentStart()); emptyRead.setInferredInsertSize(read.getInferredInsertSize()); emptyRead.setCigarString(""); emptyRead.setReadBases(new byte[0]); emptyRead.setBaseQualities(new byte[0]); SAMReadGroupRecord samRG = read.getReadGroup(); emptyRead.clearAttributes(); if (samRG != null) { GATKSAMReadGroupRecord rg = new GATKSAMReadGroupRecord(samRG); emptyRead.setReadGroup(rg); } GATKBin.setReadIndexingBin(emptyRead, 0); return emptyRead; }
// copied from LocusViewTemplate protected GATKSAMRecord buildSAMRecord( final String readName, final String contig, final int alignmentStart) { GATKSAMRecord record = new GATKSAMRecord(header); record.setReadName(readName); record.setReferenceIndex(dictionary.getSequenceIndex(contig)); record.setAlignmentStart(alignmentStart); record.setCigarString("1M"); record.setReadString("A"); record.setBaseQualityString("A"); record.setReadGroup(readGroup); return record; }
@Test(enabled = true) public void testReadWithNsRefAfterDeletion() throws FileNotFoundException { final IndexedFastaSequenceFile seq = new CachingIndexedFastaSequenceFile(new File(b37KGReference)); final SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(seq.getSequenceDictionary()); final int readLength = 76; final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "myRead", 0, 8975, readLength); read.setReadBases(Utils.dupBytes((byte) 'A', readLength)); read.setBaseQualities(Utils.dupBytes((byte) 30, readLength)); read.setCigarString("3M414N1D73M"); final int result = ReadUtils.getReadCoordinateForReferenceCoordinateUpToEndOfRead( read, 9393, ReadUtils.ClippingTail.LEFT_TAIL); Assert.assertEquals(result, 3); }
@DataProvider(name = "HasWellDefinedFragmentSizeData") public Object[][] makeHasWellDefinedFragmentSizeData() throws Exception { final List<Object[]> tests = new LinkedList<Object[]>(); // setup a basic read that will work final SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(); final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "read1", 0, 10, 10); read.setReadPairedFlag(true); read.setProperPairFlag(true); read.setReadUnmappedFlag(false); read.setMateUnmappedFlag(false); read.setAlignmentStart(100); read.setCigarString("50M"); read.setMateAlignmentStart(130); read.setInferredInsertSize(80); read.setFirstOfPairFlag(true); read.setReadNegativeStrandFlag(false); read.setMateNegativeStrandFlag(true); tests.add(new Object[] {"basic case", read.clone(), true}); { final GATKSAMRecord bad1 = (GATKSAMRecord) read.clone(); bad1.setReadPairedFlag(false); tests.add(new Object[] {"not paired", bad1, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setProperPairFlag(false); // we currently don't require the proper pair flag to be set tests.add(new Object[] {"not proper pair", bad, true}); // tests.add( new Object[]{ "not proper pair", bad, false }); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setReadUnmappedFlag(true); tests.add(new Object[] {"read is unmapped", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setMateUnmappedFlag(true); tests.add(new Object[] {"mate is unmapped", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setMateNegativeStrandFlag(false); tests.add(new Object[] {"read and mate both on positive strand", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setReadNegativeStrandFlag(true); tests.add(new Object[] {"read and mate both on negative strand", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setInferredInsertSize(0); tests.add(new Object[] {"insert size is 0", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setAlignmentStart(1000); tests.add(new Object[] {"positve read starts after mate end", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setReadNegativeStrandFlag(true); bad.setMateNegativeStrandFlag(false); bad.setMateAlignmentStart(1000); tests.add(new Object[] {"negative strand read ends before mate starts", bad, false}); } return tests.toArray(new Object[][] {}); }