org.broadinstitute.hellbender.tools.spark.pipelines.CountBasesSpark Maven / Gradle / Ivy
The newest version!
package org.broadinstitute.hellbender.tools.spark.pipelines;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.broadinstitute.barclay.argparser.Argument;
import org.broadinstitute.barclay.argparser.CommandLineProgramProperties;
import org.broadinstitute.barclay.help.DocumentedFeature;
import org.broadinstitute.hellbender.cmdline.StandardArgumentDefinitions;
import org.broadinstitute.hellbender.cmdline.programgroups.CoverageAnalysisProgramGroup;
import org.broadinstitute.hellbender.engine.spark.GATKSparkTool;
import org.broadinstitute.hellbender.utils.gcs.BucketUtils;
import org.broadinstitute.hellbender.utils.read.GATKRead;
import java.io.PrintStream;
/**
* Calculate the overall number of bases SAM/BAM/CRAM file
*
* Input
*
* - A single BAM file
*
*
* Output
*
* - A text file containing number of bases
*
*
* Example
*
* Output base count to file
*
* gatk CountBasesSpark \
* -I input_reads.bam \
* -O base_count.txt
*
*
* Print base count
*
* gatk CountBasesSpark \
* -I input_reads.bam
*
*/
@CommandLineProgramProperties(
summary = "Counts bases in the input SAM/BAM",
oneLineSummary = "Counts bases in the input SAM/BAM",
programGroup = CoverageAnalysisProgramGroup.class
)
@DocumentedFeature
public final class CountBasesSpark extends GATKSparkTool {
private static final long serialVersionUID = 1L;
@Override
public boolean requiresReads() { return true; }
@Argument(
doc = "uri for the output file: a local file path",
shortName = StandardArgumentDefinitions.OUTPUT_SHORT_NAME,
fullName = StandardArgumentDefinitions.OUTPUT_LONG_NAME,
optional = true
)
public String out;
@Override
protected void runTool(final JavaSparkContext ctx) {
final JavaRDD reads = getReads();
final long count = reads.map(r -> (long)r.getLength()).fold(0L, Long::sum);
System.out.println(count);
if( out != null) {
try ( final PrintStream ps = new PrintStream(BucketUtils.createFile(out)) ) {
ps.print(count);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy