private void pruneReadGroups(final SAMFileHeader header) { if (readGroupsToKeep.isEmpty()) return; final List<SAMReadGroupRecord> readGroups = new ArrayList<>(); for (final SAMReadGroupRecord rg : header.getReadGroups()) { if (readGroupsToKeep.contains(rg.getReadGroupId())) readGroups.add(rg); } header.setReadGroups(readGroups); } }
/** * setup a default read group for a SAMFileHeader * * @param header the header to set * @param readGroupID the read group ID tag * @param sampleName the sample name * @return the adjusted SAMFileHeader */ public static SAMFileHeader createDefaultReadGroup(SAMFileHeader header, String readGroupID, String sampleName) { SAMReadGroupRecord rec = new SAMReadGroupRecord(readGroupID); rec.setSample(sampleName); List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>(); readGroups.add(rec); header.setReadGroups(readGroups); return header; }
/** * setup read groups for the specified read groups and sample names * * @param header the header to set * @param readGroupIDs the read group ID tags * @param sampleNames the sample names * @return the adjusted SAMFileHeader */ public static SAMFileHeader createEnumeratedReadGroups(SAMFileHeader header, List<String> readGroupIDs, List<String> sampleNames) { if (readGroupIDs.size() != sampleNames.size()) { throw new ReviewedGATKException("read group count and sample name count must be the same"); } List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>(); int x = 0; for (; x < readGroupIDs.size(); x++) { SAMReadGroupRecord rec = new SAMReadGroupRecord(readGroupIDs.get(x)); rec.setSample(sampleNames.get(x)); readGroups.add(rec); } header.setReadGroups(readGroups); return header; }
@Override public Map<String, SAMFileWriter> reduceInit() { HashMap<String, SAMFileHeader> headers = new HashMap<>(); for ( SAMReadGroupRecord readGroup : this.getToolkit().getSAMFileHeader().getReadGroups()) { final String sample = readGroup.getSample(); if ( ! headers.containsKey(sample) ) { SAMFileHeader header = duplicateSAMFileHeader(this.getToolkit().getSAMFileHeader()); logger.debug(String.format("Creating BAM header for sample %s", sample)); ArrayList<SAMReadGroupRecord> readGroups = new ArrayList<>(); header.setReadGroups(readGroups); headers.put(sample, header); } SAMFileHeader header = headers.get(sample); List<SAMReadGroupRecord> newReadGroups = new ArrayList<>(header.getReadGroups()); newReadGroups.add(readGroup); header.setReadGroups(newReadGroups); } HashMap<String, SAMFileWriter> outputs = new HashMap<>(); final OutputTracker outputTracker = new DirectOutputTracker(); for ( Map.Entry<String, SAMFileHeader> elt : headers.entrySet() ) { final String sample = elt.getKey(); final String filename = outputRoot + sample + ".bam"; logger.info(String.format("Creating BAM output file %s for sample %s", filename, sample)); final SAMFileWriter output = SAMFileWriterStub.createSAMFileWriter(filename, getToolkit(), elt.getValue()); outputs.put(sample, output); outputTracker.addOutput( (SAMFileWriterStub) output); } return outputs; }
@Test(expectedExceptions = UserException.class) public void testGetSAMFileMissingReadGroupsSamples() { final SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(); final SAMReadGroupRecord samGroup = new SAMReadGroupRecord("id"); final List<SAMReadGroupRecord> list = new ArrayList<>(Arrays.asList(samGroup)); header.setReadGroups(list); ReadUtils.getSAMFileSamples(header); } }
public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup, final int defaultChromosomeLength, final ScoringStrategy duplicateScoringStrategy) { final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>(); for (final String chrom : chroms) { final SAMSequenceRecord sequenceRecord = new SAMSequenceRecord(chrom, defaultChromosomeLength); sequences.add(sequenceRecord); } this.header = new SAMFileHeader(); this.header.setSequenceDictionary(new SAMSequenceDictionary(sequences)); this.header.setSortOrder(sortOrder); if (sortForMe) { final SAMRecordComparator comparator; if (sortOrder == SAMFileHeader.SortOrder.queryname) { comparator = new SAMRecordQueryNameComparator(); } else { comparator = new SAMRecordCoordinateComparator(); } this.records = new TreeSet<SAMRecord>(comparator); } else { this.records = new ArrayList<SAMRecord>(); } if (addReadGroup) { final SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(READ_GROUP_ID); readGroupRecord.setSample(SAMPLE); readGroupRecord.setPlatform("ILLUMINA"); final List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>(); readGroups.add(readGroupRecord); this.header.setReadGroups(readGroups); } }
public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup, final int defaultChromosomeLength) { final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>(); for (final String chrom : chroms) { final SAMSequenceRecord sequenceRecord = new SAMSequenceRecord(chrom, defaultChromosomeLength); sequences.add(sequenceRecord); } this.header = new SAMFileHeader(); this.header.setSequenceDictionary(new SAMSequenceDictionary(sequences)); this.header.setSortOrder(sortOrder); if (sortForMe) { final SAMRecordComparator comparator; if (sortOrder == SAMFileHeader.SortOrder.queryname) { comparator = new SAMRecordQueryNameComparator(); } else { comparator = new SAMRecordCoordinateComparator(); } this.records = new TreeSet<SAMRecord>(comparator); } else { this.records = new ArrayList<SAMRecord>(); } if (addReadGroup) { final SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(READ_GROUP_ID); readGroupRecord.setSample(SAMPLE); readGroupRecord.setPlatform("ILLUMINA"); final List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>(); readGroups.add(readGroupRecord); this.header.setReadGroups(readGroups); } }
public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup, final int defaultChromosomeLength, final ScoringStrategy duplicateScoringStrategy) { final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>(); for (final String chrom : chroms) { final SAMSequenceRecord sequenceRecord = new SAMSequenceRecord(chrom, defaultChromosomeLength); sequences.add(sequenceRecord); } this.header = new SAMFileHeader(); this.header.setSequenceDictionary(new SAMSequenceDictionary(sequences)); this.header.setSortOrder(sortOrder); if (sortForMe) { final SAMRecordComparator comparator; if (sortOrder == SAMFileHeader.SortOrder.queryname) { comparator = new SAMRecordQueryNameComparator(); } else { comparator = new SAMRecordCoordinateComparator(); } this.records = new TreeSet<SAMRecord>(comparator); } else { this.records = new ArrayList<SAMRecord>(); } if (addReadGroup) { final SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(READ_GROUP_ID); readGroupRecord.setSample(SAMPLE); readGroupRecord.setPlatform("ILLUMINA"); final List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>(); readGroups.add(readGroupRecord); this.header.setReadGroups(readGroups); } }
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); }
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; }
@Override List<? extends AbstractSAMHeaderRecord> createGroups(final String[] groupIds) { final List<SamReader> readers = new ArrayList<SamReader>(); for (final String groupId : groupIds) { final SamReader samReader = newFileReader(); final List<SAMReadGroupRecord> records = new ArrayList<SAMReadGroupRecord>(); final SAMReadGroupRecord record = new SAMReadGroupRecord(groupId); records.add(record); samReader.getFileHeader().setReadGroups(records); readers.add(samReader); } final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(); for (final SamReader reader : readers) { headers.add(reader.getFileHeader()); } CloserUtil.close(readers); final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false); return fileHeaderMerger.getMergedHeader().getReadGroups(); }
mFileHeader.setReadGroups(readGroups);
mFileHeader.setReadGroups(readGroups);
mFileHeader.setReadGroups(readGroups);
@Override public void initialize() { // initialize sample -> read group map final List<SAMReadGroupRecord> sampleRGs = new ArrayList<SAMReadGroupRecord>(); for ( final String sample : SampleUtils.getUniqueSamplesFromRods(getToolkit(), Arrays.asList(variantCollection.variants.getName())) ) { final SAMReadGroupRecord rg = createRG(sample); sampleRGs.add(rg); sample2RG.put(sample, rg); } // initialize BAM headers header = new SAMFileHeader(); header.setSequenceDictionary(getToolkit().getReferenceDataSource().getReference().getSequenceDictionary()); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); header.setReadGroups(sampleRGs); final SAMProgramRecord programRecord = new SAMProgramRecord(PROGRAM_RECORD_NAME); if ( !NO_PG_TAG ) { programRecord.setProgramVersion(CommandLineProgram.getVersionNumber()); programRecord.setCommandLine(getToolkit().createApproximateCommandLineArgumentString(getToolkit(), this)); } header.setProgramRecords(Arrays.asList(programRecord)); readWriter.setPresorted(false); readWriter.writeHeader(header); halfReadLength = readLength / 2; errorRate = QualityUtils.qualToErrorProb((byte)phredErrorRate); readQuals = new byte[readLength]; Arrays.fill(readQuals, (byte)phredErrorRate); if ( samplingMode == ReadSamplingMode.POISSON ) poissonRandom = new Poisson(readDepth, new MersenneTwister((int)RANDOM_SEED)); }
this.mergedHeader.setReadGroups(readGroups); this.mergedHeader.setGroupOrder(SAMFileHeader.GroupOrder.none);
this.mergedHeader.setReadGroups(readGroups); this.mergedHeader.setGroupOrder(SAMFileHeader.GroupOrder.none);
this.mergedHeader.setReadGroups(readGroups); this.mergedHeader.setGroupOrder(SAMFileHeader.GroupOrder.none);
outHeader.setReadGroups(Collections.singletonList(rg)); if (SORT_ORDER != null) outHeader.setSortOrder(SORT_ORDER);
outHeader.setReadGroups(Collections.singletonList(rg)); if (SORT_ORDER != null) outHeader.setSortOrder(SORT_ORDER);