Added an auxiliary table to DepthOfCoverage, which is the cumulative equivalent of the locus table (got tired of doing the calculation by hand). Also took care of a trailing tab in the per-locus output table.
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3138 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
fab31e1d53
commit
7025f5b51d
|
|
@ -274,4 +274,16 @@ public class DepthOfCoverageStats {
|
|||
return totalDepthOfCoverage;
|
||||
}
|
||||
|
||||
public double[] getCoverageProportions(String sample) {
|
||||
int[] hist = granularHistogramBySample.get(sample);
|
||||
double[] distribution = new double[hist.length];
|
||||
long count = 0;
|
||||
for ( int i = hist.length-1; i >= 0; i -- ) {
|
||||
count += hist[i];
|
||||
distribution[i] = ( (double) count) / nLoci;
|
||||
}
|
||||
|
||||
return distribution;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -476,12 +476,14 @@ public class DepthOfCoverageWalker extends LocusWalker<Map<String,int[]>, Covera
|
|||
logger.info("Printing locus summary");
|
||||
if ( ! useReadGroup || useBoth ) {
|
||||
File perLocusStatisticsFile = deriveFromStream("sample_locus_statistics");
|
||||
printPerLocus(perLocusStatisticsFile,coverageProfiles.getCoverageBySample());
|
||||
File perLocusCoverageFile = deriveFromStream("sample_coverage_statistics");
|
||||
printPerLocus(perLocusStatisticsFile,perLocusCoverageFile,coverageProfiles.getCoverageBySample());
|
||||
}
|
||||
|
||||
if ( useReadGroup || useBoth ) {
|
||||
File perLocusRGStats = deriveFromStream("read_group_locus_statistics");
|
||||
printPerLocus(perLocusRGStats,coverageProfiles.getCoverageByReadGroup());
|
||||
File perLocusRGCoverage = deriveFromStream("read_group_locus_coverage");
|
||||
printPerLocus(perLocusRGStats,perLocusRGCoverage,coverageProfiles.getCoverageByReadGroup());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -521,8 +523,9 @@ public class DepthOfCoverageWalker extends LocusWalker<Map<String,int[]>, Covera
|
|||
}
|
||||
}
|
||||
|
||||
private void printPerLocus(File locusFile, DepthOfCoverageStats stats) {
|
||||
private void printPerLocus(File locusFile, File coverageFile, DepthOfCoverageStats stats) {
|
||||
PrintStream output = getCorrectStream(out,locusFile);
|
||||
PrintStream coverageOut = getCorrectStream(out,coverageFile);
|
||||
if ( output == null ) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -543,14 +546,24 @@ public class DepthOfCoverageWalker extends LocusWalker<Map<String,int[]>, Covera
|
|||
header.append(String.format("%n"));
|
||||
|
||||
output.print(header);
|
||||
coverageOut.print(header);
|
||||
|
||||
for ( int row = 0; row < samples; row ++ ) {
|
||||
output.printf("%s_%d\t","NSamples",row+1);
|
||||
output.printf("%s_%d","NSamples",row+1);
|
||||
for ( int depthBin = 0; depthBin < baseCoverageCumDist[0].length; depthBin ++ ) {
|
||||
output.printf("%d\t",baseCoverageCumDist[row][depthBin]);
|
||||
output.printf("\t%d",baseCoverageCumDist[row][depthBin]);
|
||||
}
|
||||
output.printf("%n");
|
||||
}
|
||||
|
||||
for ( String sample : stats.getAllSamples() ) {
|
||||
coverageOut.printf("%s",sample);
|
||||
double[] coverageDistribution = stats.getCoverageProportions(sample);
|
||||
for ( int bin = 0; bin < coverageDistribution.length; bin ++ ) {
|
||||
coverageOut.printf("\t%.2f",coverageDistribution[bin]);
|
||||
}
|
||||
coverageOut.printf("%n");
|
||||
}
|
||||
}
|
||||
|
||||
private PrintStream getCorrectStream(PrintStream out, File optionalFile) {
|
||||
|
|
|
|||
|
|
@ -10,13 +10,6 @@ import org.broadinstitute.sting.gatk.walkers.Requires;
|
|||
import org.broadinstitute.sting.gatk.walkers.RodWalker;
|
||||
import org.broadinstitute.sting.utils.cmdLine.Argument;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: chartl
|
||||
* Date: Jan 27, 2010
|
||||
* Time: 10:40:44 AM
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
/*
|
||||
* Calculates per-sample concordance metrics across two multi-sample VCF files; outputs simple counts of concordant
|
||||
* variant and genotype calls, genotyping errors, and call errors. Requires a VCF binding with the name 'truth' and
|
||||
|
|
|
|||
|
|
@ -60,12 +60,12 @@ public class DepthOfCoverageIntegrationTest extends WalkerTest {
|
|||
spec.addAuxFile("959937a9b0ace520b4b7d9915d708003", baseOutputFile);
|
||||
spec.addAuxFile("aff2349d6dc221c08f6c469379aeaedf", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_interval_statistics"));
|
||||
spec.addAuxFile("6476ed0c54a4307a618aa6d3268b050f", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_interval_summary"));
|
||||
spec.addAuxFile("50870dad272f03f77befb0075baed1cd", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_locus_statistics"));
|
||||
spec.addAuxFile("faf63982622764299c734299ffeb3c63", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_locus_statistics"));
|
||||
spec.addAuxFile("65318c1e73d98a59cc6f817cde12d3d4", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_summary_statistics"));
|
||||
spec.addAuxFile("ef8c3e2ba3fc0da829e10e2d487c00d2", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_statistics"));
|
||||
spec.addAuxFile("223377e07b35e81a394b75b38d8e72ee", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".read_group_interval_statistics"));
|
||||
spec.addAuxFile("096f4ed94020327288ea76245ebd6942", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".read_group_interval_summary"));
|
||||
spec.addAuxFile("06ed004c86f8b2ad8e64a3b42a0d85c5", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".read_group_locus_statistics"));
|
||||
spec.addAuxFile("8e391b7b84fc19dff83002b6dd9773d8", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".read_group_locus_statistics"));
|
||||
spec.addAuxFile("43c160ff9d754744728c142709011993", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".read_group_statistics"));
|
||||
spec.addAuxFile("a374410efe20609c5c4b87a6da7f4d51", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".read_group_summary"));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue