public SAMFileHeader() { setAttribute(VERSION_TAG, CURRENT_VERSION); }
public SAMFileHeader() { setAttribute(VERSION_TAG, CURRENT_VERSION); }
public SAMFileHeader() { setAttribute(VERSION_TAG, CURRENT_VERSION); }
public void setSortOrder(final SortOrder so) { setAttribute("SO", so.name()); }
public void setGroupOrder(final GroupOrder go) { setAttribute("GO", go.name()); }
/** * Set the given value for the attribute named 'key'. Replaces an existing value, if any. * If value is null, the attribute is removed. * Otherwise, the value will be converted to a String with toString. * @param key attribute name * @param value attribute value * @deprecated Use {@link #setAttribute(String, String) instead */ @Deprecated @Override public void setAttribute(final String key, final Object value) { if (key.equals(SORT_ORDER_TAG) || key.equals(GROUP_ORDER_TAG)) { this.setAttribute(key, value.toString()); } else { super.setAttribute(key, value); } }
/** * Set the given value for the attribute named 'key'. Replaces an existing value, if any. * If value is null, the attribute is removed. * Otherwise, the value will be converted to a String with toString. * @param key attribute name * @param value attribute value * @deprecated Use {@link #setAttribute(String, String) instead */ @Deprecated @Override public void setAttribute(final String key, final Object value) { if (key.equals(SORT_ORDER_TAG) || key.equals(GROUP_ORDER_TAG)) { this.setAttribute(key, value.toString()); } else { super.setAttribute(key, value); } }
private void writeHDLine(final boolean keepExistingVersionNumber) { final SAMFileHeader newHeader; if (keepExistingVersionNumber) { newHeader = mFileHeader; } else { // Make a copy of the header, excluding the version from the input header, so that // output get CURRENT_VERSION instead of whatever the version of the input header was. newHeader = new SAMFileHeader(); for (final Map.Entry<String, String> entry : mFileHeader.getAttributes()) { if (!entry.getKey().equals(SAMFileHeader.VERSION_TAG)) { newHeader.setAttribute(entry.getKey(), entry.getValue()); } } } final String[] fields = new String[1 + newHeader.getAttributes().size()]; fields[0] = HEADER_LINE_START + HeaderRecordType.HD; encodeTags(newHeader, fields, 1); println(StringUtil.join(FIELD_SEPARATOR, fields)); }
private void writeHDLine(final boolean keepExistingVersionNumber) { final SAMFileHeader newHeader; if (keepExistingVersionNumber) { newHeader = mFileHeader; } else { // Make a copy of the header, excluding the version from the input header, so that // output get CURRENT_VERSION instead of whatever the version of the input header was. newHeader = new SAMFileHeader(); for (final Map.Entry<String, String> entry : mFileHeader.getAttributes()) { if (!entry.getKey().equals(SAMFileHeader.VERSION_TAG)) { newHeader.setAttribute(entry.getKey(), entry.getValue()); } } } final String[] fields = new String[1 + newHeader.getAttributes().size()]; fields[0] = HEADER_LINE_START + HeaderRecordType.HD; encodeTags(newHeader, fields, 1); println(StringUtil.join(FIELD_SEPARATOR, fields)); }
private void writeHDLine(final boolean keepExistingVersionNumber) { final SAMFileHeader newHeader; if (keepExistingVersionNumber) { newHeader = mFileHeader; } else { // Make a copy of the header, excluding the version from the input header, so that // output get CURRENT_VERSION instead of whatever the version of the input header was. newHeader = new SAMFileHeader(); for (final Map.Entry<String, String> entry : mFileHeader.getAttributes()) { if (!entry.getKey().equals(SAMFileHeader.VERSION_TAG)) { newHeader.setAttribute(entry.getKey(), entry.getValue()); } } } final String[] fields = new String[1 + newHeader.getAttributes().size()]; fields[0] = HEADER_LINE_START + HeaderRecordType.HD; encodeTags(newHeader, fields, 1); println(StringUtil.join(FIELD_SEPARATOR, fields)); }
/** * Creates samFileReader from the data in instance of this class * @return SAMFileReader */ public SAMFileReader getSamReader() { final File tempFile; try { tempFile = File.createTempFile("temp", ".sam"); } catch (final IOException e) { throw new RuntimeIOException("problems creating tempfile", e); } this.header.setAttribute("VN", "1.0"); final SAMFileWriter w = new SAMFileWriterFactory().makeBAMWriter(this.header, true, tempFile); for (final SAMRecord r:this.getRecords()){ w.addAlignment(r); } w.close(); final SAMFileReader reader = new SAMFileReader(tempFile); tempFile.deleteOnExit(); return reader; }
public static SAMFileHeader buildSAMFileHeader(AlignmentHeader alignmentHeader){ SAMFileHeader samFileHeader = new SAMFileHeader(); for(Map.Entry<String, String> entry : alignmentHeader.getAttributes().entrySet()) { samFileHeader.setAttribute(entry.getKey(), entry.getValue()); } for(AlignmentHeader.SequenceRecord sq : alignmentHeader.getSequenceDiccionary()){ SAMSequenceRecord samSequenceRecord = new SAMSequenceRecord(sq.getSequenceName(), sq.getSequenceLength()); for(Map.Entry<String, String> entry : sq.getAttributes().entrySet()) samSequenceRecord.setAttribute(entry.getKey(), entry.getValue()); samFileHeader.addSequence(samSequenceRecord); } for(AlignmentHeader.ReadGroup rg : alignmentHeader.getReadGroups()){ SAMReadGroupRecord samReadGroupRecord = new SAMReadGroupRecord(rg.getId()); for(Map.Entry<String, String> entry : rg.getAttributes().entrySet()){ samReadGroupRecord.setAttribute(entry.getKey(), entry.getValue()); } samFileHeader.addReadGroup(samReadGroupRecord); } for(AlignmentHeader.ProgramRecord pg : alignmentHeader.getProgramRecords()){ SAMProgramRecord samProgramRecord = new SAMProgramRecord(pg.getId()); for(Map.Entry<String, String> entry : pg.getAttributes().entrySet()){ samProgramRecord.setAttribute(entry.getKey(), entry.getValue()); } samFileHeader.addProgramRecord(samProgramRecord); } samFileHeader.setComments(alignmentHeader.getComments()); return samFileHeader; } public static AlignmentHeader buildAlignmentHeader(SAMFileHeader samHeader, String studyName){
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; }
/** * Creates samFileReader from the data in instance of this class * * @return SamReader */ public SamReader getSamReader() { final File tempFile; try { tempFile = File.createTempFile("temp", this.useBamFile ? ".bam" : ".sam"); tempFile.deleteOnExit(); } catch (final IOException e) { throw new RuntimeIOException("problems creating tempfile", e); } this.header.setAttribute("VN", "1.0"); try(final SAMFileWriter w = this.useBamFile ? new SAMFileWriterFactory().makeBAMWriter(this.header, true, tempFile) : new SAMFileWriterFactory().makeSAMWriter(this.header, true, tempFile)) { for (final SAMRecord r : this.getRecords()) { w.addAlignment(r); } } return SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(tempFile); }
@Test public void testGroupOrder() { final SAMFileHeader header = new SAMFileHeader(); header.setGroupOrder(SAMFileHeader.GroupOrder.query); Assert.assertEquals(header.getGroupOrder(), SAMFileHeader.GroupOrder.query); Assert.assertEquals(header.getAttribute(SAMFileHeader.GROUP_ORDER_TAG), SAMFileHeader.GroupOrder.query.name()); header.setAttribute(SAMFileHeader.GROUP_ORDER_TAG, SAMFileHeader.GroupOrder.reference.name()); Assert.assertEquals(header.getGroupOrder(), SAMFileHeader.GroupOrder.reference); Assert.assertEquals(header.getAttribute(SAMFileHeader.GROUP_ORDER_TAG), SAMFileHeader.GroupOrder.reference.name()); header.setAttribute(SAMFileHeader.GROUP_ORDER_TAG, SAMFileHeader.GroupOrder.query); Assert.assertEquals(header.getGroupOrder(), SAMFileHeader.GroupOrder.query); Assert.assertEquals(header.getAttribute(SAMFileHeader.GROUP_ORDER_TAG), SAMFileHeader.GroupOrder.query.name()); }
/** * Creates samFileReader from the data in instance of this class * * @return SamReader */ public SamReader getSamReader() { final File tempFile; try { tempFile = File.createTempFile("temp", this.useBamFile ? ".bam" : ".sam"); tempFile.deleteOnExit(); } catch (final IOException e) { throw new RuntimeIOException("problems creating tempfile", e); } this.header.setAttribute("VN", "1.0"); try(final SAMFileWriter w = this.useBamFile ? new SAMFileWriterFactory().makeBAMWriter(this.header, true, tempFile) : new SAMFileWriterFactory().makeSAMWriter(this.header, true, tempFile)) { for (final SAMRecord r : this.getRecords()) { w.addAlignment(r); } } return SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(tempFile); }
@Test public void testSortOrderManualSetting() { final SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.coordinate); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.coordinate.name()); header.setAttribute(SAMFileHeader.SORT_ORDER_TAG, SAMFileHeader.SortOrder.queryname.name()); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.queryname); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.queryname.name()); header.setAttribute(SAMFileHeader.SORT_ORDER_TAG, SAMFileHeader.SortOrder.coordinate); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.coordinate); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.coordinate.name()); header.setAttribute(SAMFileHeader.SORT_ORDER_TAG, "UNKNOWN"); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.unknown); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.unknown.name()); header.setAttribute(SAMFileHeader.SORT_ORDER_TAG, "uNknOWn"); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.unknown); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.unknown.name()); header.setAttribute(SAMFileHeader.SORT_ORDER_TAG, "cOoRdinate"); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.unknown); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.unknown.name()); }
@Test public void testNoTotalReads() throws IOException { final File tmpDir = Files.createTempDirectory(TMP_DIR_NAME).toFile(); final String[] args = { "INPUT=" + PAIRED_FILE.getPath(), "SPLIT_TO_N_READS=5", "OUTPUT=" + tmpDir }; runPicardCommandLine(args); final File out1 = new File(tmpDir, "shard_0001.bam"); out1.deleteOnExit(); final File out2 = new File(tmpDir, "shard_0002.bam"); out2.deleteOnExit(); final SamReader input = SamReaderFactory.makeDefault().open(PAIRED_FILE); final SAMRecordIterator inputIter = input.iterator(); final SamReader reader1 = SamReaderFactory.makeDefault().open(out1); final SamReader reader2 = SamReaderFactory.makeDefault().open(out2); final SAMFileHeader inputHeader = input.getFileHeader(); final SAMFileHeader reader1Header = reader1.getFileHeader(); // The output BAM versions might not match the input header version if the input is outdated. inputHeader.setAttribute(SAMFileHeader.VERSION_TAG, reader1Header.getVersion()); Assert.assertEquals(inputHeader, reader1Header); Assert.assertEquals(reader1.getFileHeader(), reader2.getFileHeader()); VALIDATE_SAM_TESTER.assertSamValid(out1); VALIDATE_SAM_TESTER.assertSamValid(out2); compareInputWithOutputs(reader1, reader2, inputIter, 6); }
@Test(dataProvider = "DataForWrongTagTests") public void testSortOrderCodecSetting(String hdr) { String validString = "@HD\tVN:1.0\tSO:unknown\n"; SAMTextHeaderCodec codec = new SAMTextHeaderCodec(); SAMFileHeader header = codec.decode(BufferedLineReader.fromString(validString), null); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.coordinate); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.coordinate.name()); header.setSortOrder(SAMFileHeader.SortOrder.unsorted); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.unsorted); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.unsorted.name()); header.setAttribute(SAMFileHeader.SORT_ORDER_TAG, "badname"); Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.unknown); Assert.assertEquals(header.getAttribute(SAMFileHeader.SORT_ORDER_TAG), SAMFileHeader.SortOrder.unknown.name()); header = codec.decode(BufferedLineReader.fromString(hdr), null); Assert.assertTrue(header.getSortOrder().toString().equals("unknown")); }
@Test public void testOkFile() throws IOException { final File tmpDir = Files.createTempDirectory(TMP_DIR_NAME).toFile(); final String[] args = { "INPUT=" + PAIRED_FILE.getPath(), "TOTAL_READS_IN_INPUT=10", "SPLIT_TO_N_READS=5", "OUTPUT=" + tmpDir }; runPicardCommandLine(args); final File out1 = new File(tmpDir, "shard_0001.bam"); out1.deleteOnExit(); final File out2 = new File(tmpDir, "shard_0002.bam"); out2.deleteOnExit(); final SamReader input = SamReaderFactory.makeDefault().open(PAIRED_FILE); final SAMRecordIterator inputIter = input.iterator(); final SamReader reader1 = SamReaderFactory.makeDefault().open(out1); final SamReader reader2 = SamReaderFactory.makeDefault().open(out2); final SAMFileHeader inputHeader = input.getFileHeader(); final SAMFileHeader reader1Header = reader1.getFileHeader(); // The output BAM versions might not match the input header version if the input is outdated. inputHeader.setAttribute(SAMFileHeader.VERSION_TAG, reader1Header.getVersion()); Assert.assertEquals(inputHeader, reader1Header); Assert.assertEquals(reader1.getFileHeader(), reader2.getFileHeader()); VALIDATE_SAM_TESTER.assertSamValid(out1); VALIDATE_SAM_TESTER.assertSamValid(out2); compareInputWithOutputs(reader1, reader2, inputIter, 6); }