From c83f9432ebb8455661d56092775a68cabb93baec Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Wed, 27 Jul 2011 23:25:52 -0400 Subject: [PATCH] Cleaned up RefMetaDataTracker Renamed many functions to more clearly state what they are actually doing Removed unnecessary / unused functionality, reducing interface complexity Updated all uses of this code in GATK Added generic, type-safe accessors to RefMetaDataTracker such as public List getValues(final String name, Class clazz) Added standard refMetaDataTracker accessors to RodBinding, so you can do everything you can for generic rods with the tracker directly with with the RodBinding --- .../sting/commandline/RodBinding.java | 25 ++- .../commandline/VariantContextRodBinding.java | 24 +++ .../datasources/providers/RodLocusView.java | 2 +- .../ReferenceDataSourceProgressListener.java | 30 ---- .../gatk/refdata/RefMetaDataTracker.java | 151 ++++++------------ .../sting/gatk/refdata/utils/GATKFeature.java | 2 + .../sting/gatk/walkers/PileupWalker.java | 4 +- .../sting/gatk/walkers/PrintRODsWalker.java | 2 +- .../annotator/VariantAnnotatorEngine.java | 4 +- .../genomicannotator/GenomicAnnotation.java | 2 +- .../TranscriptToGenomicInfo.java | 2 +- .../beagle/BeagleOutputToVCFWalker.java | 6 +- .../coverage/CompareCallableLociWalker.java | 2 +- .../filters/VariantFiltrationWalker.java | 2 +- .../walkers/phasing/AnnotateMNPsWalker.java | 2 +- .../sting/gatk/walkers/qc/CountIntervals.java | 2 +- .../walkers/qc/RodSystemValidationWalker.java | 4 +- .../walkers/qc/ValidatingPileupWalker.java | 2 +- .../recalibration/CountCovariatesWalker.java | 2 +- .../validation/ValidationAmplicons.java | 9 +- .../varianteval/stratifications/Novelty.java | 2 +- .../variantutils/ValidateVariants.java | 4 +- .../walkers/variantutils/VariantsToVCF.java | 6 +- .../ReferenceOrderedViewUnitTest.java | 8 +- 24 files changed, 134 insertions(+), 165 deletions(-) delete mode 100644 public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSourceProgressListener.java diff --git a/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java b/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java index 86b1be162..8ad92e2d1 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java +++ b/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java @@ -25,8 +25,11 @@ package org.broadinstitute.sting.commandline; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; +import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; +import org.broadinstitute.sting.utils.exceptions.UserException; -import java.util.List; +import java.util.*; /** * @@ -50,8 +53,24 @@ public class RodBinding { return source; } - public List getAll(RefMetaDataTracker tracker) { - return tracker.getReferenceMetaData(variableName); + public List getValues(RefMetaDataTracker tracker) { + return tracker.getValues(variableName); + } + + public List getValues(RefMetaDataTracker tracker, Class clazz) { + return tracker.getValues(variableName, clazz); + } + + public T getFirstValue(RefMetaDataTracker tracker, Class clazz) { + return tracker.getFirstValue(variableName, clazz); + } + + public boolean hasValues(RefMetaDataTracker tracker) { + return tracker.hasValues(variableName); + } + + public List getValuesAsGATKFeatures(RefMetaDataTracker tracker) { + return tracker.getValuesAsGATKFeatures(variableName); } public Tags getTags() { diff --git a/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java b/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java index 29b97d07b..a9ce824f8 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java +++ b/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java @@ -43,4 +43,28 @@ public class VariantContextRodBinding extends RodBinding { public VariantContext getVariantContext(RefMetaDataTracker tracker, ReferenceContext ref, GenomeLoc loc) { return tracker.getVariantContext(ref, variableName, loc); } + +// public Collection getAllVariantContexts(ReferenceContext ref) { +// } +// +// public Collection getAllVariantContexts(ReferenceContext ref, GenomeLoc curLocation) { +// } +// +// public Collection getAllVariantContexts(ReferenceContext ref, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { +// } +// +// public Collection getVariantContexts(ReferenceContext ref, String name, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { +// } +// +// public Collection getVariantContexts(ReferenceContext ref, Collection names, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { +// } +// +// public Collection getVariantContextsByPrefix(ReferenceContext ref, Collection names, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { +// } +// +// public VariantContext getVariantContext(ReferenceContext ref, String name, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere ) { +// } +// +// public VariantContext getVariantContext(ReferenceContext ref, String name, GenomeLoc curLocation) { +// } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java index 39c632539..50c10c26e 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java @@ -140,7 +140,7 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView { private RefMetaDataTracker createTracker( Collection allTracksHere ) { RefMetaDataTracker t = new RefMetaDataTracker(allTracksHere.size()); for ( RODRecordList track : allTracksHere ) { - if ( ! t.hasROD(track.getName()) ) + if ( ! t.hasValues(track.getName()) ) t.bind(track.getName(), track); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSourceProgressListener.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSourceProgressListener.java deleted file mode 100644 index 8dace8fe4..000000000 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSourceProgressListener.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2010 The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR - * THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package org.broadinstitute.sting.gatk.datasources.reference; - -public interface ReferenceDataSourceProgressListener { - public void percentProgress(int percent); -} diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java index d03b122e2..926158a36 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java @@ -38,61 +38,45 @@ public class RefMetaDataTracker { map = new HashMap(nBindings); } + /** + * No-assumption version of getValues(name, class). Returns Objects. + */ + public List getValues(final String name) { + return getValues(name, Object.class); + } + /** * get all the reference meta data associated with a track name. * @param name the name of the track we're looking for + * @param clazz the expected class of the elements bound to rod name * @return a list of objects, representing the underlying objects that the tracks produce. I.e. for a * dbSNP RMD this will be a RodDbSNP, etc. * * Important: The list returned by this function is guaranteed not to be null, but may be empty! */ - public List getReferenceMetaData(final String name) { - RODRecordList list = getTrackDataByName(name, true); - List objects = new ArrayList(); - if (list == null) return objects; - for (GATKFeature feature : list) - objects.add(feature.getUnderlyingObject()); - return objects; - } + public List getValues(final String name, Class clazz) { + RODRecordList list = getTrackDataByName(name); - /** - * get all the reference meta data associated with a track name. - * @param name the name of the track we're looking for - * @param requireExactMatch do we require an exact match for the name (true) or do we require only that the name starts with - * the passed in parameter (false). - * @return a list of objects, representing the underlying objects that the tracks produce. I.e. for a - * dbSNP rod this will be a RodDbSNP, etc. - * - * Important: The list returned by this function is guaranteed not to be null, but may be empty! - */ - public List getReferenceMetaData(final String name, boolean requireExactMatch) { - RODRecordList list = getTrackDataByName(name, requireExactMatch); - List objects = new ArrayList(); - if (list == null) return objects; - for (GATKFeature feature : list) - objects.add(feature.getUnderlyingObject()); - return objects; - } - - /** - * get all the GATK features associated with a specific track name - * @param name the name of the track we're looking for - * @param requireExactMatch do we require an exact match for the name (true) or do we require only that the name starts with - * the passed in parameter (false). - * @return a list of GATKFeatures for the target rmd - * - * Important: The list returned by this function is guaranteed not to be null, but may be empty! - */ - public List getGATKFeatureMetaData(final String name, boolean requireExactMatch) { - List feat = getTrackDataByName(name,requireExactMatch); - return (feat == null) ? new ArrayList() : feat; // to satisfy the above requirement that we don't return null + if (list == null) + return Collections.emptyList(); + else { + List objects = new ArrayList(); + for (GATKFeature feature : list) { + final Object obj = feature.getUnderlyingObject(); + if (!(clazz.isAssignableFrom(obj.getClass()))) + throw new UserException.CommandLineException("Unable to case track named " + name + " to type of " + clazz.toString() + + " it's of type " + obj.getClass()); + objects.add((T)obj); + } + return objects; + } } /** * get a singleton record, given the name and a type. This function will return the first record at the current position seen, * and emit a logger warning if there were more than one option. * - * WARNING: this method is deprecated, since we now suppport more than one RMD at a single position for all tracks. If there are + * WARNING: we now suppport more than one RMD at a single position for all tracks. If there are * are multiple RMD objects at this location, there is no contract for which object this method will pick, and which object gets * picked may change from time to time! BE WARNED! * @@ -101,22 +85,18 @@ public class RefMetaDataTracker { * @param the type to parameterize on, matching the clazz argument * @return a record of type T, or null if no record is present. */ - @Deprecated - public T lookup(final String name, Class clazz) { - RODRecordList objects = getTrackDataByName(name, true); + public T getFirstValue(final String name, Class clazz) { + RODRecordList objects = getTrackDataByName(name); - // if emtpy or null return null; + // if empty or null return null; if (objects == null || objects.size() < 1) return null; - if (objects.size() > 1) - logger.info("lookup is choosing the first record from " + (objects.size() - 1) + " options"); - Object obj = objects.get(0).getUnderlyingObject(); if (!(clazz.isAssignableFrom(obj.getClass()))) throw new UserException.CommandLineException("Unable to case track named " + name + " to type of " + clazz.toString() + " it's of type " + obj.getClass()); - - return (T)obj; + else + return (T)obj; } /** @@ -125,7 +105,7 @@ public class RefMetaDataTracker { * @param name the name of the rod * @return true if it has the rod */ - public boolean hasROD(final String name) { + public boolean hasValues(final String name) { return map.containsKey(canonicalName(name)); } @@ -136,14 +116,25 @@ public class RefMetaDataTracker { * * @return collection of all rods */ - public Collection getAllRods() { + public Collection getAllValuesAsGATKFeatures() { List l = new ArrayList(); for ( RODRecordList rl : map.values() ) { - if ( rl == null ) continue; // how do we get null value stored for a track? shouldn't the track be missing from the map alltogether? - l.addAll(rl); + if ( rl != null ) + l.addAll(rl); } return l; + } + /** + * get all the GATK features associated with a specific track name + * @param name the name of the track we're looking for + * @return a list of GATKFeatures for the target rmd + * + * Important: The list returned by this function is guaranteed not to be null, but may be empty! + */ + public List getValuesAsGATKFeatures(final String name) { + List feat = getTrackDataByName(name); + return (feat == null) ? new ArrayList() : feat; // to satisfy the above requirement that we don't return null } /** @@ -163,23 +154,16 @@ public class RefMetaDataTracker { } /** - * @return the number of ROD bindings (name -> value) where value is not empty in this tracker + * The number of tracks with at least one value bound here + * @return */ - public int getNBoundRodTracks() { - return getNBoundRodTracks(null); - } - - public int getNBoundRodTracks(final String excludeIn ) { - final String exclude = excludeIn == null ? null : canonicalName(excludeIn); - + public int getNumberOfTracksWithValue() { int n = 0; for ( RODRecordList value : map.values() ) { if ( value != null && ! value.isEmpty() ) { - if ( exclude == null || ! value.getName().equals(exclude) ) - n++; + n++; } } - return n; } @@ -276,20 +260,7 @@ public class RefMetaDataTracker { Collection contexts = new ArrayList(); for ( String name : names ) { - RODRecordList rodList = getTrackDataByName(name,true); // require that the name is an exact match - - if ( rodList != null ) - addVariantContexts(contexts, rodList, ref, allowedTypes, curLocation, requireStartHere, takeFirstOnly ); - } - - return contexts; - } - - public Collection getVariantContextsByPrefix(ReferenceContext ref, Collection names, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { - Collection contexts = new ArrayList(); - - for ( String name : names ) { - RODRecordList rodList = getTrackDataByName(name,false); // require that the name is an exact match + RODRecordList rodList = getTrackDataByName(name); // require that the name is an exact match if ( rodList != null ) addVariantContexts(contexts, rodList, ref, allowedTypes, curLocation, requireStartHere, takeFirstOnly ); @@ -332,7 +303,6 @@ public class RefMetaDataTracker { return getVariantContext(ref, name, null, curLocation, true); } - private void addVariantContexts(Collection contexts, RODRecordList rodList, ReferenceContext ref, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { for ( GATKFeature rec : rodList ) { if ( VariantContextAdaptors.canBeConvertedToVariantContext(rec.getUnderlyingObject()) ) { @@ -367,29 +337,11 @@ public class RefMetaDataTracker { * for instance, on locus traversal, location is usually expected to be a single base we are currently looking at, * regardless of the presence of "extended" RODs overlapping with that location). * @param name track name - * @param requireExactMatch do we require an exact match of the rod name? * @return track data for the given rod */ - private RODRecordList getTrackDataByName(final String name, boolean requireExactMatch) { - //logger.debug(String.format("Lookup %s%n", name)); - + private RODRecordList getTrackDataByName(final String name) { final String luName = canonicalName(name); - RODRecordList trackData = null; - - if ( requireExactMatch ) { - if ( map.containsKey(luName) ) - trackData = map.get(luName); - } else { - for ( Map.Entry datum : map.entrySet() ) { - final String rodName = datum.getKey(); - if ( datum.getValue() != null && rodName.startsWith(luName) ) { - if ( trackData == null ) trackData = new RODRecordListImpl(name); - //System.out.printf("Adding bindings from %s to %s at %s%n", rodName, name, datum.getValue().getLocation()); - ((RODRecordListImpl)trackData).add(datum.getValue(), true); - } - } - } - return trackData; + return map.get(luName); } /** @@ -398,6 +350,7 @@ public class RefMetaDataTracker { * @return canonical name of the rod */ private final String canonicalName(final String name) { + // todo -- remove me after switch to RodBinding syntax return name.toLowerCase(); } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java index ba00eb431..6f8c9680f 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java @@ -57,6 +57,7 @@ public abstract class GATKFeature implements Feature, HasGenomeLocation { public abstract GenomeLoc getLocation(); + // TODO: this should be a Feature public abstract Object getUnderlyingObject(); /** @@ -98,6 +99,7 @@ public abstract class GATKFeature implements Feature, HasGenomeLocation { return feature.getEnd(); } + // TODO: this should be a Feature, actually public Object getUnderlyingObject() { return feature; } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java index 5db4fb417..1484841b3 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java @@ -112,14 +112,14 @@ public class PileupWalker extends LocusWalker implements TreeR */ private String getReferenceOrderedData( RefMetaDataTracker tracker ) { ArrayList rodStrings = new ArrayList(); - for ( GATKFeature datum : tracker.getAllRods() ) { + for ( GATKFeature datum : tracker.getAllValuesAsGATKFeatures() ) { if ( datum != null && datum.getUnderlyingObject() instanceof ReferenceOrderedDatum ) { rodStrings.add(((ReferenceOrderedDatum)datum.getUnderlyingObject()).toSimpleString()); // TODO: Aaron: this line still survives, try to remove it } } String rodString = Utils.join(", ", rodStrings); - DbSNPFeature dbsnp = tracker.lookup(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME, DbSNPFeature.class); + DbSNPFeature dbsnp = tracker.getFirstValue(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME, DbSNPFeature.class); if ( dbsnp != null) rodString += DbSNPHelper.toMediumString(dbsnp); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java index 158992a22..88fdd0f69 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java @@ -61,7 +61,7 @@ public class PrintRODsWalker extends RodWalker { if ( tracker == null ) return 0; - Iterator rods = tracker.getAllRods().iterator(); + Iterator rods = tracker.getAllValuesAsGATKFeatures().iterator(); while ( rods.hasNext() ) { Object rod = rods.next().getUnderlyingObject(); if (VariantContextAdaptors.canBeConvertedToVariantContext(rod) ) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java index f9b1563b4..3cf96d443 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java @@ -194,9 +194,9 @@ public class VariantAnnotatorEngine { String rsID = null; if (vc.isSNP()) - rsID = DbSNPHelper.rsIDOfFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); + rsID = DbSNPHelper.rsIDOfFirstRealSNP(tracker.getValues(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); else if (vc.isIndel()) - rsID = DbSNPHelper.rsIDOfFirstRealIndel(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); + rsID = DbSNPHelper.rsIDOfFirstRealIndel(tracker.getValues(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); infoAnnotations.put(VCFConstants.DBSNP_KEY, rsID != null ); // annotate dbsnp id if available and not already there if ( rsID != null && (!vc.hasID() || vc.getID().equals(VCFConstants.EMPTY_ID_FIELD)) ) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java index 0e8360484..1dbc09b94 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java @@ -146,7 +146,7 @@ public class GenomicAnnotation extends InfoFieldAnnotation { //iterate over each record that overlaps the current locus, and, if it passes certain filters, //add its values to the list of annotations for this locus. final Map annotations = new HashMap(); - for(final GATKFeature gatkFeature : tracker.getAllRods()) + for(final GATKFeature gatkFeature : tracker.getAllValuesAsGATKFeatures()) { final String name = gatkFeature.getName(); if( name.equals("variant") || name.equals("interval") ) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java index 0bbfa51b4..dbf051ac0 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java @@ -213,7 +213,7 @@ public class TranscriptToGenomicInfo extends RodWalker { if ( rods.size() == 0 ) return 0; - final List transcriptRODs = tracker.getReferenceMetaData(ROD_NAME); + final List transcriptRODs = tracker.getValues(ROD_NAME); //there may be multiple transcriptRODs that overlap this locus for ( Object transcriptRodObject : transcriptRODs ) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java index 21c8ec430..0720e5a16 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java @@ -130,7 +130,7 @@ public class BeagleOutputToVCFWalker extends RodWalker { vcfWriter.add(vc_input, ref.getBase()); return 1; } - List r2rods = tracker.getReferenceMetaData(R2_ROD_NAME); + List r2rods = tracker.getValues(R2_ROD_NAME); // ignore places where we don't have a variant if ( r2rods.size() == 0 ) @@ -138,7 +138,7 @@ public class BeagleOutputToVCFWalker extends RodWalker { BeagleFeature beagleR2Feature = (BeagleFeature)r2rods.get(0); - List gProbsrods = tracker.getReferenceMetaData(PROBS_ROD_NAME); + List gProbsrods = tracker.getValues(PROBS_ROD_NAME); // ignore places where we don't have a variant if ( gProbsrods.size() == 0 ) @@ -146,7 +146,7 @@ public class BeagleOutputToVCFWalker extends RodWalker { BeagleFeature beagleProbsFeature = (BeagleFeature)gProbsrods.get(0); - List gPhasedrods = tracker.getReferenceMetaData(PHASED_ROD_NAME); + List gPhasedrods = tracker.getValues(PHASED_ROD_NAME); // ignore places where we don't have a variant if ( gPhasedrods.size() == 0 ) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java index 6b91b0198..79de45d16 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java @@ -92,7 +92,7 @@ public class CompareCallableLociWalker extends RodWalker bindings = tracker.getReferenceMetaData(track); + List bindings = tracker.getValues(track); if ( bindings.size() != 1 || ! (bindings.get(0) instanceof FullBEDFeature)) { throw new UserException.MalformedFile(String.format("%s track isn't a properly formated CallableBases object!", track)); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java index 6c023573a..eb62190fb 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java @@ -152,7 +152,7 @@ public class VariantFiltrationWalker extends RodWalker { Collection VCs = tracker.getVariantContexts(ref, INPUT_VARIANT_ROD_BINDING_NAME, null, context.getLocation(), true, false); // is there a SNP mask present? - boolean hasMask = tracker.getReferenceMetaData("mask").size() > 0; + boolean hasMask = tracker.getValues("mask").size() > 0; if ( hasMask ) previousMaskPosition = ref.getLocus(); // multi-base masks will get triggered over all bases of the mask diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java index 9aa370d3f..22672b7a9 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java @@ -172,7 +172,7 @@ public class AnnotateMNPsWalker extends RodWalker { } GenomeLoc stopLoc = locParser.createGenomeLoc(curLocus.getContig(), vcLoc.getStop()); - final List refSeqRODs = tracker.getReferenceMetaData(REFSEQ_ROD_NAME); + final List refSeqRODs = tracker.getValues(REFSEQ_ROD_NAME); for (Object refSeqObject : refSeqRODs) { AnnotatorInputTableFeature refSeqAnnotation = (AnnotatorInputTableFeature) refSeqObject; locusToRefSeqFeatures.putLocusFeatures(curLocus, refSeqAnnotation, stopLoc); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java index 2bdd4558f..b4e13f879 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java @@ -36,7 +36,7 @@ public class CountIntervals extends RefWalker { return null; } - List checkIntervals = tracker.getGATKFeatureMetaData("check",false); + List checkIntervals = tracker.getValues("check"); return (long) checkIntervals.size(); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java index 170630b77..5da5fefb8 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java @@ -73,9 +73,9 @@ public class RodSystemValidationWalker extends RodWalker { @Override public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { int ret = 0; - if (tracker != null && tracker.getAllRods().size() > 0) { + if (tracker != null && tracker.getAllValuesAsGATKFeatures().size() > 0) { out.print(context.getLocation() + DIVIDER); - Collection features = tracker.getAllRods(); + Collection features = tracker.getAllValuesAsGATKFeatures(); for (GATKFeature feat : features) out.print(feat.getName() + DIVIDER); out.println(";"); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java index e1e6c4b69..0054354c7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java @@ -130,7 +130,7 @@ public class ValidatingPileupWalker extends LocusWalker { } public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { - if ( tracker == null || ! tracker.hasROD("ProbeIntervals")) { return null; } + if ( tracker == null || ! tracker.hasValues("ProbeIntervals")) { return null; } - GenomeLoc interval = ((TableFeature) tracker.getReferenceMetaData("ProbeIntervals",true).get(0)).getLocation(); + TableFeature feature = tracker.getFirstValue("ProbeIntervals", TableFeature.class); + GenomeLoc interval = feature.getLocation(); //logger.debug(interval); if ( prevInterval == null || ! interval.equals(prevInterval) ) { // we're in a new interval, we should: @@ -129,8 +130,8 @@ public class ValidationAmplicons extends RodWalker { rawSequence = new StringBuilder(); sequenceInvalid = false; invReason = new LinkedList(); - logger.debug(Utils.join("\t",((TableFeature) tracker.getReferenceMetaData("ProbeIntervals",true).get(0)).getAllValues())); - probeName = ((TableFeature) tracker.getReferenceMetaData("ProbeIntervals",true).get(0)).getValue(1); + logger.debug(Utils.join("\t",feature.getAllValues())); + probeName = feature.getValue(1); indelCounter = 0; } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java index a0973a088..1b302425d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java @@ -34,7 +34,7 @@ public class Novelty extends VariantStratifier implements StandardStratification if (tracker != null) { for (String knownName : knownNames) { - if (tracker.hasROD(knownName)) { + if (tracker.hasValues(knownName)) { EnumSet allowableTypes = EnumSet.of(VariantContext.Type.NO_VARIATION); if (eval != null) { allowableTypes.add(eval.getType()); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java index 044fc6533..5e779097a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java @@ -142,8 +142,8 @@ public class ValidateVariants extends RodWalker { // get the RS IDs Set rsIDs = null; - if ( tracker.hasROD(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME) ) { - List dbsnpList = tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME); + if ( tracker.hasValues(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME) ) { + List dbsnpList = tracker.getValues(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME); rsIDs = new HashSet(); for ( Object d : dbsnpList ) { if (d instanceof DbSNPFeature ) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java index 37fd0d547..4f5a5652f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java @@ -85,7 +85,7 @@ public class VariantsToVCF extends RodWalker { if ( tracker == null || !BaseUtils.isRegularBase(ref.getBase()) ) return 0; - String rsID = DbSNPHelper.rsIDOfFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); + String rsID = DbSNPHelper.rsIDOfFirstRealSNP(tracker.getValues(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); Collection contexts = getVariantContexts(tracker, ref); @@ -112,7 +112,7 @@ public class VariantsToVCF extends RodWalker { private Collection getVariantContexts(RefMetaDataTracker tracker, ReferenceContext ref) { // we need to special case the HapMap format because indels aren't handled correctly - List features = tracker.getReferenceMetaData(INPUT_ROD_NAME, true); + List features = tracker.getValues(INPUT_ROD_NAME); if ( features.size() > 0 && features.get(0) instanceof HapMapFeature ) { ArrayList hapmapVCs = new ArrayList(features.size()); for ( Object feature : features ) { @@ -217,7 +217,7 @@ public class VariantsToVCF extends RodWalker { samples = SampleUtils.getSampleListWithVCFHeader(getToolkit(), Arrays.asList(INPUT_ROD_NAME)); if ( samples.isEmpty() ) { - List rods = tracker.getReferenceMetaData(INPUT_ROD_NAME); + List rods = tracker.getValues(INPUT_ROD_NAME); if ( rods.size() == 0 ) throw new IllegalStateException("No rod data is present"); diff --git a/public/java/test/org/broadinstitute/sting/gatk/datasources/providers/ReferenceOrderedViewUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/datasources/providers/ReferenceOrderedViewUnitTest.java index cb156b682..21be24a85 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/datasources/providers/ReferenceOrderedViewUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/datasources/providers/ReferenceOrderedViewUnitTest.java @@ -70,7 +70,7 @@ public class ReferenceOrderedViewUnitTest extends BaseTest { ReferenceOrderedView view = new ManagingReferenceOrderedView( provider ); RefMetaDataTracker tracker = view.getReferenceOrderedDataAtLocus(genomeLocParser.createGenomeLoc("chrM",10)); - Assert.assertEquals(tracker.getAllRods().size(), 0, "The tracker should not have produced any data"); + Assert.assertEquals(tracker.getAllValuesAsGATKFeatures().size(), 0, "The tracker should not have produced any data"); } /** @@ -88,7 +88,7 @@ public class ReferenceOrderedViewUnitTest extends BaseTest { ReferenceOrderedView view = new ManagingReferenceOrderedView( provider ); RefMetaDataTracker tracker = view.getReferenceOrderedDataAtLocus(genomeLocParser.createGenomeLoc("chrM",20)); - TableFeature datum = tracker.lookup("tableTest",TableFeature.class); + TableFeature datum = tracker.getFirstValue("tableTest", TableFeature.class); Assert.assertEquals(datum.get("COL1"),"C","datum parameter for COL1 is incorrect"); Assert.assertEquals(datum.get("COL2"),"D","datum parameter for COL2 is incorrect"); @@ -114,13 +114,13 @@ public class ReferenceOrderedViewUnitTest extends BaseTest { ReferenceOrderedView view = new ManagingReferenceOrderedView( provider ); RefMetaDataTracker tracker = view.getReferenceOrderedDataAtLocus(genomeLocParser.createGenomeLoc("chrM",20)); - TableFeature datum1 = tracker.lookup("tableTest1",TableFeature.class); + TableFeature datum1 = tracker.getFirstValue("tableTest1", TableFeature.class); Assert.assertEquals(datum1.get("COL1"),"C","datum1 parameter for COL1 is incorrect"); Assert.assertEquals(datum1.get("COL2"),"D","datum1 parameter for COL2 is incorrect"); Assert.assertEquals(datum1.get("COL3"),"E","datum1 parameter for COL3 is incorrect"); - TableFeature datum2 = tracker.lookup("tableTest2", TableFeature.class); + TableFeature datum2 = tracker.getFirstValue("tableTest2", TableFeature.class); Assert.assertEquals(datum2.get("COL1"),"C","datum2 parameter for COL1 is incorrect"); Assert.assertEquals(datum2.get("COL2"),"D","datum2 parameter for COL2 is incorrect");