/** Constructor that initializes the sequence dictionary with the provided one. */ public SAMFileHeader(final SAMSequenceDictionary dict) { this(); setSequenceDictionary(dict); }
/** Constructor that initializes the sequence dictionary with the provided one. */ public SAMFileHeader(final SAMSequenceDictionary dict) { this(); setSequenceDictionary(dict); }
/** * Creates an artificial sam header based on the sequence dictionary dict * * @return a new sam header */ public static SAMFileHeader createArtificialSamHeader(final SAMSequenceDictionary dict) { SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(htsjdk.samtools.SAMFileHeader.SortOrder.coordinate); header.setSequenceDictionary(dict); return header; }
@Test public void testGetSequenceIfSequenceDictionaryIsEmpty() { final SAMFileHeader header = new SAMFileHeader(); header.setSequenceDictionary(null); Assert.assertNull(header.getSequence("chr1")); }
private SAMFileHeader createOutHeader( final SAMFileHeader inHeader, final SAMFileHeader.SortOrder sortOrder, final boolean removeAlignmentInformation) { final SAMFileHeader outHeader = new SAMFileHeader(); outHeader.setSortOrder(sortOrder); if (!removeAlignmentInformation) { outHeader.setSequenceDictionary(inHeader.getSequenceDictionary()); outHeader.setProgramRecords(inHeader.getProgramRecords()); } return outHeader; }
private SAMFileHeader createOutHeader( final SAMFileHeader inHeader, final SAMFileHeader.SortOrder sortOrder, final boolean removeAlignmentInformation) { final SAMFileHeader outHeader = new SAMFileHeader(); outHeader.setSortOrder(sortOrder); if (!removeAlignmentInformation) { outHeader.setSequenceDictionary(inHeader.getSequenceDictionary()); outHeader.setProgramRecords(inHeader.getProgramRecords()); } return outHeader; }
public ArtificialBAMBuilder createAndSetHeader(final int nSamples) { createdReads = null; this.header = new SAMFileHeader(); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); header.setSequenceDictionary(parser.getContigs()); samples.clear(); for ( int i = 0; i < nSamples; i++ ) { final GATKSAMReadGroupRecord rg = new GATKSAMReadGroupRecord("rg" + i); final String sample = "sample" + i; samples.add(sample); rg.setSample(sample); rg.setPlatform(NGSPlatform.ILLUMINA.getDefaultPlatform()); header.addReadGroup(rg); } return this; }
protected ReadDestination(final SAMFileHeader header, final String readGroupID) { // prepare the bam header if ( header == null ) throw new IllegalArgumentException("header cannot be null"); bamHeader = new SAMFileHeader(); bamHeader.setSequenceDictionary(header.getSequenceDictionary()); bamHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate); bamHeader.setProgramRecords(header.getProgramRecords()); // include the original read groups plus an artificial one for haplotypes final List<SAMReadGroupRecord> readGroups = new ArrayList<>(header.getReadGroups()); SAMReadGroupRecord rg = new SAMReadGroupRecord(readGroupID); rg.setSample("HC"); rg.setSequencingCenter("BI"); readGroups.add(rg); bamHeader.setReadGroups(readGroups); }
@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")); }
public static SAMFileHeader duplicateSAMFileHeader(SAMFileHeader toCopy) { SAMFileHeader copy = new SAMFileHeader(); copy.setSortOrder(toCopy.getSortOrder()); copy.setGroupOrder(toCopy.getGroupOrder()); copy.setProgramRecords(toCopy.getProgramRecords()); copy.setReadGroups(toCopy.getReadGroups()); copy.setSequenceDictionary(toCopy.getSequenceDictionary()); for (Map.Entry<String, String> e : toCopy.getAttributes()) copy.setAttribute(e.getKey(), e.getValue()); return copy; }
public static void writeFlankingIntervals(File reference, File inputIntervals, File flankingIntervals, int basePairs) { final ReferenceSequenceFile referenceSequenceFile = createReference(reference); GenomeLocParser parser = new GenomeLocParser(referenceSequenceFile); List<GenomeLoc> originalList = intervalFileToList(parser, inputIntervals.getAbsolutePath()); if (originalList.isEmpty()) throw new UserException.MalformedFile(inputIntervals, "File contains no intervals"); List<GenomeLoc> flankingList = getFlankingIntervals(parser, originalList, basePairs); if (flankingList.isEmpty()) throw new UserException.MalformedFile(inputIntervals, "Unable to produce any flanks for the intervals"); SAMFileHeader samFileHeader = new SAMFileHeader(); samFileHeader.setSequenceDictionary(referenceSequenceFile.getSequenceDictionary()); IntervalList intervalList = new IntervalList(samFileHeader); int i = 0; for (GenomeLoc loc: flankingList) intervalList.add(toInterval(loc, ++i)); intervalList.write(flankingIntervals); }
@BeforeClass public void init() { SAMSequenceDictionary sequenceDictionary = new SAMSequenceDictionary(); sequenceDictionary.addSequence(new SAMSequenceRecord("1",500)); sequenceDictionary.addSequence(new SAMSequenceRecord("2",500)); samFileHeader = new SAMFileHeader(); samFileHeader.setSequenceDictionary(sequenceDictionary); }
@DataProvider public Object[][] testOverlappingErrorCalculatorWithManyReadsData() throws IOException { final File temp = File.createTempFile("Overlapping", ".bam"); temp.deleteOnExit(); try ( final ReferenceSequenceFileWalker referenceSequenceFileWalker = new ReferenceSequenceFileWalker(new File("testdata/picard/sam/BamErrorMetrics/chrM.reference.fasta"))) { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(); builder.getHeader().setSequenceDictionary(referenceSequenceFileWalker.getSequenceDictionary()); for (int i = 0; i < 4000; i++) { builder.addPair("Read" + i, 0, 1, 1, false, false, "36M", "36M", true, false, 20); } try (final SAMFileWriter writer = new SAMFileWriterFactory() .setCompressionLevel(2) .makeBAMWriter(builder.getHeader(), false, temp)) { builder.forEach(writer::addAlignment); } } return new Object[][]{{temp}}; }
private SAMFileHeader getSAMFileHeader() { final VCFFileReader reader = getReader(CEU_TRIOS_SNPS_VCF); final SAMSequenceDictionary dict = reader.getFileHeader().getSequenceDictionary(); reader.close(); final SAMFileHeader header = new SAMFileHeader(); header.setSequenceDictionary(dict); return header; }
@BeforeClass private void init() throws IOException { referenceFile = new File(b37KGReference); reference = new CachingIndexedFastaSequenceFile(referenceFile); dictionary = reference.getSequenceDictionary(); genomeLocParser = new GenomeLocParser(dictionary); header = ArtificialSAMUtils.createDefaultReadGroup(new SAMFileHeader(), "test", "test"); header.setSequenceDictionary(dictionary); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); readGroup = new GATKSAMReadGroupRecord(header.getReadGroup("test")); final List<GATKSAMRecord> reads = new ArrayList<>(); for ( final String contig : contigs ) { for ( int i = 1; i <= numReadsPerContig; i++ ) { reads.add(buildSAMRecord("read" + contig + "_" + i, contig, i)); } } createBAM(reads); }
@Test public void testContigHasColon() { SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(htsjdk.samtools.SAMFileHeader.SortOrder.coordinate); SAMSequenceDictionary dict = new SAMSequenceDictionary(); SAMSequenceRecord rec = new SAMSequenceRecord("c:h:r1", 10); rec.setSequenceLength(10); dict.addSequence(rec); header.setSequenceDictionary(dict); final GenomeLocParser myGenomeLocParser = new GenomeLocParser(header.getSequenceDictionary()); GenomeLoc loc = myGenomeLocParser.parseGenomeLoc("c:h:r1:4-5"); assertEquals(0, loc.getContigIndex()); assertEquals(loc.getStart(), 4); assertEquals(loc.getStop(), 5); }
protected GATKSAMRecord buildSAMRecord(String readName, String contig, int alignmentStart, int alignmentEnd) { SAMFileHeader header = ArtificialSAMUtils.createDefaultReadGroup(new SAMFileHeader(), "test", "test"); header.setSequenceDictionary(dictionary); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); GATKSAMRecord record = new GATKSAMRecord(header); record.setReadName(readName); record.setReferenceIndex(dictionary.getSequenceIndex(contig)); record.setAlignmentStart(alignmentStart); Cigar cigar = new Cigar(); int len = alignmentEnd - alignmentStart + 1; cigar.add(new CigarElement(len, CigarOperator.M)); record.setCigar(cigar); record.setReadString(new String(new char[len]).replace("\0", "A")); record.setBaseQualities(new byte[len]); record.setReadGroup(new GATKSAMReadGroupRecord(header.getReadGroup("test"))); return record; }
@Test(expectedExceptions = IllegalArgumentException.class) public void changeHeader() { SAMFileHeader clonedHeader = fileHeader.clone(); clonedHeader.addSequence(new SAMSequenceRecord("4", 1000)); IntervalList usingClone1 = new IntervalList(clonedHeader); usingClone1.add(new Interval("4", 1, 100)); IntervalList usingClone2 = new IntervalList(clonedHeader); usingClone2.add(new Interval("4", 10, 20)); IntervalList expected = new IntervalList(clonedHeader); expected.add(new Interval("4", 1, 9)); expected.add(new Interval("4", 21, 100)); //pull rug from underneath (one call will change all the headers, since there's actually only one) usingClone1.getHeader().setSequenceDictionary(fileHeader.getSequenceDictionary()); //now interval lists are in "illegal state" since they contain contigs that are not in the header. //this next step should fail IntervalList.subtract(usingClone1, usingClone2); Assert.assertTrue(false); }
@DataProvider(name="haplotypeMapForWriting") public Object[][] haplotypeMapForWriting() { SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); SAMSequenceDictionary sd = new SAMSequenceDictionary(); sd.addSequence(new SAMSequenceRecord("chr1", 101)); sd.addSequence(new SAMSequenceRecord("chr2", 101)); sd.addSequence(new SAMSequenceRecord("chr3", 101)); header.setSequenceDictionary(sd); HaplotypeMap newMap = new HaplotypeMap(header); HaplotypeBlock t1 = new HaplotypeBlock(0.151560926); t1.addSnp(new Snp("snp2", "chr1", 83, (byte)'A', (byte)'G', .16, null)); t1.addSnp(new Snp("snp1", "chr1", 51, (byte)'T', (byte)'C', 0.15, Collections.singletonList("SQNM_1CHIP_FingerprintAssays"))); newMap.addHaplotype(t1); HaplotypeBlock t2 = new HaplotypeBlock(.02d); t2.addSnp(new Snp("snp3", "chr2", 24, (byte)'C', (byte)'A', .20, null)); newMap.addHaplotype(t2); return new Object[][]{{newMap}}; }
/** * Build a SAM record featuring the absolute minimum required dataset. * TODO: Blatantly copied from LocusViewTemplate. Refactor these into a set of tools. * @param contig Contig to populate. * @param alignmentStart start of alignment * @param alignmentEnd end of alignment * @return New SAM Record */ protected SAMRecord buildSAMRecord( String contig, int alignmentStart, int alignmentEnd ) { SAMFileHeader header = new SAMFileHeader(); header.setSequenceDictionary(sequenceFile.getSequenceDictionary()); SAMRecord record = new SAMRecord(header); record.setReferenceIndex(sequenceFile.getSequenceDictionary().getSequenceIndex(contig)); record.setAlignmentStart(alignmentStart); Cigar cigar = new Cigar(); cigar.add(new CigarElement(alignmentEnd-alignmentStart+1, CigarOperator.M)); record.setCigar(cigar); return record; }