diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java b/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java index fec625b40..6f8be0a58 100644 --- a/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java @@ -3,6 +3,7 @@ package org.broadinstitute.sting.gatk.refdata.utils.helpers; import net.sf.samtools.util.SequenceUtil; import org.broad.tribble.annotation.Strand; import org.broad.tribble.dbsnp.DbSNPFeature; +import org.broad.tribble.util.variantcontext.VariantContext; import org.broadinstitute.sting.utils.Utils; import java.util.ArrayList; @@ -33,6 +34,28 @@ public class DbSNPHelper { return dbsnp; } + public static String rsIDOfFirstRealSNP(List featureList) { + if (featureList == null) + return null; + + String rsID = null; + for ( Object d : featureList ) { + if ( d instanceof DbSNPFeature ) { + if ( DbSNPHelper.isSNP((DbSNPFeature)d) ) { + rsID = ((DbSNPFeature)d).getRsID(); + break; + } + } else if ( d instanceof VariantContext) { + if ( ((VariantContext)d).isSNP() ) { + rsID = ((VariantContext)d).getID(); + break; + } + } + } + + return rsID; + } + /** * get the -1 * (log 10 of the error value) * diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/VariantsToVCF.java b/java/src/org/broadinstitute/sting/gatk/walkers/VariantsToVCF.java index 860994697..d5b8445f7 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/VariantsToVCF.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/VariantsToVCF.java @@ -25,7 +25,6 @@ package org.broadinstitute.sting.gatk.walkers; -import org.broad.tribble.dbsnp.DbSNPFeature; import org.broad.tribble.hapmap.HapMapFeature; import org.broad.tribble.util.variantcontext.Genotype; import org.broad.tribble.util.variantcontext.VariantContext; @@ -69,14 +68,14 @@ public class VariantsToVCF extends RodWalker { if ( tracker == null || !BaseUtils.isRegularBase(ref.getBase()) ) return 0; - DbSNPFeature dbsnp = DbSNPHelper.getFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); + String rsID = DbSNPHelper.rsIDOfFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); Collection contexts = tracker.getVariantContexts(ref, INPUT_ROD_NAME, ALLOWED_VARIANT_CONTEXT_TYPES, context.getLocation(), true, false); for ( VariantContext vc : contexts ) { Map attrs = new HashMap(vc.getAttributes()); - if ( dbsnp != null ) - attrs.put(VariantContext.ID_KEY, dbsnp.getRsID()); + if ( rsID != null ) + attrs.put(VariantContext.ID_KEY, rsID); vc = VariantContext.modifyAttributes(vc, attrs); // set the appropriate sample name if necessary diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java b/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java index 6347f2e4e..4e57912e3 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java @@ -37,7 +37,6 @@ import java.util.Map; import java.util.Set; import java.util.Map.Entry; -import org.broad.tribble.dbsnp.DbSNPFeature; import org.broad.tribble.util.variantcontext.Genotype; import org.broad.tribble.util.variantcontext.VariantContext; import org.broad.tribble.vcf.*; @@ -212,11 +211,11 @@ public class VariantAnnotatorEngine { private void annotateDBs(RefMetaDataTracker tracker, ReferenceContext ref, VariantContext vc, Map infoAnnotations) { for ( Map.Entry dbSet : dbAnnotations.entrySet() ) { if ( dbSet.getKey().equals(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME) ) { - DbSNPFeature dbsnp = DbSNPHelper.getFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); - infoAnnotations.put(VCFConstants.DBSNP_KEY, dbsnp == null ? false : true); + String rsID = DbSNPHelper.rsIDOfFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); + infoAnnotations.put(VCFConstants.DBSNP_KEY, rsID == null ? false : true); // annotate dbsnp id if available and not already there - if ( dbsnp != null && (!vc.hasAttribute(VariantContext.ID_KEY) || vc.getAttribute(VariantContext.ID_KEY).equals(VCFConstants.EMPTY_ID_FIELD)) ) - infoAnnotations.put(VariantContext.ID_KEY, dbsnp.getRsID()); + if ( rsID != null && (!vc.hasID() || vc.getID().equals(VCFConstants.EMPTY_ID_FIELD)) ) + infoAnnotations.put(VariantContext.ID_KEY, rsID); } else { boolean overlapsComp = false; for ( VariantContext comp : tracker.getVariantContexts(ref, dbSet.getKey(), null, ref.getLocus(), false, false) ) { diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java b/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java index 88f11c31a..921595bd2 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -45,7 +45,6 @@ import org.broadinstitute.sting.utils.pileup.*; import org.broadinstitute.sting.utils.sam.GATKSAMRecordFilter; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.broad.tribble.vcf.VCFConstants; -import org.broad.tribble.dbsnp.DbSNPFeature; import java.io.PrintStream; import java.util.*; @@ -312,9 +311,9 @@ public class UnifiedGenotyperEngine { // *** note that calculating strand bias involves overwriting data structures, so we do that last HashMap attributes = new HashMap(); - DbSNPFeature dbsnp = getDbSNP(tracker); - if ( dbsnp != null ) - attributes.put(VariantContext.ID_KEY, dbsnp.getRsID()); + String rsID = DbSNPHelper.rsIDOfFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); + if ( rsID != null ) + attributes.put(VariantContext.ID_KEY, rsID); // if the site was downsampled, record that fact if ( rawContext.hasPileupBeenDownsampled() ) @@ -598,15 +597,6 @@ public class UnifiedGenotyperEngine { } } - /** - * @param tracker rod data - * - * @return the dbsnp rod if there is one at this position - */ - protected static DbSNPFeature getDbSNP(RefMetaDataTracker tracker) { - return DbSNPHelper.getFirstRealSNP(tracker.getReferenceMetaData(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME)); - } - protected boolean passesEmitThreshold(double conf, int bestAFguess, boolean atTriggerTrack) { return (atTriggerTrack ? (conf >= Math.min(UAC.TRIGGER_CONFIDENCE_FOR_CALLING, UAC.TRIGGER_CONFIDENCE_FOR_EMITTING)) :