Merge branch 'master' of ssh://nickel.broadinstitute.org/humgen/gsa-scr1/gsa-engineering/git/unstable
This commit is contained in:
commit
c08a9964d4
|
|
@ -34,10 +34,7 @@ import org.broadinstitute.sting.gatk.filters.ReadFilter;
|
||||||
import org.broadinstitute.sting.gatk.walkers.Attribution;
|
import org.broadinstitute.sting.gatk.walkers.Attribution;
|
||||||
import org.broadinstitute.sting.gatk.walkers.Walker;
|
import org.broadinstitute.sting.gatk.walkers.Walker;
|
||||||
import org.broadinstitute.sting.utils.exceptions.UserException;
|
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||||||
import org.broadinstitute.sting.utils.help.ApplicationDetails;
|
import org.broadinstitute.sting.utils.help.*;
|
||||||
import org.broadinstitute.sting.utils.help.DocumentedGATKFeature;
|
|
||||||
import org.broadinstitute.sting.utils.help.GATKDocUtils;
|
|
||||||
import org.broadinstitute.sting.utils.help.GATKDoclet;
|
|
||||||
import org.broadinstitute.sting.utils.text.TextFormattingUtils;
|
import org.broadinstitute.sting.utils.text.TextFormattingUtils;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -178,7 +175,7 @@ public class CommandLineGATK extends CommandLineExecutable {
|
||||||
Formatter formatter = new Formatter(additionalHelp);
|
Formatter formatter = new Formatter(additionalHelp);
|
||||||
|
|
||||||
formatter.format("For a full description of this walker, see its GATKdocs at:%n");
|
formatter.format("For a full description of this walker, see its GATKdocs at:%n");
|
||||||
formatter.format("%s%n", GATKDocUtils.helpLinksToGATKDocs(walkerType));
|
formatter.format("%s%n", HelpUtils.helpLinksToGATKDocs(walkerType));
|
||||||
|
|
||||||
return additionalHelp.toString();
|
return additionalHelp.toString();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata;
|
package org.broadinstitute.sting.gatk.refdata;
|
||||||
|
|
||||||
|
import net.sf.samtools.util.SequenceUtil;
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
|
import org.broad.tribble.annotation.Strand;
|
||||||
import org.broad.tribble.dbsnp.DbSNPFeature;
|
import org.broad.tribble.dbsnp.DbSNPFeature;
|
||||||
import org.broad.tribble.gelitext.GeliTextFeature;
|
import org.broad.tribble.gelitext.GeliTextFeature;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.DbSNPHelper;
|
|
||||||
import org.broadinstitute.sting.utils.classloader.PluginManager;
|
import org.broadinstitute.sting.utils.classloader.PluginManager;
|
||||||
import org.broadinstitute.sting.utils.codecs.hapmap.RawHapMapFeature;
|
import org.broadinstitute.sting.utils.codecs.hapmap.RawHapMapFeature;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader;
|
||||||
|
|
@ -92,6 +93,67 @@ public class VariantContextAdaptors {
|
||||||
// --------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
private static class DBSnpAdaptor implements VCAdaptor {
|
private static class DBSnpAdaptor implements VCAdaptor {
|
||||||
|
private static boolean isSNP(DbSNPFeature feature) {
|
||||||
|
return feature.getVariantType().contains("single") && feature.getLocationType().contains("exact");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isMNP(DbSNPFeature feature) {
|
||||||
|
return feature.getVariantType().contains("mnp") && feature.getLocationType().contains("range");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isInsertion(DbSNPFeature feature) {
|
||||||
|
return feature.getVariantType().contains("insertion");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isDeletion(DbSNPFeature feature) {
|
||||||
|
return feature.getVariantType().contains("deletion");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isIndel(DbSNPFeature feature) {
|
||||||
|
return isInsertion(feature) || isDeletion(feature) || isComplexIndel(feature);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isComplexIndel(DbSNPFeature feature) {
|
||||||
|
return feature.getVariantType().contains("in-del");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gets the alternate alleles. This method should return all the alleles present at the location,
|
||||||
|
* NOT including the reference base. This is returned as a string list with no guarantee ordering
|
||||||
|
* of alleles (i.e. the first alternate allele is not always going to be the allele with the greatest
|
||||||
|
* frequency).
|
||||||
|
*
|
||||||
|
* @return an alternate allele list
|
||||||
|
*/
|
||||||
|
public static List<String> getAlternateAlleleList(DbSNPFeature feature) {
|
||||||
|
List<String> ret = new ArrayList<String>();
|
||||||
|
for (String allele : getAlleleList(feature))
|
||||||
|
if (!allele.equals(String.valueOf(feature.getNCBIRefBase()))) ret.add(allele);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gets the alleles. This method should return all the alleles present at the location,
|
||||||
|
* including the reference base. The first allele should always be the reference allele, followed
|
||||||
|
* by an unordered list of alternate alleles.
|
||||||
|
*
|
||||||
|
* @return an alternate allele list
|
||||||
|
*/
|
||||||
|
public static List<String> getAlleleList(DbSNPFeature feature) {
|
||||||
|
List<String> alleleList = new ArrayList<String>();
|
||||||
|
// add ref first
|
||||||
|
if ( feature.getStrand() == Strand.POSITIVE )
|
||||||
|
alleleList = Arrays.asList(feature.getObserved());
|
||||||
|
else
|
||||||
|
for (String str : feature.getObserved())
|
||||||
|
alleleList.add(SequenceUtil.reverseComplement(str));
|
||||||
|
if ( alleleList.size() > 0 && alleleList.contains(feature.getNCBIRefBase())
|
||||||
|
&& !alleleList.get(0).equals(feature.getNCBIRefBase()) )
|
||||||
|
Collections.swap(alleleList, alleleList.indexOf(feature.getNCBIRefBase()), 0);
|
||||||
|
|
||||||
|
return alleleList;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts non-VCF formatted dbSNP records to VariantContext.
|
* Converts non-VCF formatted dbSNP records to VariantContext.
|
||||||
* @return DbSNPFeature.
|
* @return DbSNPFeature.
|
||||||
|
|
@ -102,18 +164,18 @@ public class VariantContextAdaptors {
|
||||||
@Override
|
@Override
|
||||||
public VariantContext convert(String name, Object input, ReferenceContext ref) {
|
public VariantContext convert(String name, Object input, ReferenceContext ref) {
|
||||||
DbSNPFeature dbsnp = (DbSNPFeature)input;
|
DbSNPFeature dbsnp = (DbSNPFeature)input;
|
||||||
if ( ! Allele.acceptableAlleleBases(DbSNPHelper.getReference(dbsnp)) )
|
if ( ! Allele.acceptableAlleleBases(dbsnp.getNCBIRefBase()) )
|
||||||
return null;
|
return null;
|
||||||
Allele refAllele = Allele.create(DbSNPHelper.getReference(dbsnp), true);
|
Allele refAllele = Allele.create(dbsnp.getNCBIRefBase(), true);
|
||||||
|
|
||||||
if ( DbSNPHelper.isSNP(dbsnp) || DbSNPHelper.isIndel(dbsnp) || DbSNPHelper.isMNP(dbsnp) || dbsnp.getVariantType().contains("mixed") ) {
|
if ( isSNP(dbsnp) || isIndel(dbsnp) || isMNP(dbsnp) || dbsnp.getVariantType().contains("mixed") ) {
|
||||||
// add the reference allele
|
// add the reference allele
|
||||||
List<Allele> alleles = new ArrayList<Allele>();
|
List<Allele> alleles = new ArrayList<Allele>();
|
||||||
alleles.add(refAllele);
|
alleles.add(refAllele);
|
||||||
|
|
||||||
// add all of the alt alleles
|
// add all of the alt alleles
|
||||||
boolean sawNullAllele = refAllele.isNull();
|
boolean sawNullAllele = refAllele.isNull();
|
||||||
for ( String alt : DbSNPHelper.getAlternateAlleleList(dbsnp) ) {
|
for ( String alt : getAlternateAlleleList(dbsnp) ) {
|
||||||
if ( ! Allele.acceptableAlleleBases(alt) ) {
|
if ( ! Allele.acceptableAlleleBases(alt) ) {
|
||||||
//System.out.printf("Excluding dbsnp record %s%n", dbsnp);
|
//System.out.printf("Excluding dbsnp record %s%n", dbsnp);
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -1,169 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2011, 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.refdata.features;
|
|
||||||
|
|
||||||
import net.sf.samtools.util.SequenceUtil;
|
|
||||||
import org.broad.tribble.annotation.Strand;
|
|
||||||
import org.broad.tribble.dbsnp.DbSNPFeature;
|
|
||||||
import org.broadinstitute.sting.utils.Utils;
|
|
||||||
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* this class contains static helper methods for DbSNP
|
|
||||||
*/
|
|
||||||
public class DbSNPHelper {
|
|
||||||
|
|
||||||
private DbSNPHelper() {} // don't make a DbSNPHelper
|
|
||||||
|
|
||||||
public static String rsIDOfFirstRealVariant(List<VariantContext> VCs, VariantContext.Type type) {
|
|
||||||
if ( VCs == null )
|
|
||||||
return null;
|
|
||||||
|
|
||||||
String rsID = null;
|
|
||||||
for ( VariantContext vc : VCs ) {
|
|
||||||
if ( vc.getType() == type ) {
|
|
||||||
rsID = vc.getID();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rsID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the -1 * (log 10 of the error value)
|
|
||||||
*
|
|
||||||
* @return the log based error estimate
|
|
||||||
*/
|
|
||||||
public static double getNegLog10PError(DbSNPFeature feature) {
|
|
||||||
return 4; // -log10(0.0001)
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// What kind of variant are we?
|
|
||||||
//
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
public static boolean isSNP(DbSNPFeature feature) {
|
|
||||||
return feature.getVariantType().contains("single") && feature.getLocationType().contains("exact");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMNP(DbSNPFeature feature) {
|
|
||||||
return feature.getVariantType().contains("mnp") && feature.getLocationType().contains("range");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String toMediumString(DbSNPFeature feature) {
|
|
||||||
String s = String.format("%s:%d:%s:%s", feature.getChr(), feature.getStart(), feature.getRsID(), Utils.join("",feature.getObserved()));
|
|
||||||
if (isSNP(feature)) s += ":SNP";
|
|
||||||
if (isIndel(feature)) s += ":Indel";
|
|
||||||
if (isHapmap(feature)) s += ":Hapmap";
|
|
||||||
if (is2Hit2Allele(feature)) s += ":2Hit";
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isInsertion(DbSNPFeature feature) {
|
|
||||||
return feature.getVariantType().contains("insertion");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDeletion(DbSNPFeature feature) {
|
|
||||||
return feature.getVariantType().contains("deletion");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isIndel(DbSNPFeature feature) {
|
|
||||||
return DbSNPHelper.isInsertion(feature) || DbSNPHelper.isDeletion(feature) || DbSNPHelper.isComplexIndel(feature);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isComplexIndel(DbSNPFeature feature) {
|
|
||||||
return feature.getVariantType().contains("in-del");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isHapmap(DbSNPFeature feature) {
|
|
||||||
return feature.getValidationStatus().contains("by-hapmap");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean is2Hit2Allele(DbSNPFeature feature) {
|
|
||||||
return feature.getValidationStatus().contains("by-2hit-2allele");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean is1000genomes(DbSNPFeature feature) {
|
|
||||||
return feature.getValidationStatus().contains("by-1000genomes");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMQ1(DbSNPFeature feature) {
|
|
||||||
return feature.getWeight() == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gets the alternate alleles. This method should return all the alleles present at the location,
|
|
||||||
* NOT including the reference base. This is returned as a string list with no guarantee ordering
|
|
||||||
* of alleles (i.e. the first alternate allele is not always going to be the allele with the greatest
|
|
||||||
* frequency).
|
|
||||||
*
|
|
||||||
* @return an alternate allele list
|
|
||||||
*/
|
|
||||||
public static List<String> getAlternateAlleleList(DbSNPFeature feature) {
|
|
||||||
List<String> ret = new ArrayList<String>();
|
|
||||||
for (String allele : getAlleleList(feature))
|
|
||||||
if (!allele.equals(String.valueOf(feature.getNCBIRefBase()))) ret.add(allele);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean onFwdStrand(DbSNPFeature feature) {
|
|
||||||
return feature.getStrand() == Strand.POSITIVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getReference(DbSNPFeature feature) {
|
|
||||||
return feature.getNCBIRefBase();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String toSimpleString(DbSNPFeature feature) {
|
|
||||||
return String.format("%s:%s:%s", feature.getRsID(), feature.getObserved(), (feature.getStrand() == Strand.POSITIVE) ? "+" : "-");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gets the alleles. This method should return all the alleles present at the location,
|
|
||||||
* including the reference base. The first allele should always be the reference allele, followed
|
|
||||||
* by an unordered list of alternate alleles.
|
|
||||||
*
|
|
||||||
* @return an alternate allele list
|
|
||||||
*/
|
|
||||||
public static List<String> getAlleleList(DbSNPFeature feature) {
|
|
||||||
List<String> alleleList = new ArrayList<String>();
|
|
||||||
// add ref first
|
|
||||||
if ( onFwdStrand(feature) )
|
|
||||||
alleleList = Arrays.asList(feature.getObserved());
|
|
||||||
else
|
|
||||||
for (String str : feature.getObserved())
|
|
||||||
alleleList.add(SequenceUtil.reverseComplement(str));
|
|
||||||
if ( alleleList.size() > 0 && alleleList.contains(getReference(feature)) && !alleleList.get(0).equals(getReference(feature)) )
|
|
||||||
Collections.swap(alleleList, alleleList.indexOf(getReference(feature)), 0);
|
|
||||||
|
|
||||||
return alleleList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -26,7 +26,6 @@
|
||||||
package org.broadinstitute.sting.gatk.walkers;
|
package org.broadinstitute.sting.gatk.walkers;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broad.tribble.dbsnp.DbSNPFeature;
|
|
||||||
import org.broadinstitute.sting.commandline.Argument;
|
import org.broadinstitute.sting.commandline.Argument;
|
||||||
import org.broadinstitute.sting.commandline.Input;
|
import org.broadinstitute.sting.commandline.Input;
|
||||||
import org.broadinstitute.sting.commandline.Output;
|
import org.broadinstitute.sting.commandline.Output;
|
||||||
|
|
@ -34,9 +33,6 @@ import org.broadinstitute.sting.commandline.RodBinding;
|
||||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum;
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.DbSNPHelper;
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
|
||||||
import org.broadinstitute.sting.utils.Utils;
|
import org.broadinstitute.sting.utils.Utils;
|
||||||
import org.broadinstitute.sting.utils.collections.Pair;
|
import org.broadinstitute.sting.utils.collections.Pair;
|
||||||
import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup;
|
import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup;
|
||||||
|
|
|
||||||
|
|
@ -29,15 +29,11 @@ import org.broadinstitute.sting.commandline.RodBinding;
|
||||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.DbSNPHelper;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotationInterfaceManager;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotationInterfaceManager;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotatorCompatibleWalker;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotatorCompatibleWalker;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants;
|
import org.broadinstitute.sting.utils.codecs.vcf.*;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine;
|
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType;
|
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine;
|
|
||||||
import org.broadinstitute.sting.utils.exceptions.UserException;
|
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||||||
import org.broadinstitute.sting.utils.variantcontext.Genotype;
|
import org.broadinstitute.sting.utils.variantcontext.Genotype;
|
||||||
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
||||||
|
|
@ -158,7 +154,7 @@ public class VariantAnnotatorEngine {
|
||||||
private void annotateDBs(RefMetaDataTracker tracker, ReferenceContext ref, VariantContext vc, Map<String, Object> infoAnnotations) {
|
private void annotateDBs(RefMetaDataTracker tracker, ReferenceContext ref, VariantContext vc, Map<String, Object> infoAnnotations) {
|
||||||
for ( Map.Entry<RodBinding<VariantContext>, String> dbSet : dbAnnotations.entrySet() ) {
|
for ( Map.Entry<RodBinding<VariantContext>, String> dbSet : dbAnnotations.entrySet() ) {
|
||||||
if ( dbSet.getValue().equals(VCFConstants.DBSNP_KEY) ) {
|
if ( dbSet.getValue().equals(VCFConstants.DBSNP_KEY) ) {
|
||||||
String rsID = DbSNPHelper.rsIDOfFirstRealVariant(tracker.getValues(dbSet.getKey(), ref.getLocus()), vc.getType());
|
String rsID = VCFUtils.rsIDOfFirstRealVariant(tracker.getValues(dbSet.getKey(), ref.getLocus()), vc.getType());
|
||||||
infoAnnotations.put(VCFConstants.DBSNP_KEY, rsID != null);
|
infoAnnotations.put(VCFConstants.DBSNP_KEY, rsID != null);
|
||||||
// annotate dbsnp id if available and not already there
|
// annotate dbsnp id if available and not already there
|
||||||
if ( rsID != null && (!vc.hasID() || vc.getID().equals(VCFConstants.EMPTY_ID_FIELD)) )
|
if ( rsID != null && (!vc.hasID() || vc.getID().equals(VCFConstants.EMPTY_ID_FIELD)) )
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource;
|
import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.beagle.BeagleFeature;
|
import org.broadinstitute.sting.utils.codecs.beagle.BeagleFeature;
|
||||||
import org.broadinstitute.sting.gatk.walkers.RodWalker;
|
import org.broadinstitute.sting.gatk.walkers.RodWalker;
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
import org.broadinstitute.sting.utils.SampleUtils;
|
import org.broadinstitute.sting.utils.SampleUtils;
|
||||||
|
|
|
||||||
|
|
@ -42,50 +42,190 @@ import java.io.PrintStream;
|
||||||
/**
|
/**
|
||||||
* Emits a data file containing information about callable, uncallable, poorly mapped, and other parts of the genome
|
* Emits a data file containing information about callable, uncallable, poorly mapped, and other parts of the genome
|
||||||
*
|
*
|
||||||
* @Author depristo
|
* <p>
|
||||||
* @Date May 7, 2010
|
* A very common question about a NGS set of reads is what areas of the genome are considered callable. The system
|
||||||
|
* considers the coverage at each locus and emits either a per base state or a summary interval BED file that
|
||||||
|
* partitions the genomic intervals into the following callable states:
|
||||||
|
* <dl>
|
||||||
|
* <dt>REF_N</dt>
|
||||||
|
* <dd>the reference base was an N, which is not considered callable the GATK</dd>
|
||||||
|
* <dt>CALLABLE</dt>
|
||||||
|
* <dd>the base satisfied the min. depth for calling but had less than maxDepth to avoid having EXCESSIVE_COVERAGE</dd>
|
||||||
|
* <dt>NO_COVERAGE</dt>
|
||||||
|
* <dd>absolutely no reads were seen at this locus, regardless of the filtering parameters</dd>
|
||||||
|
* <dt>LOW_COVERAGE</dt>
|
||||||
|
* <dd>there were less than min. depth bases at the locus, after applying filters</dd>
|
||||||
|
* <dt>EXCESSIVE_COVERAGE</dt>
|
||||||
|
* <dd>more than -maxDepth read at the locus, indicating some sort of mapping problem</dd>
|
||||||
|
* <dt>POOR_MAPPING_QUALITY</dt>
|
||||||
|
* <dd>more than --maxFractionOfReadsWithLowMAPQ at the locus, indicating a poor mapping quality of the reads</dd>
|
||||||
|
* </dl>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <h2>Input</h2>
|
||||||
|
* <p>
|
||||||
|
* A BAM file containing <b>exactly one sample</b>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <h2>Output</h2>
|
||||||
|
* <p>
|
||||||
|
* <ul>
|
||||||
|
* <li>-o: a OutputFormatted (recommended BED) file with the callable status covering each base</li>
|
||||||
|
* <li>-summary: a table of callable status x count of all examined bases</li>
|
||||||
|
* </ul>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <h2>Examples</h2>
|
||||||
|
* <pre>
|
||||||
|
* -T CallableLociWalker \
|
||||||
|
* -I my.bam \
|
||||||
|
* -summary my.summary \
|
||||||
|
* -o my.bed
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* would produce a BED file (my.bed) that looks like:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* 20 10000000 10000864 CALLABLE
|
||||||
|
* 20 10000865 10000985 POOR_MAPPING_QUALITY
|
||||||
|
* 20 10000986 10001138 CALLABLE
|
||||||
|
* 20 10001139 10001254 POOR_MAPPING_QUALITY
|
||||||
|
* 20 10001255 10012255 CALLABLE
|
||||||
|
* 20 10012256 10012259 POOR_MAPPING_QUALITY
|
||||||
|
* 20 10012260 10012263 CALLABLE
|
||||||
|
* 20 10012264 10012328 POOR_MAPPING_QUALITY
|
||||||
|
* 20 10012329 10012550 CALLABLE
|
||||||
|
* 20 10012551 10012551 LOW_COVERAGE
|
||||||
|
* 20 10012552 10012554 CALLABLE
|
||||||
|
* 20 10012555 10012557 LOW_COVERAGE
|
||||||
|
* 20 10012558 10012558 CALLABLE
|
||||||
|
* et cetera...
|
||||||
|
* </pre>
|
||||||
|
* as well as a summary table that looks like:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* state nBases
|
||||||
|
* REF_N 0
|
||||||
|
* CALLABLE 996046
|
||||||
|
* NO_COVERAGE 121
|
||||||
|
* LOW_COVERAGE 928
|
||||||
|
* EXCESSIVE_COVERAGE 0
|
||||||
|
* POOR_MAPPING_QUALITY 2906
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author Mark DePristo
|
||||||
|
* @since May 7, 2010
|
||||||
*/
|
*/
|
||||||
@By(DataSource.REFERENCE)
|
@By(DataSource.REFERENCE)
|
||||||
public class CallableLociWalker extends LocusWalker<CallableLociWalker.CallableBaseState, CallableLociWalker.Integrator> {
|
public class CallableLociWalker extends LocusWalker<CallableLociWalker.CallableBaseState, CallableLociWalker.Integrator> {
|
||||||
@Output
|
@Output
|
||||||
PrintStream out;
|
PrintStream out;
|
||||||
|
|
||||||
@Argument(fullName = "maxLowMAPQ", shortName = "mlmq", doc = "Maximum value for MAPQ to be considered a problematic mapped read. The gap between this value and mmq are reads that are not sufficiently well mapped for calling but aren't indicative of mapping problems.", required = false)
|
/**
|
||||||
|
* Callable loci summary counts (see outputs) will be written to this file.
|
||||||
|
*/
|
||||||
|
@Output(fullName = "summary", shortName = "summary", doc = "Name of file for output summary", required = true)
|
||||||
|
File summaryFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The gap between this value and mmq are reads that are not sufficiently well mapped for calling but
|
||||||
|
* aren't indicative of mapping problems. For example, if maxLowMAPQ = 1 and mmq = 20, then reads with
|
||||||
|
* MAPQ == 0 are poorly mapped, MAPQ >= 20 are considered as contributing to calling, where
|
||||||
|
* reads with MAPQ >= 1 and < 20 are not bad in and of themselves but aren't sufficiently good to contribute to
|
||||||
|
* calling. In effect this reads are invisible, driving the base to the NO_ or LOW_COVERAGE states
|
||||||
|
*/
|
||||||
|
@Argument(fullName = "maxLowMAPQ", shortName = "mlmq", doc = "Maximum value for MAPQ to be considered a problematic mapped read.", required = false)
|
||||||
byte maxLowMAPQ = 1;
|
byte maxLowMAPQ = 1;
|
||||||
|
|
||||||
@Argument(fullName = "minMappingQuality", shortName = "mmq", doc = "Minimum mapping quality of reads to count towards depth. Defaults to 50.", required = false)
|
/**
|
||||||
|
* Reads with MAPQ > minMappingQuality are treated as usable for variation detection, contributing to the CALLABLE
|
||||||
|
* state.
|
||||||
|
*/
|
||||||
|
@Argument(fullName = "minMappingQuality", shortName = "mmq", doc = "Minimum mapping quality of reads to count towards depth.", required = false)
|
||||||
byte minMappingQuality = 10;
|
byte minMappingQuality = 10;
|
||||||
|
|
||||||
@Argument(fullName = "minBaseQuality", shortName = "mbq", doc = "Minimum quality of bases to count towards depth. Defaults to 20.", required = false)
|
/**
|
||||||
|
* Bases with less than minBaseQuality are viewed as not sufficiently high quality to contribute to the CALLABLE state
|
||||||
|
*/
|
||||||
|
@Argument(fullName = "minBaseQuality", shortName = "mbq", doc = "Minimum quality of bases to count towards depth.", required = false)
|
||||||
byte minBaseQuality = 20;
|
byte minBaseQuality = 20;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the number of QC+ bases (on reads with MAPQ > minMappingQuality and with base quality > minBaseQuality) exceeds this
|
||||||
|
* value and is less than maxDepth the site is considered CALLABLE.
|
||||||
|
*/
|
||||||
@Argument(fullName = "minDepth", shortName = "minDepth", doc = "Minimum QC+ read depth before a locus is considered callable", required = false)
|
@Argument(fullName = "minDepth", shortName = "minDepth", doc = "Minimum QC+ read depth before a locus is considered callable", required = false)
|
||||||
int minDepth = 4;
|
int minDepth = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the QC+ depth exceeds this value the site is considered to have EXCESSIVE_DEPTH
|
||||||
|
*/
|
||||||
@Argument(fullName = "maxDepth", shortName = "maxDepth", doc = "Maximum read depth before a locus is considered poorly mapped", required = false)
|
@Argument(fullName = "maxDepth", shortName = "maxDepth", doc = "Maximum read depth before a locus is considered poorly mapped", required = false)
|
||||||
int maxDepth = -1;
|
int maxDepth = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We don't want to consider a site as POOR_MAPPING_QUALITY just because it has two reads, and one is MAPQ. We
|
||||||
|
* won't assign a site to the POOR_MAPPING_QUALITY state unless there are at least minDepthForLowMAPQ reads
|
||||||
|
* covering the site.
|
||||||
|
*/
|
||||||
@Argument(fullName = "minDepthForLowMAPQ", shortName = "mdflmq", doc = "Minimum read depth before a locus is considered a potential candidate for poorly mapped", required = false)
|
@Argument(fullName = "minDepthForLowMAPQ", shortName = "mdflmq", doc = "Minimum read depth before a locus is considered a potential candidate for poorly mapped", required = false)
|
||||||
int minDepthLowMAPQ = 10;
|
int minDepthLowMAPQ = 10;
|
||||||
|
|
||||||
@Argument(fullName = "maxFractionOfReadsWithLowMAPQ", shortName = "frlmq", doc = "Maximum read depth before a locus is considered poorly mapped", required = false)
|
/**
|
||||||
|
* If the number of reads at this site is greater than minDepthForLowMAPQ and the fraction of reads with low mapping quality
|
||||||
|
* exceeds this fraction then the site has POOR_MAPPING_QUALITY.
|
||||||
|
*/
|
||||||
|
@Argument(fullName = "maxFractionOfReadsWithLowMAPQ", shortName = "frlmq", doc = "If the fraction of reads at a base with low mapping quality exceeds this value, the site may be poorly mapped", required = false)
|
||||||
double maxLowMAPQFraction = 0.1;
|
double maxLowMAPQFraction = 0.1;
|
||||||
|
|
||||||
@Argument(fullName = "format", shortName = "format", doc = "Output format for the system: either BED or STATE_PER_BASE", required = false)
|
/**
|
||||||
|
* The output of this walker will be written in this format. The recommended option is BED.
|
||||||
|
*/
|
||||||
|
@Argument(fullName = "format", shortName = "format", doc = "Output format", required = false)
|
||||||
OutputFormat outputFormat;
|
OutputFormat outputFormat;
|
||||||
|
|
||||||
@Argument(fullName = "summary", shortName = "summary", doc = "Name of file for output summary", required = true)
|
public enum OutputFormat {
|
||||||
File summaryFile;
|
/**
|
||||||
|
* The output will be written as a BED file. There's a BED element for each
|
||||||
|
* continuous run of callable states (i.e., CALLABLE, REF_N, etc). This is the recommended
|
||||||
|
* format
|
||||||
|
*/
|
||||||
|
BED,
|
||||||
|
|
||||||
public enum OutputFormat { BED, STATE_PER_BASE }
|
/**
|
||||||
|
* Emit chr start stop state quads for each base. Produces a potentially disasterously
|
||||||
|
* large amount of output.
|
||||||
|
*/
|
||||||
|
STATE_PER_BASE
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum CalledState {
|
||||||
|
/** the reference base was an N, which is not considered callable the GATK */
|
||||||
|
REF_N,
|
||||||
|
/** the base satisfied the min. depth for calling but had less than maxDepth to avoid having EXCESSIVE_COVERAGE */
|
||||||
|
CALLABLE,
|
||||||
|
/** absolutely no reads were seen at this locus, regardless of the filtering parameters */
|
||||||
|
NO_COVERAGE,
|
||||||
|
/** there were less than min. depth bases at the locus, after applying filters */
|
||||||
|
LOW_COVERAGE,
|
||||||
|
/** more than -maxDepth read at the locus, indicating some sort of mapping problem */
|
||||||
|
EXCESSIVE_COVERAGE,
|
||||||
|
/** more than --maxFractionOfReadsWithLowMAPQ at the locus, indicating a poor mapping quality of the reads */
|
||||||
|
POOR_MAPPING_QUALITY
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
// STANDARD WALKER METHODS
|
// STANDARD WALKER METHODS
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean includeReadsWithDeletionAtLoci() { return true; }
|
public boolean includeReadsWithDeletionAtLoci() { return true; }
|
||||||
|
|
||||||
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
|
if ( getToolkit().getSamples().size() > 1 )
|
||||||
|
throw new UserException.BadArgumentValue("-I", "CallableLoci only works for a single sample, but multiple samples were found in the provided BAM files: " + getToolkit().getSamples());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
PrintStream summaryOut = new PrintStream(summaryFile);
|
PrintStream summaryOut = new PrintStream(summaryFile);
|
||||||
summaryOut.close();
|
summaryOut.close();
|
||||||
|
|
@ -94,15 +234,15 @@ public class CallableLociWalker extends LocusWalker<CallableLociWalker.CallableB
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Integrator {
|
protected static class Integrator {
|
||||||
long counts[] = new long[CalledState.values().length];
|
final long counts[] = new long[CalledState.values().length];
|
||||||
CallableBaseState state = null;
|
CallableBaseState state = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CallableBaseState implements HasGenomeLocation {
|
protected static class CallableBaseState implements HasGenomeLocation {
|
||||||
public GenomeLocParser genomeLocParser;
|
final public GenomeLocParser genomeLocParser;
|
||||||
public GenomeLoc loc;
|
public GenomeLoc loc;
|
||||||
public CalledState state;
|
final public CalledState state;
|
||||||
|
|
||||||
public CallableBaseState(GenomeLocParser genomeLocParser,GenomeLoc loc, CalledState state) {
|
public CallableBaseState(GenomeLocParser genomeLocParser,GenomeLoc loc, CalledState state) {
|
||||||
this.genomeLocParser = genomeLocParser;
|
this.genomeLocParser = genomeLocParser;
|
||||||
|
|
@ -133,16 +273,10 @@ public class CallableLociWalker extends LocusWalker<CallableLociWalker.CallableB
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("%s %d %d %s", loc.getContig(), loc.getStart(), loc.getStop(), state);
|
return String.format("%s %d %d %s", loc.getContig(), loc.getStart(), loc.getStop(), state);
|
||||||
//return String.format("%s %d %d %d %s", loc.getContig(), loc.getStart(), loc.getStop(), loc.getStop() - loc.getStart() + 1, state);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CalledState { REF_N, CALLABLE, NO_COVERAGE, LOW_COVERAGE, EXCESSIVE_COVERAGE, POOR_MAPPING_QUALITY }
|
@Override
|
||||||
|
|
||||||
public Integrator reduceInit() {
|
|
||||||
return new Integrator();
|
|
||||||
}
|
|
||||||
|
|
||||||
public CallableBaseState map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
|
public CallableBaseState map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
|
||||||
CalledState state;
|
CalledState state;
|
||||||
|
|
||||||
|
|
@ -179,6 +313,12 @@ public class CallableLociWalker extends LocusWalker<CallableLociWalker.CallableB
|
||||||
return new CallableBaseState(getToolkit().getGenomeLocParser(),context.getLocation(), state);
|
return new CallableBaseState(getToolkit().getGenomeLocParser(),context.getLocation(), state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integrator reduceInit() {
|
||||||
|
return new Integrator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integrator reduce(CallableBaseState state, Integrator integrator) {
|
public Integrator reduce(CallableBaseState state, Integrator integrator) {
|
||||||
// update counts
|
// update counts
|
||||||
integrator.counts[state.getState().ordinal()]++;
|
integrator.counts[state.getState().ordinal()]++;
|
||||||
|
|
@ -206,6 +346,7 @@ public class CallableLociWalker extends LocusWalker<CallableLociWalker.CallableB
|
||||||
// INTERVAL ON TRAVERSAL DONE
|
// INTERVAL ON TRAVERSAL DONE
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onTraversalDone(Integrator result) {
|
public void onTraversalDone(Integrator result) {
|
||||||
// print out the last state
|
// print out the last state
|
||||||
if ( result != null ) {
|
if ( result != null ) {
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,8 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator;
|
import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqCodec;
|
import org.broadinstitute.sting.utils.codecs.refseq.RefSeqCodec;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqFeature;
|
import org.broadinstitute.sting.utils.codecs.refseq.RefSeqFeature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack;
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,9 @@ import org.broadinstitute.sting.gatk.filters.PlatformUnitFilter;
|
||||||
import org.broadinstitute.sting.gatk.filters.PlatformUnitFilterHelper;
|
import org.broadinstitute.sting.gatk.filters.PlatformUnitFilterHelper;
|
||||||
import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator;
|
import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.refseq.Transcript;
|
import org.broadinstitute.sting.utils.codecs.refseq.Transcript;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqCodec;
|
import org.broadinstitute.sting.utils.codecs.refseq.RefSeqCodec;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqFeature;
|
import org.broadinstitute.sting.utils.codecs.refseq.RefSeqFeature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack;
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator;
|
import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator;
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ import org.broadinstitute.sting.commandline.RodBinding;
|
||||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.sampileup.SAMPileupFeature;
|
import org.broadinstitute.sting.utils.codecs.sampileup.SAMPileupFeature;
|
||||||
import org.broadinstitute.sting.gatk.walkers.*;
|
import org.broadinstitute.sting.gatk.walkers.*;
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,8 @@ import org.broadinstitute.sting.commandline.RodBinding;
|
||||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.table.TableFeature;
|
import org.broadinstitute.sting.utils.codecs.table.TableFeature;
|
||||||
import org.broadinstitute.sting.gatk.walkers.DataSource;
|
import org.broadinstitute.sting.gatk.walkers.DataSource;
|
||||||
import org.broadinstitute.sting.gatk.walkers.RMD;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.Requires;
|
import org.broadinstitute.sting.gatk.walkers.Requires;
|
||||||
import org.broadinstitute.sting.gatk.walkers.RodWalker;
|
import org.broadinstitute.sting.gatk.walkers.RodWalker;
|
||||||
import org.broadinstitute.sting.utils.BaseUtils;
|
import org.broadinstitute.sting.utils.BaseUtils;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.VariantContextAdaptors;
|
import org.broadinstitute.sting.gatk.refdata.VariantContextAdaptors;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.DbSNPHelper;
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
||||||
import org.broadinstitute.sting.gatk.walkers.*;
|
import org.broadinstitute.sting.gatk.walkers.*;
|
||||||
|
|
@ -120,7 +119,7 @@ public class VariantsToVCF extends RodWalker<Integer, Integer> {
|
||||||
if ( tracker == null || !BaseUtils.isRegularBase(ref.getBase()) )
|
if ( tracker == null || !BaseUtils.isRegularBase(ref.getBase()) )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
String rsID = dbsnp == null ? null : DbSNPHelper.rsIDOfFirstRealVariant(tracker.getValues(dbsnp.dbsnp, context.getLocation()), VariantContext.Type.SNP);
|
String rsID = dbsnp == null ? null : VCFUtils.rsIDOfFirstRealVariant(tracker.getValues(dbsnp.dbsnp, context.getLocation()), VariantContext.Type.SNP);
|
||||||
|
|
||||||
Collection<VariantContext> contexts = getVariantContexts(tracker, ref);
|
Collection<VariantContext> contexts = getVariantContexts(tracker, ref);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.beagle;
|
package org.broadinstitute.sting.utils.codecs.beagle;
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The Broad Institute
|
* Copyright (c) 2010 The Broad Institute
|
||||||
*
|
*
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
||||||
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.beagle;
|
package org.broadinstitute.sting.utils.codecs.beagle;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.utils.variantcontext.Allele;
|
import org.broadinstitute.sting.utils.variantcontext.Allele;
|
||||||
|
|
@ -117,7 +117,7 @@ public class CGVarCodec implements FeatureCodec {
|
||||||
return new VariantContext("CGI", array[3], start, end, alleles, VariantContext.NO_NEG_LOG_10PERROR, null, attrs);
|
return new VariantContext("CGI", array[3], start, end, alleles, VariantContext.NO_NEG_LOG_10PERROR, null, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Class getFeatureType() {
|
public Class<VariantContext> getFeatureType() {
|
||||||
return VariantContext.class;
|
return VariantContext.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ public class RawHapMapCodec implements FeatureCodec {
|
||||||
headerLine);
|
headerLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Class getFeatureType() {
|
public Class<RawHapMapFeature> getFeatureType() {
|
||||||
return RawHapMapFeature.class;
|
return RawHapMapFeature.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.refseq;
|
package org.broadinstitute.sting.utils.codecs.refseq;
|
||||||
|
|
||||||
import org.apache.commons.io.filefilter.FalseFileFilter;
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broad.tribble.TribbleException;
|
import org.broad.tribble.TribbleException;
|
||||||
import org.broad.tribble.readers.LineReader;
|
import org.broad.tribble.readers.LineReader;
|
||||||
|
|
@ -104,7 +103,7 @@ public class RefSeqCodec implements ReferenceDependentFeatureCodec<RefSeqFeature
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class getFeatureType() {
|
public Class<RefSeqFeature> getFeatureType() {
|
||||||
return RefSeqFeature.class;
|
return RefSeqFeature.class;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.refseq;
|
package org.broadinstitute.sting.utils.codecs.refseq;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
||||||
|
|
@ -1,53 +1,53 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.refseq;
|
package org.broadinstitute.sting.utils.codecs.refseq;
|
||||||
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
import org.broadinstitute.sting.utils.HasGenomeLocation;
|
import org.broadinstitute.sting.utils.HasGenomeLocation;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by IntelliJ IDEA.
|
* Created by IntelliJ IDEA.
|
||||||
* User: asivache
|
* User: asivache
|
||||||
* Date: Sep 22, 2009
|
* Date: Sep 22, 2009
|
||||||
* Time: 5:22:30 PM
|
* Time: 5:22:30 PM
|
||||||
* To change this template use File | Settings | File Templates.
|
* To change this template use File | Settings | File Templates.
|
||||||
*/
|
*/
|
||||||
public interface Transcript extends HasGenomeLocation {
|
public interface Transcript extends HasGenomeLocation {
|
||||||
|
|
||||||
/** Returns id of the transcript (RefSeq NM_* id) */
|
/** Returns id of the transcript (RefSeq NM_* id) */
|
||||||
public String getTranscriptId();
|
public String getTranscriptId();
|
||||||
/** Returns coding strand of the transcript, 1 or -1 for positive or negative strand, respectively */
|
/** Returns coding strand of the transcript, 1 or -1 for positive or negative strand, respectively */
|
||||||
public int getStrand();
|
public int getStrand();
|
||||||
/** Returns transcript's full genomic interval (includes all exons with UTRs) */
|
/** Returns transcript's full genomic interval (includes all exons with UTRs) */
|
||||||
public GenomeLoc getLocation();
|
public GenomeLoc getLocation();
|
||||||
/** Returns genomic interval of the coding sequence (does not include
|
/** Returns genomic interval of the coding sequence (does not include
|
||||||
* UTRs, but still includes introns, since it's a single interval on the DNA)
|
* UTRs, but still includes introns, since it's a single interval on the DNA)
|
||||||
*/
|
*/
|
||||||
public GenomeLoc getCodingLocation();
|
public GenomeLoc getCodingLocation();
|
||||||
/** Name of the gene this transcript corresponds to (typically NOT gene id such as Entrez etc,
|
/** Name of the gene this transcript corresponds to (typically NOT gene id such as Entrez etc,
|
||||||
* but the implementation can decide otherwise)
|
* but the implementation can decide otherwise)
|
||||||
*/
|
*/
|
||||||
public String getGeneName();
|
public String getGeneName();
|
||||||
/** Number of exons in this transcript */
|
/** Number of exons in this transcript */
|
||||||
public int getNumExons();
|
public int getNumExons();
|
||||||
/** Genomic location of the n-th exon; expected to throw an exception (runtime) if n is out of bounds */
|
/** Genomic location of the n-th exon; expected to throw an exception (runtime) if n is out of bounds */
|
||||||
public GenomeLoc getExonLocation(int n);
|
public GenomeLoc getExonLocation(int n);
|
||||||
|
|
||||||
/** Returns the list of all exons in this transcript, as genomic intervals */
|
/** Returns the list of all exons in this transcript, as genomic intervals */
|
||||||
public List<GenomeLoc> getExons();
|
public List<GenomeLoc> getExons();
|
||||||
|
|
||||||
/** Returns true if the specified interval 'that' overlaps with the full genomic interval of this transcript */
|
/** Returns true if the specified interval 'that' overlaps with the full genomic interval of this transcript */
|
||||||
public boolean overlapsP (GenomeLoc that);
|
public boolean overlapsP (GenomeLoc that);
|
||||||
|
|
||||||
/** Returns true if the specified interval 'that' overlaps with the coding genomic interval of this transcript.
|
/** Returns true if the specified interval 'that' overlaps with the coding genomic interval of this transcript.
|
||||||
* NOTE: since "coding interval" is still a single genomic interval, it will not contain UTRs of the outermost exons,
|
* NOTE: since "coding interval" is still a single genomic interval, it will not contain UTRs of the outermost exons,
|
||||||
* but it will still contain introns and/or exons internal to this genomic locus that are not spliced into this transcript.
|
* but it will still contain introns and/or exons internal to this genomic locus that are not spliced into this transcript.
|
||||||
* @see #overlapsExonP
|
* @see #overlapsExonP
|
||||||
*/
|
*/
|
||||||
public boolean overlapsCodingP (GenomeLoc that);
|
public boolean overlapsCodingP (GenomeLoc that);
|
||||||
|
|
||||||
/** Returns true if the specified interval 'that' overlaps with any of the exons actually spliced into this transcript */
|
/** Returns true if the specified interval 'that' overlaps with any of the exons actually spliced into this transcript */
|
||||||
public boolean overlapsExonP (GenomeLoc that);
|
public boolean overlapsExonP (GenomeLoc that);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.sampileup;
|
package org.broadinstitute.sting.utils.codecs.sampileup;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broad.tribble.FeatureCodec;
|
import org.broad.tribble.FeatureCodec;
|
||||||
|
|
@ -35,7 +35,7 @@ import java.util.ArrayList;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static org.broadinstitute.sting.gatk.refdata.features.sampileup.SAMPileupFeature.VariantType;
|
import static org.broadinstitute.sting.utils.codecs.sampileup.SAMPileupFeature.VariantType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Tribble encoder / decoder for SAM pileup data.
|
* A Tribble encoder / decoder for SAM pileup data.
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.sampileup;
|
package org.broadinstitute.sting.utils.codecs.sampileup;
|
||||||
|
|
||||||
import net.sf.samtools.util.StringUtil;
|
import net.sf.samtools.util.StringUtil;
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.samread;
|
package org.broadinstitute.sting.utils.codecs.samread;
|
||||||
|
|
||||||
import net.sf.samtools.Cigar;
|
import net.sf.samtools.Cigar;
|
||||||
import net.sf.samtools.TextCigarCodec;
|
import net.sf.samtools.TextCigarCodec;
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.samread;
|
package org.broadinstitute.sting.utils.codecs.samread;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
|
|
||||||
|
|
@ -222,7 +222,7 @@ public class SnpEffCodec implements FeatureCodec, SelfScopingFeatureCodec {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Class getFeatureType() {
|
public Class<SnpEffFeature> getFeatureType() {
|
||||||
return SnpEffFeature.class;
|
return SnpEffFeature.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ public class SoapSNPCodec implements FeatureCodec, NameAwareCodec {
|
||||||
/**
|
/**
|
||||||
* @return VariantContext
|
* @return VariantContext
|
||||||
*/
|
*/
|
||||||
public Class getFeatureType() {
|
public Class<VariantContext> getFeatureType() {
|
||||||
return VariantContext.class;
|
return VariantContext.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.table;
|
package org.broadinstitute.sting.utils.codecs.table;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.ReferenceDependentFeatureCodec;
|
import org.broadinstitute.sting.gatk.refdata.ReferenceDependentFeatureCodec;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.table;
|
package org.broadinstitute.sting.utils.codecs.table;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broad.tribble.readers.LineReader;
|
import org.broad.tribble.readers.LineReader;
|
||||||
|
|
@ -51,7 +51,7 @@ public class TableCodec implements ReferenceDependentFeatureCodec {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class getFeatureType() {
|
public Class<TableFeature> getFeatureType() {
|
||||||
return TableFeature.class;
|
return TableFeature.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.broadinstitute.sting.gatk.refdata.features.table;
|
package org.broadinstitute.sting.utils.codecs.table;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
|
|
@ -263,7 +263,7 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec,
|
||||||
*
|
*
|
||||||
* @return the type of record
|
* @return the type of record
|
||||||
*/
|
*/
|
||||||
public Class getFeatureType() {
|
public Class<VariantContext> getFeatureType() {
|
||||||
return VariantContext.class;
|
return VariantContext.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -180,4 +180,19 @@ public class VCFUtils {
|
||||||
|
|
||||||
return new HashSet<VCFHeaderLine>(map.values());
|
return new HashSet<VCFHeaderLine>(map.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String rsIDOfFirstRealVariant(List<VariantContext> VCs, VariantContext.Type type) {
|
||||||
|
if ( VCs == null )
|
||||||
|
return null;
|
||||||
|
|
||||||
|
String rsID = null;
|
||||||
|
for ( VariantContext vc : VCs ) {
|
||||||
|
if ( vc.getType() == type ) {
|
||||||
|
rsID = vc.getID();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rsID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -71,7 +71,7 @@ public abstract class DocumentedGATKFeatureHandler {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String getDestinationFilename(ClassDoc doc, Class clazz) {
|
public String getDestinationFilename(ClassDoc doc, Class clazz) {
|
||||||
return GATKDocUtils.htmlFilenameForClass(clazz);
|
return HelpUtils.htmlFilenameForClass(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2011, 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.utils.help;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author depristo
|
|
||||||
* @since 8/8/11
|
|
||||||
*/
|
|
||||||
public class GATKDocUtils {
|
|
||||||
private final static String URL_ROOT_FOR_RELEASE_GATKDOCS = "http://www.broadinstitute.org/gsa/gatkdocs/release/";
|
|
||||||
private final static String URL_ROOT_FOR_STABLE_GATKDOCS = "http://iwww.broadinstitute.org/gsa/gatkdocs/stable/";
|
|
||||||
private final static String URL_ROOT_FOR_UNSTABLE_GATKDOCS = "http://iwww.broadinstitute.org/gsa/gatkdocs/unstable/";
|
|
||||||
|
|
||||||
public static String htmlFilenameForClass(Class c) {
|
|
||||||
return c.getName().replace(".", "_") + ".html";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String helpLinksToGATKDocs(Class c) {
|
|
||||||
String classPath = htmlFilenameForClass(c);
|
|
||||||
StringBuilder b = new StringBuilder();
|
|
||||||
b.append("release version: ").append(URL_ROOT_FOR_RELEASE_GATKDOCS).append(classPath).append("\n");
|
|
||||||
b.append("stable version: ").append(URL_ROOT_FOR_STABLE_GATKDOCS).append(classPath).append("\n");
|
|
||||||
b.append("unstable version: ").append(URL_ROOT_FOR_UNSTABLE_GATKDOCS).append(classPath).append("\n");
|
|
||||||
return b.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -32,6 +32,10 @@ import org.broadinstitute.sting.utils.classloader.JVMUtils;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
public class HelpUtils {
|
public class HelpUtils {
|
||||||
|
public final static String URL_ROOT_FOR_RELEASE_GATKDOCS = "http://www.broadinstitute.org/gsa/gatkdocs/release/";
|
||||||
|
public final static String URL_ROOT_FOR_STABLE_GATKDOCS = "http://iwww.broadinstitute.org/gsa/gatkdocs/stable/";
|
||||||
|
public final static String URL_ROOT_FOR_UNSTABLE_GATKDOCS = "http://iwww.broadinstitute.org/gsa/gatkdocs/unstable/";
|
||||||
|
|
||||||
protected static boolean implementsInterface(ProgramElementDoc classDoc, Class... interfaceClasses) {
|
protected static boolean implementsInterface(ProgramElementDoc classDoc, Class... interfaceClasses) {
|
||||||
for (Class interfaceClass : interfaceClasses)
|
for (Class interfaceClass : interfaceClasses)
|
||||||
if (assignableToClass(classDoc, interfaceClass, false))
|
if (assignableToClass(classDoc, interfaceClass, false))
|
||||||
|
|
@ -74,4 +78,17 @@ public class HelpUtils {
|
||||||
String.format("%s.%s", containingPackage.name(), doc.name()) :
|
String.format("%s.%s", containingPackage.name(), doc.name()) :
|
||||||
String.format("%s", doc.name());
|
String.format("%s", doc.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String htmlFilenameForClass(Class c) {
|
||||||
|
return c.getName().replace(".", "_") + ".html";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String helpLinksToGATKDocs(Class c) {
|
||||||
|
String classPath = htmlFilenameForClass(c);
|
||||||
|
StringBuilder b = new StringBuilder();
|
||||||
|
b.append("release version: ").append(URL_ROOT_FOR_RELEASE_GATKDOCS).append(classPath).append("\n");
|
||||||
|
b.append("stable version: ").append(URL_ROOT_FOR_STABLE_GATKDOCS).append(classPath).append("\n");
|
||||||
|
b.append("unstable version: ").append(URL_ROOT_FOR_UNSTABLE_GATKDOCS).append(classPath).append("\n");
|
||||||
|
return b.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -26,7 +26,6 @@
|
||||||
package org.broadinstitute.sting.commandline;
|
package org.broadinstitute.sting.commandline;
|
||||||
|
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.beagle.BeagleFeature;
|
|
||||||
import org.broadinstitute.sting.utils.exceptions.UserException;
|
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||||||
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
|
|
@ -35,7 +34,6 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
||||||
import org.testng.annotations.BeforeMethod;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import javax.script.Bindings;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import org.testng.Assert;
|
||||||
import org.broadinstitute.sting.BaseTest;
|
import org.broadinstitute.sting.BaseTest;
|
||||||
import org.broadinstitute.sting.gatk.datasources.reads.Shard;
|
import org.broadinstitute.sting.gatk.datasources.reads.Shard;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.table.TableFeature;
|
import org.broadinstitute.sting.utils.codecs.table.TableFeature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet.RMDStorageType;
|
import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet.RMDStorageType;
|
||||||
import org.broadinstitute.sting.utils.GenomeLocParser;
|
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||||||
import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile;
|
import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import org.broadinstitute.sting.commandline.Tags;
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.broadinstitute.sting.BaseTest;
|
import org.broadinstitute.sting.BaseTest;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.table.TableFeature;
|
import org.broadinstitute.sting.utils.codecs.table.TableFeature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator;
|
import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet;
|
import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet.RMDStorageType;
|
import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet.RMDStorageType;
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ import org.broadinstitute.sting.BaseTest;
|
||||||
import org.broadinstitute.sting.commandline.RodBinding;
|
import org.broadinstitute.sting.commandline.RodBinding;
|
||||||
import org.broadinstitute.sting.commandline.Tags;
|
import org.broadinstitute.sting.commandline.Tags;
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.table.TableFeature;
|
import org.broadinstitute.sting.utils.codecs.table.TableFeature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList;
|
import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList;
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ import net.sf.picard.reference.IndexedFastaSequenceFile;
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broad.tribble.FeatureCodec;
|
import org.broad.tribble.FeatureCodec;
|
||||||
import org.broadinstitute.sting.BaseTest;
|
import org.broadinstitute.sting.BaseTest;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.table.BedTableCodec;
|
import org.broadinstitute.sting.utils.codecs.table.BedTableCodec;
|
||||||
import org.broadinstitute.sting.gatk.refdata.features.table.TableFeature;
|
import org.broadinstitute.sting.utils.codecs.table.TableFeature;
|
||||||
import org.broadinstitute.sting.utils.GenomeLocParser;
|
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCF3Codec;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCF3Codec;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue