protected int doWork() { IoUtil.assertFileIsReadable(INPUT); IoUtil.assertFileIsWritable(OUTPUT); final SAMFileReader in = new SAMFileReader(INPUT); // create the read group we'll be using final SAMReadGroupRecord rg = new SAMReadGroupRecord(RGID); rg.setLibrary(RGLB); rg.setPlatform(RGPL); rg.setSample(RGSM); rg.setPlatformUnit(RGPU); if (RGCN != null) rg.setSequencingCenter(RGCN); if (RGDS != null) rg.setDescription(RGDS); if (RGDT != null) rg.setRunDate(RGDT); log.info( String.format( "Created read group ID=%s PL=%s LB=%s SM=%s%n", rg.getId(), rg.getPlatform(), rg.getLibrary(), rg.getSample())); // create the new header and output file final SAMFileHeader inHeader = in.getFileHeader(); final SAMFileHeader outHeader = inHeader.clone(); outHeader.setReadGroups(Arrays.asList(rg)); if (SORT_ORDER != null) outHeader.setSortOrder(SORT_ORDER); final SAMFileWriter outWriter = new SAMFileWriterFactory() .makeSAMOrBAMWriter( outHeader, outHeader.getSortOrder() == inHeader.getSortOrder(), OUTPUT); final ProgressLogger progress = new ProgressLogger(log); for (final SAMRecord read : in) { read.setAttribute(SAMTag.RG.name(), RGID); outWriter.addAlignment(read); progress.record(read); } // cleanup in.close(); outWriter.close(); return 0; }
/** * Asserts that files are readable and writable and then fires off an HsMetricsCalculator instance * to do the real work. */ protected int doWork() { IoUtil.assertFileIsReadable(getProbeIntervals()); IoUtil.assertFileIsReadable(TARGET_INTERVALS); IoUtil.assertFileIsReadable(INPUT); IoUtil.assertFileIsWritable(OUTPUT); if (PER_TARGET_COVERAGE != null) IoUtil.assertFileIsWritable(PER_TARGET_COVERAGE); final SAMFileReader samReader = new SAMFileReader(INPUT); final File probeIntervals = getProbeIntervals(); // Validate that the targets and baits have the same references as the reads file SequenceUtil.assertSequenceDictionariesEqual( samReader.getFileHeader().getSequenceDictionary(), IntervalList.fromFile(TARGET_INTERVALS).getHeader().getSequenceDictionary(), INPUT, TARGET_INTERVALS); SequenceUtil.assertSequenceDictionariesEqual( samReader.getFileHeader().getSequenceDictionary(), IntervalList.fromFile(probeIntervals).getHeader().getSequenceDictionary(), INPUT, probeIntervals); ReferenceSequenceFile ref = null; if (REFERENCE_SEQUENCE != null) { IoUtil.assertFileIsReadable(REFERENCE_SEQUENCE); ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE); SequenceUtil.assertSequenceDictionariesEqual( samReader.getFileHeader().getSequenceDictionary(), ref.getSequenceDictionary(), INPUT, REFERENCE_SEQUENCE); } final TargetMetricsCollector collector = makeCollector( METRIC_ACCUMULATION_LEVEL, samReader.getFileHeader().getReadGroups(), ref, PER_TARGET_COVERAGE, TARGET_INTERVALS, probeIntervals, getProbeSetName()); // Add each record to the requested collectors final Iterator<SAMRecord> records = samReader.iterator(); final ProgressLogger progress = new ProgressLogger(log); while (records.hasNext()) { final SAMRecord sam = records.next(); collector.acceptRecord(sam, null); progress.record(sam); } // Write the output file final MetricsFile<HsMetrics, Integer> metrics = getMetricsFile(); collector.finish(); collector.addAllLevelsToFile(metrics); metrics.write(OUTPUT); return 0; }