diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java index 97f6fb37a..f339b24da 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java @@ -21,6 +21,9 @@ public abstract class TraversalEngine { /** our log, which we want to capture anything from this class */ protected static Logger logger = Logger.getLogger(TraversalEngine.class); + /** what kind of traversal we're undertaking. This allows us to format output correctly */ + public enum TRAVERSAL_TYPE { READ, LOCUS, LOCUS_WINDOW, DUPLICATE }; + /** * set the max number of iterations * @param maximumIterations the number of iterations @@ -41,10 +44,10 @@ public abstract class TraversalEngine { /** * Forward request to printProgress * - * @param type the type of traversal + * @param type the TRAVERSAL_TYPE of the traversal * @param loc the location */ - public void printProgress(final String type, GenomeLoc loc) { + public void printProgress(final TRAVERSAL_TYPE type, GenomeLoc loc) { printProgress(false, type, loc); } @@ -56,7 +59,7 @@ public abstract class TraversalEngine { * @param type String to print out describing our atomic traversal type ("read", "locus", etc) * @param loc Current location */ - private void printProgress(boolean mustPrint, final String type, GenomeLoc loc) { + private void printProgress(boolean mustPrint, final TRAVERSAL_TYPE type, GenomeLoc loc) { final long nRecords = TraversalStatistics.nRecords; final long curTime = System.currentTimeMillis(); final double elapsed = (curTime - startTime) / 1000.0; @@ -65,12 +68,39 @@ public abstract class TraversalEngine { if (mustPrint || nRecords == 1 || nRecords % N_RECORDS_TO_PRINT == 0 || maxElapsedIntervalForPrinting(curTime)) { this.lastProgressPrintTime = curTime; final double secsPer1MReads = (elapsed * 1000000.0) / nRecords; - if (loc != null) - logger.info(String.format("[PROGRESS] Traversed to %s, processing %,d %s in %.2f secs (%.2f secs per 1M %s)", loc, nRecords, type, elapsed, secsPer1MReads, type)); - else - logger.info(String.format("[PROGRESS] Traversed %,d %s in %.2f secs (%.2f secs per 1M %s)", nRecords, type, elapsed, secsPer1MReads, type)); - - } + switch (type) { + case LOCUS: + logger.info(String.format("[PROGRESS] Traversed to %s, processing %,d loci in %.2f secs (%.2f secs per 1M loci)", + loc, + nRecords, + elapsed, + secsPer1MReads));break; + case READ: + logger.info(String.format("[PROGRESS] Traversed %,d reads in %.2f secs %s(%.2f secs per 1M reads)", + nRecords, + elapsed, + (loc != null) ? String.format("at location %s ",loc) : "", + secsPer1MReads));break; + case DUPLICATE: + logger.info(String.format("[PROGRESS] Traversed %,d dups in %.2f secs %s(%.2f secs per 1M dups)", + nRecords, + elapsed, + (loc != null) ? String.format("at location %s ",loc) : "", + secsPer1MReads));break; + case LOCUS_WINDOW: + logger.info(String.format("[PROGRESS] Traversed %,d intervals in %.2f secs over interval %s (%.2f secs per 1M intervals)", + nRecords, + elapsed, + loc, + secsPer1MReads));break; + default: + logger.info(String.format("[PROGRESS] Traversed %,d records in %.2f secs (%.2f secs per 1M intervals)%s", + nRecords, + elapsed, + secsPer1MReads, + (loc != null) ? String.format(", last location seen was %s",loc) : "")); + } + } } /** @@ -84,11 +114,11 @@ public abstract class TraversalEngine { /** * Called after a traversal to print out information about the traversal process * - * @param type String describing this type of traversal ("loci", "read") + * @param type TRAVERSAL_TYPE describing this type of traversal * @param sum The reduce result of the traversal * @param ReduceType of the traversal */ - protected void printOnTraversalDone(final String type, T sum) { + protected void printOnTraversalDone(final TRAVERSAL_TYPE type, T sum) { printProgress(true, type, null); logger.info("Traversal reduce result is " + sum); final long curTime = System.currentTimeMillis(); diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java index d17edea30..bd4089ded 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java @@ -203,7 +203,7 @@ public class TraverseDuplicates extends TraversalEngine { if (duplicateReads.size() > 0) sum = mapOne(dupWalker, uniqueReads, duplicateReads, site, refBases, locus, sum); - printProgress("dups", site); + printProgress(TRAVERSAL_TYPE.DUPLICATE, site); if (this.maximumIterations > 0 && TraversalStatistics.nRecords > this.maximumIterations) { logger.warn(String.format(("Maximum number of duplicate sets encountered, terminating traversal " + TraversalStatistics.nRecords))); @@ -309,6 +309,6 @@ public class TraverseDuplicates extends TraversalEngine { * @param Type of the result. */ public void printOnTraversalDone(T sum) { - printOnTraversalDone("reads", sum); + printOnTraversalDone(TRAVERSAL_TYPE.DUPLICATE, sum); } } \ No newline at end of file diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java index 0c6b7a301..dd40e85e6 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java @@ -86,7 +86,7 @@ public class TraverseLoci extends TraversalEngine { break; } - printProgress(UNIT_STRING, locus.getLocation()); + printProgress(TRAVERSAL_TYPE.LOCUS, locus.getLocation()); } } @@ -113,7 +113,7 @@ public class TraverseLoci extends TraversalEngine { * @param Type of the result. */ public void printOnTraversalDone( T sum ) { - printOnTraversalDone( UNIT_STRING, sum ); + printOnTraversalDone( TRAVERSAL_TYPE.LOCUS, sum ); } /** diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java index 2ea1f9a4c..0af23805c 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java @@ -58,7 +58,7 @@ public class TraverseLocusWindows extends TraversalEngine { sum = locusWindowWalker.reduce(x, sum); } - printProgress("intervals", locus.getLocation()); + printProgress(TRAVERSAL_TYPE.LOCUS_WINDOW, locus.getLocation()); return sum; } @@ -98,7 +98,7 @@ public class TraverseLocusWindows extends TraversalEngine { * @param Type of the result. */ public void printOnTraversalDone( T sum ) { - printOnTraversalDone( "intervals", sum ); + printOnTraversalDone( TRAVERSAL_TYPE.LOCUS_WINDOW, sum ); } } diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java index 370536ae9..5b43032a1 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java @@ -121,7 +121,10 @@ public class TraverseReads extends TraversalEngine { sum = readWalker.reduce(x, sum); } - printProgress("reads", null); + printProgress(TRAVERSAL_TYPE.READ, + (read.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) ? + null : + GenomeLocParser.createGenomeLoc(read.getReferenceIndex(),read.getAlignmentStart())); } return sum; } @@ -133,6 +136,6 @@ public class TraverseReads extends TraversalEngine { * @param Type of the result. */ public void printOnTraversalDone( T sum ) { - printOnTraversalDone( "reads", sum ); + printOnTraversalDone(TRAVERSAL_TYPE.READ, sum ); } } diff --git a/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java b/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java index d2d59c924..b9b598e02 100644 --- a/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java +++ b/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java @@ -118,7 +118,7 @@ public class ArtificialReadsTraversal extends TraversalEngine { sum = readWalker.reduce(x, sum); } - if (alignment != null) { printProgress("loci", alignment.getLocation()); } + if (alignment != null) { printProgress(TRAVERSAL_TYPE.READ, alignment.getLocation()); } } return sum; } @@ -131,7 +131,7 @@ public class ArtificialReadsTraversal extends TraversalEngine { * @param Type of the result. */ public void printOnTraversalDone( T sum ) { - printOnTraversalDone("reads", sum); + printOnTraversalDone(TRAVERSAL_TYPE.READ, sum); } diff --git a/java/test/org/broadinstitute/sting/gatk/traversals/TraverseReadsTest.java b/java/test/org/broadinstitute/sting/gatk/traversals/TraverseReadsTest.java index a09e7b1d7..dfab639a0 100755 --- a/java/test/org/broadinstitute/sting/gatk/traversals/TraverseReadsTest.java +++ b/java/test/org/broadinstitute/sting/gatk/traversals/TraverseReadsTest.java @@ -139,7 +139,7 @@ public class TraverseReadsTest extends BaseTest { } - traversalEngine.printOnTraversalDone("loci", accumulator); + traversalEngine.printOnTraversalDone(TraversalEngine.TRAVERSAL_TYPE.READ, accumulator); countReadWalker.onTraversalDone(accumulator); if (!(accumulator instanceof Integer)) { @@ -185,7 +185,7 @@ public class TraverseReadsTest extends BaseTest { dataProvider.close(); } - traversalEngine.printOnTraversalDone("loci", accumulator); + traversalEngine.printOnTraversalDone(TraversalEngine.TRAVERSAL_TYPE.READ, accumulator); countReadWalker.onTraversalDone(accumulator); if (!(accumulator instanceof Integer)) {