From a8f8077d7adfb39656ede48cfcef52495d3f893e Mon Sep 17 00:00:00 2001 From: depristo Date: Wed, 20 Apr 2011 10:52:16 +0000 Subject: [PATCH] Simple optimizations for cases where there is no data or RODs at sites, such as with the FastaStats walker. private static immutable Lists and Maps in underlying data structures that have no associated data. Also, avoiding a double map.get() in the low-level genome loc parser. RefMetaDataTracker is now git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5664 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/datasources/providers/AllLocusView.java | 7 +++++-- .../providers/ManagingReferenceOrderedView.java | 4 ++-- .../sting/gatk/datasources/providers/RodLocusView.java | 2 +- .../sting/gatk/refdata/RefMetaDataTracker.java | 8 +++++++- .../org/broadinstitute/sting/utils/GenomeLocParser.java | 6 +++--- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java index 6d7631a13..90e8a2c3a 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java @@ -1,5 +1,6 @@ package org.broadinstitute.sting.gatk.datasources.providers; +import java.util.List; import java.util.NoSuchElementException; import java.util.ArrayList; import java.util.Collections; @@ -97,7 +98,9 @@ public class AllLocusView extends LocusView { * @param site Site at which to create the blank locus context. * @return empty context. */ - private AlignmentContext createEmptyLocus( GenomeLoc site ) { - return new AlignmentContext(site,new ReadBackedPileupImpl(site,new ArrayList(), new ArrayList())); + private final static List EMPTY_PILEUP_READS = Collections.emptyList(); + private final static List EMPTY_PILEUP_OFFSETS = Collections.emptyList(); + private AlignmentContext createEmptyLocus( GenomeLoc site ) { + return new AlignmentContext(site,new ReadBackedPileupImpl(site, EMPTY_PILEUP_READS, EMPTY_PILEUP_OFFSETS)); } } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java index b4b1d7f8a..a91e169c1 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java @@ -50,8 +50,8 @@ public class ManagingReferenceOrderedView implements ReferenceOrderedView { * @return A tracker containing information about this locus. */ public RefMetaDataTracker getReferenceOrderedDataAtLocus( GenomeLoc loc ) { - RefMetaDataTracker tracks = new RefMetaDataTracker(); - for (ReferenceOrderedDataState state: states ) + RefMetaDataTracker tracks = new RefMetaDataTracker(states.size()); + for ( ReferenceOrderedDataState state: states ) tracks.bind( state.dataSource.getName(), state.iterator.seekForward(loc) ); return tracks; } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java index e2ce6b331..feed2ab85 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java @@ -138,7 +138,7 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView { } private RefMetaDataTracker createTracker( Collection allTracksHere ) { - RefMetaDataTracker t = new RefMetaDataTracker(); + RefMetaDataTracker t = new RefMetaDataTracker(allTracksHere.size()); for ( RODRecordList track : allTracksHere ) { if ( ! t.hasROD(track.getName()) ) t.bind(track.getName(), track); diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java b/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java index 48f3354d2..d5063d643 100644 --- a/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java @@ -28,9 +28,15 @@ Genotype * Traversal calls tracker.bind(name, RMD) for each RMDs in RMDs * Time: 3:05:23 PM */ public class RefMetaDataTracker { - final HashMap map = new HashMap(); + final Map map; protected static Logger logger = Logger.getLogger(RefMetaDataTracker.class); + public RefMetaDataTracker(int nBindings) { + if ( nBindings == 0 ) + map = Collections.emptyMap(); + else + map = new HashMap(nBindings); + } /** * get all the reference meta data associated with a track name. diff --git a/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java b/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java index 439cd41f7..717ced97f 100644 --- a/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java +++ b/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java @@ -106,10 +106,10 @@ public class GenomeLocParser { * @return the contig index, -1 if not found */ public int getContigIndex(final String contig, boolean exceptionOut) { - if (contigInfo.getSequenceIndex(contig) == -1 && exceptionOut) + int idx = contigInfo.getSequenceIndex(contig); + if (idx == -1 && exceptionOut) throw new UserException.CommandLineException(String.format("Contig %s given as location, but this contig isn't present in the Fasta sequence dictionary", contig)); - - return contigInfo.getSequenceIndex(contig); + return idx; } /**