diff --git a/java/src/org/broadinstitute/sting/alignment/AlignmentValidationWalker.java b/java/src/org/broadinstitute/sting/alignment/AlignmentValidationWalker.java index 346ff0227..2656ea554 100644 --- a/java/src/org/broadinstitute/sting/alignment/AlignmentValidationWalker.java +++ b/java/src/org/broadinstitute/sting/alignment/AlignmentValidationWalker.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.alignment; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.commandline.Argument; @@ -69,14 +70,6 @@ public class AlignmentValidationWalker extends ReadWalker { aligner = new BWACAligner(bwtFiles,configuration); } - /** Must return true for reads that need to be processed. Reads, for which this method return false will - * be skipped by the engine and never passed to the walker. - */ - @Override - public boolean filter(char[] ref, SAMRecord read) { - return true; - } - /** * Aligns a read to the given reference. * @param ref Reference over the read. Read will most likely be unmapped, so ref will be null. @@ -84,7 +77,7 @@ public class AlignmentValidationWalker extends ReadWalker { * @return Number of reads aligned by this map (aka 1). */ @Override - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { //logger.info(String.format("examining read %s", read.getReadName())); byte[] bases = read.getReadBases(); diff --git a/java/src/org/broadinstitute/sting/alignment/AlignmentWalker.java b/java/src/org/broadinstitute/sting/alignment/AlignmentWalker.java index 4ba4184d0..3787c9fb9 100644 --- a/java/src/org/broadinstitute/sting/alignment/AlignmentWalker.java +++ b/java/src/org/broadinstitute/sting/alignment/AlignmentWalker.java @@ -29,6 +29,7 @@ import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.walkers.WalkerName; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.alignment.bwa.c.BWACAligner; import org.broadinstitute.sting.alignment.bwa.BWAConfiguration; import org.broadinstitute.sting.alignment.bwa.BWTFiles; @@ -70,14 +71,6 @@ public class AlignmentWalker extends ReadWalker { */ private SAMFileHeader header; - /** Must return true for reads that need to be processed. Reads, for which this method return false will - * be skipped by the engine and never passed to the walker. - */ - @Override - public boolean filter(char[] ref, SAMRecord read) { - return true; - } - /** * Create an aligner object. The aligner object will load and hold the BWT until close() is called. */ @@ -109,7 +102,7 @@ public class AlignmentWalker extends ReadWalker { * @return Number of alignments found for this read. */ @Override - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { SAMRecord alignedRead = aligner.align(read,header); if (outputBam != null) { outputBam.addAlignment(alignedRead); diff --git a/java/src/org/broadinstitute/sting/alignment/CountBestAlignmentsWalker.java b/java/src/org/broadinstitute/sting/alignment/CountBestAlignmentsWalker.java index 3d0a8657b..2090f0ffa 100644 --- a/java/src/org/broadinstitute/sting/alignment/CountBestAlignmentsWalker.java +++ b/java/src/org/broadinstitute/sting/alignment/CountBestAlignmentsWalker.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.alignment; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.alignment.bwa.BWTFiles; import org.broadinstitute.sting.alignment.bwa.BWAConfiguration; import org.broadinstitute.sting.alignment.bwa.c.BWACAligner; @@ -75,7 +76,7 @@ public class CountBestAlignmentsWalker extends ReadWalker { * @return Number of alignments found for this read. */ @Override - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { Iterator alignmentIterator = aligner.getAllAlignments(read.getReadBases()).iterator(); if(alignmentIterator.hasNext()) { int numAlignments = alignmentIterator.next().length; diff --git a/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java b/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java index 0db2801ac..3ea81112e 100644 --- a/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java +++ b/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java @@ -51,18 +51,20 @@ public class ReferenceContext { /** * The bases in the window around the current locus. */ - private char[] bases; + private byte[] bases; + + private char[] basesAsCharCached = null; /** * Contructor for a simple, windowless reference context. * @param locus locus of interest. * @param base reference base at that locus. */ - public ReferenceContext( GenomeLoc locus, char base ) { - this( locus, locus, new char[] { base } ); + public ReferenceContext( GenomeLoc locus, byte base ) { + this( locus, locus, new byte[] { base } ); } - public ReferenceContext( GenomeLoc locus, GenomeLoc window, char[] bases ) { + public ReferenceContext( GenomeLoc locus, GenomeLoc window, byte[] bases ) { // if( !window.containsP(locus) ) // throw new StingException("Invalid locus or window; window does not contain locus"); @@ -87,10 +89,15 @@ public class ReferenceContext { * Get the base at the given locus. * @return The base at the given locus from the reference. */ - public char getBase() { + public byte getBase() { return bases[(int)(locus.getStart() - window.getStart())]; } + @Deprecated + public char getBaseAsChar() { + return (char)getBase(); + } + /** * Get the base at the given locus. * @return The base at the given locus from the reference. @@ -104,10 +111,18 @@ public class ReferenceContext { * @return All bases available. If the window is of size [0,0], the array will * contain only the base at the given locus. */ - public char[] getBases() { + public byte[] getBases() { return bases; } + @Deprecated + public char[] getBasesAsChars() { + if ( basesAsCharCached == null ) + basesAsCharCached = new String(bases).toCharArray(); + return basesAsCharCached; + } + + /** Extracts from the current window and returns n bases starting at this context's locus (NOT * from the window start!). The returned array of chars is newly allocated. If n is too large (runs beyond * the right boundary of this context's window), an exception will be thrown. If n==(-1), all bases starting @@ -115,12 +130,12 @@ public class ReferenceContext { * @param n number of requested bases including and starting from the current locus * @return */ - public char[] getBasesAtLocus(int n) { + public byte[] getBasesAtLocusAsByte(int n) { int start = (int)(locus.getStart()-window.getStart()); int stop = ( n==(-1) ? bases.length : start+n ); - char[] b = new char[stop-start]; + byte[] b = new byte[stop-start]; if ( stop > bases.length ) throw new StingException("Bases beyond the current window requested: window="+window+", requested="+n); @@ -129,4 +144,9 @@ public class ReferenceContext { for ( int j = start ; j < stop ; j++) b[i++]=bases[j]; return b; } + + @Deprecated + public char[] getBasesAtLocus(int n) { + return new String(getBasesAtLocusAsByte(n)).toCharArray(); + } } diff --git a/java/src/org/broadinstitute/sting/gatk/contexts/variantcontext/Allele.java b/java/src/org/broadinstitute/sting/gatk/contexts/variantcontext/Allele.java index d4712bd72..45e6d7221 100755 --- a/java/src/org/broadinstitute/sting/gatk/contexts/variantcontext/Allele.java +++ b/java/src/org/broadinstitute/sting/gatk/contexts/variantcontext/Allele.java @@ -120,6 +120,16 @@ public class Allele implements Comparable { throw new IllegalArgumentException("Unexpected base in allele bases " + new String(bases)); } + + public Allele(byte base, boolean isRef) { + this( base1ToBases(base), isRef); + } + + private static byte[] base1ToBases(byte base) { + byte[] bases = { base }; + return bases; + } + /** * @param bases bases representing an allele * @return true if the bases represent the null allele @@ -171,6 +181,7 @@ public class Allele implements Comparable { this(bases.getBytes(), isRef); } + /** * Creates a non-Ref allele. @see Allele(byte[], boolean) for full information * diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java index 67ff504a1..ff29d9317 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java @@ -174,27 +174,51 @@ public class LocusReferenceView extends ReferenceView { //validateLocation( genomeLoc ); GenomeLoc window = GenomeLocParser.createGenomeLoc( genomeLoc.getContig(), getWindowStart(genomeLoc), getWindowStop(genomeLoc) ); - char[] bases = null; - if(bounds != null) { + int refStart = -1; + if (bounds != null) { window = trimToBounds(window); - bases = StringUtil.bytesToString( referenceSequence.getBases(), (int)(window.getStart() - getWindowStart(bounds)), (int)window.size() ).toCharArray(); + refStart = (int)(window.getStart() - getWindowStart(bounds)); } else { if(referenceSequence == null || referenceSequence.getContigIndex() != genomeLoc.getContigIndex()) referenceSequence = reference.getSequence(genomeLoc.getContig()); - bases = StringUtil.bytesToString( referenceSequence.getBases(), (int)window.getStart()-1, (int)window.size()).toCharArray(); + refStart = (int)window.getStart()-1; } + + // todo -- how often is this copy unnecessary? + int len = (int)window.size(); + byte[] bases = new byte[len]; + System.arraycopy(referenceSequence.getBases(), refStart, bases, 0, len); return new ReferenceContext( genomeLoc, window, bases ); } +// public ReferenceContext getReferenceContext( GenomeLoc genomeLoc ) { +// //validateLocation( genomeLoc ); +// +// GenomeLoc window = GenomeLocParser.createGenomeLoc( genomeLoc.getContig(), getWindowStart(genomeLoc), getWindowStop(genomeLoc) ); +// char[] bases = null; +// +// if(bounds != null) { +// window = trimToBounds(window); +// bases = StringUtil.bytesToString( referenceSequence.getBases(), (int)(window.getStart() - getWindowStart(bounds)), (int)window.size() ).toCharArray(); +// } +// else { +// if(referenceSequence == null || referenceSequence.getContigIndex() != genomeLoc.getContigIndex()) +// referenceSequence = reference.getSequence(genomeLoc.getContig()); +// bases = StringUtil.bytesToString( referenceSequence.getBases(), (int)window.getStart()-1, (int)window.size()).toCharArray(); +// } +// return new ReferenceContext( genomeLoc, window, bases ); +// } + + /** * Allow the user to pull reference info from any arbitrary region of the reference. * @param genomeLoc The locus. * @return A list of the bases starting at the start of the locus (inclusive) and ending * at the end of the locus (inclusive). */ - public char[] getReferenceBases( GenomeLoc genomeLoc ) { + public byte[] getReferenceBases( GenomeLoc genomeLoc ) { return super.getReferenceBases(genomeLoc); } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java index 74e5326ed..6384f7c39 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java @@ -7,6 +7,7 @@ import net.sf.picard.reference.ReferenceSequence; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; /* * Copyright (c) 2009 The Broad Institute * @@ -61,10 +62,16 @@ public class ReadReferenceView extends ReferenceView { * mapped to the reference, followed by X's coresponding to the rest of the read. * This indicates that the rest lies off the end of the contig. */ - public char[] getReferenceBases( SAMRecord read ) { - if (read.getReadUnmappedFlag()) - return null; - return getReferenceBases( GenomeLocParser.createGenomeLoc(read) ); +// public char[] getReferenceBases( SAMRecord read ) { +// if (read.getReadUnmappedFlag()) +// return null; +// return getReferenceBases( GenomeLocParser.createGenomeLoc(read) ); +// } + + public ReferenceContext getReferenceContext( SAMRecord read ) { + GenomeLoc loc = GenomeLocParser.createGenomeLoc(read); + byte[] bases = super.getReferenceBases(loc); + return new ReferenceContext( loc, loc, bases ); } } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java index d75e23d61..f90c7c10c 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java @@ -3,11 +3,15 @@ package org.broadinstitute.sting.gatk.datasources.providers; import org.broadinstitute.sting.utils.fasta.IndexedFastaSequenceFile; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.StingException; +import org.broadinstitute.sting.utils.GenomeLocParser; import java.util.Collections; import java.util.Collection; +import java.util.Arrays; import net.sf.samtools.SAMSequenceRecord; +import net.sf.samtools.SAMRecord; import net.sf.samtools.util.StringUtil; import net.sf.picard.reference.ReferenceSequence; /** @@ -60,10 +64,41 @@ public class ReferenceView implements View { * @return A list of the bases starting at the start of the locus (inclusive) and ending * at the end of the locus (inclusive). */ - protected char[] getReferenceBases( GenomeLoc genomeLoc ) { +// protected char[] getReferenceBasesAsChars( GenomeLoc genomeLoc ) { +//// SAMSequenceRecord sequenceInfo = reference.getSequenceDictionary().getSequence(genomeLoc.getContig()); +//// long stop = Math.min( genomeLoc.getStop(), sequenceInfo.getSequenceLength() ); +//// ReferenceSequence subsequence = reference.getSubsequenceAt(genomeLoc.getContig(),genomeLoc.getStart(),stop); +//// return (StringUtil.bytesToString(subsequence.getBases()) + Utils.dupString('X', (int)(genomeLoc.getStop() - stop)) ).toCharArray(); +// return new String(getReferenceBases(genomeLoc)).toCharArray(); +// } + + final static int BUFFER = 10000; + final static byte[] Xs = new byte[BUFFER]; + static { + Arrays.fill(Xs, (byte)'X'); + } + + protected byte[] getReferenceBases( SAMRecord read ) { + return getReferenceBases(GenomeLocParser.createGenomeLoc(read)); + + } + + protected byte[] getReferenceBases( GenomeLoc genomeLoc ) { SAMSequenceRecord sequenceInfo = reference.getSequenceDictionary().getSequence(genomeLoc.getContig()); long stop = Math.min( genomeLoc.getStop(), sequenceInfo.getSequenceLength() ); - ReferenceSequence subsequence = reference.getSubsequenceAt(genomeLoc.getContig(),genomeLoc.getStart(),stop); - return (StringUtil.bytesToString(subsequence.getBases()) + Utils.dupString('X', (int)(genomeLoc.getStop() - stop)) ).toCharArray(); + ReferenceSequence subsequence = reference.getSubsequenceAt(genomeLoc.getContig(), genomeLoc.getStart(), stop); + + int overhang = (int)(genomeLoc.getStop() - stop); + if ( overhang > 0 ) { + if ( overhang > BUFFER ) // todo -- this is a bit dangerous + throw new StingException("Insufficient buffer size for Xs overhanging genome -- expand BUFFER"); + byte[] all = new byte[subsequence.getBases().length + overhang]; + System.arraycopy(subsequence.getBases(), 0, all, 0, subsequence.getBases().length); + System.arraycopy(Xs, 0, all, subsequence.getBases().length, overhang); + return all; + } else { + // fast path + return subsequence.getBases(); + } } } diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java b/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java index ba7366039..e8c834653 100644 --- a/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java @@ -232,6 +232,7 @@ public class RefMetaDataTracker { * * see getVariantContexts for more information. * + * @param ref ReferenceContext to enable conversion to variant context * @param name name * @param curLocation location * @param allowedTypes allowed types @@ -239,17 +240,17 @@ public class RefMetaDataTracker { * @param takeFirstOnly do we take the first rod only? * @return variant context */ - public Collection getVariantContexts(String name, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { - return getVariantContexts(null, Arrays.asList(name), allowedTypes, curLocation, requireStartHere, takeFirstOnly); - } +// public Collection getVariantContexts(String name, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { +// return getVariantContexts(null, Arrays.asList(name), allowedTypes, curLocation, requireStartHere, takeFirstOnly); +// } public Collection getVariantContexts(ReferenceContext ref, String name, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { return getVariantContexts(ref, Arrays.asList(name), allowedTypes, curLocation, requireStartHere, takeFirstOnly); } - public Collection getVariantContexts(Collection names, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { - return getVariantContexts(null, names, allowedTypes, curLocation, requireStartHere, takeFirstOnly); - } +// public Collection getVariantContexts(Collection names, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { +// return getVariantContexts(null, names, allowedTypes, curLocation, requireStartHere, takeFirstOnly); +// } public Collection getVariantContexts(ReferenceContext ref, Collection names, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere, boolean takeFirstOnly ) { Collection contexts = new ArrayList(); @@ -274,8 +275,8 @@ public class RefMetaDataTracker { * @param requireStartHere do we require the rod to start at this location? * @return variant context */ - public VariantContext getVariantContext(String name, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere ) { - Collection contexts = getVariantContexts(name, allowedTypes, curLocation, requireStartHere, false ); + public VariantContext getVariantContext(ReferenceContext ref, String name, EnumSet allowedTypes, GenomeLoc curLocation, boolean requireStartHere ) { + Collection contexts = getVariantContexts(ref, name, allowedTypes, curLocation, requireStartHere, false ); if ( contexts.size() > 1 ) throw new StingException("Requested a single VariantContext object for track " + name + " but multiple variants were present at position " + curLocation); diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java b/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java index 11adf5a0b..085428ea0 100755 --- a/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java @@ -61,17 +61,17 @@ public class VariantContextAdaptors { /** generic superclass */ private static abstract class VCAdaptor { - abstract VariantContext convert(String name, Object input); +// abstract VariantContext convert(String name, Object input); abstract VariantContext convert(String name, Object input, ReferenceContext ref); } - public static VariantContext toVariantContext(String name, Object variantContainingObject) { - if ( ! adaptors.containsKey(variantContainingObject.getClass()) ) - return null; - else { - return adaptors.get(variantContainingObject.getClass()).convert(name, variantContainingObject); - } - } +// public static VariantContext toVariantContext(String name, Object variantContainingObject) { +// if ( ! adaptors.containsKey(variantContainingObject.getClass()) ) +// return null; +// else { +// return adaptors.get(variantContainingObject.getClass()).convert(name, variantContainingObject); +// } +// } public static VariantContext toVariantContext(String name, Object variantContainingObject, ReferenceContext ref) { if ( ! adaptors.containsKey(variantContainingObject.getClass()) ) @@ -96,9 +96,9 @@ public class VariantContextAdaptors { // -------------------------------------------------------------------------------------------------------------- private static class DBSnpAdaptor extends VCAdaptor { - VariantContext convert(String name, Object input) { - return convert(name, input, null); - } +// VariantContext convert(String name, Object input) { +// return convert(name, input, null); +// } VariantContext convert(String name, Object input, ReferenceContext ref) { DbSNPFeature dbsnp = (DbSNPFeature)input; @@ -132,10 +132,10 @@ public class VariantContextAdaptors { } private static class VCFRecordAdaptor extends VCAdaptor { - // WARNING: do not use this method if you have anything other than point mutations in your VCF - VariantContext convert(String name, Object input) { - return vcfToVariantContext(name, (VCFRecord)input, null); - } +// // WARNING: do not use this method if you have anything other than point mutations in your VCF +// VariantContext convert(String name, Object input) { +// return vcfToVariantContext(name, (VCFRecord)input, null); +// } VariantContext convert(String name, Object input, ReferenceContext ref) { return vcfToVariantContext(name, (VCFRecord)input, ref); @@ -168,7 +168,7 @@ public class VariantContextAdaptors { Allele allele; // special case: semi-deletion if ( vcf.isDeletion() && refAllele.length() > alt.getLength() ) { - char[] semiDeletion = new char[refAllele.length() - alt.getLength()]; + byte[] semiDeletion = new byte[refAllele.length() - alt.getLength()]; System.arraycopy(ref.getBases(), alt.getLength(), semiDeletion, 0, refAllele.length() - alt.getLength()); allele = new Allele(String.valueOf(semiDeletion), false); } else { @@ -223,13 +223,16 @@ public class VariantContextAdaptors { } private static Allele determineRefAllele(VCFRecord vcf, ReferenceContext ref) { + if ( ref == null ) + throw new StingException("Illegal determineRefAllele call!"); + Allele refAllele; if ( vcf.isInsertion() ) { refAllele = new Allele(Allele.NULL_ALLELE_STRING, true); - } else if ( ref == null ) { - refAllele = new Allele(vcf.getReference(), true); +// } else if ( ref == null ) { +// refAllele = new Allele(vcf.getReference(), true); } else if ( !vcf.isIndel() ) { - refAllele = new Allele(Character.toString(ref.getBase()), true); + refAllele = new Allele(ref.getBase(), true); } else if ( vcf.isDeletion() ) { int start = (int)(ref.getLocus().getStart() - ref.getWindow().getStart() + 1); int delLength = 0; @@ -240,9 +243,7 @@ public class VariantContextAdaptors { if ( delLength > ref.getWindow().getStop() - ref.getLocus().getStop() ) throw new IllegalArgumentException("Length of deletion is larger than reference context provided at " + ref.getLocus()); - char[] deletion = new char[delLength]; - System.arraycopy(ref.getBases(), start, deletion, 0, delLength); - refAllele = new Allele(String.valueOf(deletion), true); + refAllele = deletionAllele(ref, start, delLength); } else { throw new UnsupportedOperationException("Conversion of VCF type " + vcf.getType() + " is not supported."); } @@ -250,6 +251,13 @@ public class VariantContextAdaptors { return refAllele; } + private static Allele deletionAllele(ReferenceContext ref, int start, int len) { + byte[] deletion = new byte[len]; + System.arraycopy(ref.getBases(), start, deletion, 0, len); + return new Allele(deletion, true); + } + + public static VCFHeader createVCFHeader(Set hInfo, VariantContext vc) { HashSet names = new LinkedHashSet(); for ( Genotype g : vc.getGenotypesSortedByName() ) { @@ -259,11 +267,11 @@ public class VariantContextAdaptors { return new VCFHeader(hInfo == null ? new HashSet() : hInfo, names); } - public static VCFRecord toVCF(VariantContext vc, char vcfRefBase) { + public static VCFRecord toVCF(VariantContext vc, byte vcfRefBase) { return toVCF(vc, vcfRefBase, null, true, false); } - public static VCFRecord toVCF(VariantContext vc, char vcfRefBase, List allowedGenotypeAttributeKeys, boolean filtersWereAppliedToContext, boolean filtersWereAppliedToGenotypes) { + public static VCFRecord toVCF(VariantContext vc, byte vcfRefBase, List allowedGenotypeAttributeKeys, boolean filtersWereAppliedToContext, boolean filtersWereAppliedToGenotypes) { // deal with the reference String referenceBases = new String(vc.getReference().getBases()); @@ -293,21 +301,21 @@ public class VariantContextAdaptors { if ( a.isNull() ) { if ( a.isReference() ) { // ref, where alt is insertion - encoding = new VCFGenotypeEncoding(Character.toString(vcfRefBase)); + encoding = new VCFGenotypeEncoding(Character.toString((char)vcfRefBase)); } else { // non-ref deletion encoding = new VCFGenotypeEncoding("D" + Integer.toString(referenceBases.length())); } } else if ( a.isReference() ) { // ref, where alt is deletion - encoding = new VCFGenotypeEncoding(Character.toString(vcfRefBase)); + encoding = new VCFGenotypeEncoding(Character.toString((char)vcfRefBase)); } else { // non-ref insertion encoding = new VCFGenotypeEncoding("I" + alleleString); } } else if ( vc.getType() == VariantContext.Type.NO_VARIATION ) { // ref - encoding = new VCFGenotypeEncoding(Character.toString(vcfRefBase)); + encoding = new VCFGenotypeEncoding(Character.toString((char)vcfRefBase)); } else { // ref or alt for snp encoding = new VCFGenotypeEncoding(alleleString); @@ -381,7 +389,7 @@ public class VariantContextAdaptors { infoFields.put(key, outputValue); } - return new VCFRecord(Character.toString(vcfRefBase), contig, position, ID, vcfAltAlleles, qual, filters, infoFields, genotypeFormatString, genotypeObjects); + return new VCFRecord(Character.toString((char)vcfRefBase), contig, position, ID, vcfAltAlleles, qual, filters, infoFields, genotypeFormatString, genotypeObjects); } private static String formatVCFField(String key, Object val) { @@ -389,7 +397,7 @@ public class VariantContextAdaptors { if ( val == null ) result = VCFGenotypeRecord.getMissingFieldValue(key); else if ( val instanceof Double ) - result = String.format("%.2f", val); + result = String.format("%.2f", (Double)val); else result = val.toString(); @@ -418,9 +426,9 @@ public class VariantContextAdaptors { // -------------------------------------------------------------------------------------------------------------- private static class PlinkRodAdaptor extends VCAdaptor { - VariantContext convert(String name, Object input) { - return convert(name, input, null); - } +// VariantContext convert(String name, Object input) { +// return convert(name, input, null); +// } VariantContext convert(String name, Object input, ReferenceContext ref) { if ( ref == null ) @@ -487,16 +495,15 @@ public class VariantContextAdaptors { private Allele determineRefAllele(PlinkRod plink, ReferenceContext ref) { Allele refAllele; if ( !plink.isIndel() ) { - refAllele = new Allele(Character.toString(ref.getBase()), true); + refAllele = new Allele(ref.getBase(), true); } else if ( plink.isInsertion() ) { refAllele = new Allele(Allele.NULL_ALLELE_STRING, true); } else { long maxLength = ref.getWindow().getStop() - ref.getLocus().getStop(); if ( plink.getLength() > maxLength ) throw new UnsupportedOperationException("Plink conversion currently can only handle indels up to length " + maxLength); - char[] deletion = new char[plink.getLength()]; - System.arraycopy(ref.getBases(), 1, deletion, 0, plink.getLength()); - refAllele = new Allele(String.valueOf(deletion), true); + refAllele = deletionAllele(ref, 1, plink.getLength()); + } return refAllele; } @@ -588,9 +595,9 @@ public class VariantContextAdaptors { * @param input the Rod object, in this case a RodGeliText * @return a VariantContext object */ - VariantContext convert(String name, Object input) { - return convert(name, input, null); - } +// VariantContext convert(String name, Object input) { +// return convert(name, input, null); +// } /** * convert to a Variant Context, given: @@ -656,9 +663,9 @@ public class VariantContextAdaptors { * @param input the Rod object, in this case a RodGeliText * @return a VariantContext object */ - VariantContext convert(String name, Object input) { - return convert(name, input, null); - } +// VariantContext convert(String name, Object input) { +// return convert(name, input, null); +// } /** * convert to a Variant Context, given: @@ -729,9 +736,9 @@ public class VariantContextAdaptors { * @param input the Rod object, in this case a RodGeliText * @return a VariantContext object */ - VariantContext convert(String name, Object input) { - return convert(name, input, null); - } +// VariantContext convert(String name, Object input) { +// return convert(name, input, null); +// } /** * convert to a Variant Context, given: @@ -748,7 +755,7 @@ public class VariantContextAdaptors { // add the reference allele HashSet alleles = new HashSet(); - Allele refAllele = new Allele(Character.toString(ref.getBase()), true); + Allele refAllele = new Allele(ref.getBase(), true); alleles.add(refAllele); // make a mapping from sample to genotype diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java index 01a0c2cd8..ccd6b3aad 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java @@ -3,11 +3,13 @@ package org.broadinstitute.sting.gatk.traversals; import net.sf.samtools.SAMRecord; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.WalkerManager; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.providers.*; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.GenomeLoc; /* * Copyright (c) 2009 The Broad Institute @@ -77,12 +79,12 @@ public class TraverseReads extends TraversalEngine,Read // while we still have more reads for (SAMRecord read : reads) { - // an array of characters that represent the reference - char[] refSeq = null; + // ReferenceContext -- the reference bases covered by the read + ReferenceContext refContext = null; // get the array of characters for the reference sequence, since we're a mapped read if (needsReferenceBasesP && !read.getReadUnmappedFlag() && dataProvider.hasReference()) - refSeq = reference.getReferenceBases(read); + refContext = reference.getReferenceContext(read); // update the number of reads we've seen TraversalStatistics.nRecords++; @@ -91,9 +93,9 @@ public class TraverseReads extends TraversalEngine,Read // if the read is mapped, create a metadata tracker ReadMetaDataTracker tracker = (read.getReferenceIndex() >= 0) ? rodView.getReferenceOrderedDataForRead(read) : null; - final boolean keepMeP = walker.filter(refSeq, read); + final boolean keepMeP = walker.filter(refContext, read); if (keepMeP) { - M x = walker.map(refSeq, read, tracker); // the tracker can be null + M x = walker.map(refContext, read, tracker); // the tracker can be null sum = walker.reduce(x, sum); } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java index 80e5d8f90..7e5ad30bd 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java @@ -34,6 +34,7 @@ import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import java.util.*; import java.util.regex.Pattern; @@ -168,7 +169,7 @@ public class ClipReadsWalker extends ReadWalker { public SAMFileHeader.SortOrder SORT_ORDER=SAMFileHeader.SortOrder.coordinate; @Override - public SAMRecord map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public SAMRecord map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { return read; } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java index bf115e1e3..87ce1f93e 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java @@ -2,6 +2,7 @@ package org.broadinstitute.sting.gatk.walkers; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import java.text.DecimalFormat; import java.text.NumberFormat; @@ -113,7 +114,7 @@ public class FlagStatWalker extends ReadWalker { private FlagStat myStat = new FlagStat(); - public Integer map( char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { + public Integer map( ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { myStat.readCount++; if (read.getReadFailsVendorQualityCheckFlag()) { myStat.QC_failure++; diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java index 4c78fdacf..48103c0ea 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java @@ -89,7 +89,7 @@ public class PileupWalker extends LocusWalker implements TreeR if(shouldShowSecondaryBasePileup(basePileup)) secondBasePileup = getSecondBasePileup(basePileup); - out.printf("%s%s %s%n", basePileup.getPileupString(ref.getBase()), secondBasePileup, rods); + out.printf("%s%s %s%n", basePileup.getPileupString(ref.getBaseAsChar()), secondBasePileup, rods); } if ( context.hasExtendedEventPileup() ) { diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java index d68e63ee1..6f63f4dd6 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java @@ -29,6 +29,7 @@ import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMReadGroupRecord; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; /** @@ -63,7 +64,7 @@ public class PrintReadsWalker extends ReadWalker { * @param read the read itself, as a SAMRecord * @return true if the read passes the filter, false if it doesn't */ - public boolean filter(char[] ref, SAMRecord read) { + public boolean filter(ReferenceContext ref, SAMRecord read) { // check the read group if ( readGroup != null ) { SAMReadGroupRecord myReadGroup = read.getReadGroup(); @@ -91,7 +92,7 @@ public class PrintReadsWalker extends ReadWalker { * @param read the read itself, as a SAMRecord * @return the read itself */ - public SAMRecord map( char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { + public SAMRecord map( ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { return read; } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java index a09ab7df8..5de608c64 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java @@ -2,6 +2,7 @@ package org.broadinstitute.sting.gatk.walkers; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; /** * Created by IntelliJ IDEA. @@ -18,11 +19,11 @@ public abstract class ReadWalker extends Walker depth = new Pair(0, 0); for ( String sample : stratifiedContexts.keySet() ) { //Pair sampleDepth = getSecondaryPileupNonrefCount(ref.getBase(),stratifiedContexts.get(sample).getContext(StratifiedAlignmentContext.StratifiedContextType.COMPLETE).getPileup(), alternate); - Pair sampleDepth = getSecondaryPileupNonrefCount(ref.getBase(), stratifiedContexts.get(sample).getContext(StratifiedAlignmentContext.StratifiedContextType.COMPLETE).getBasePileup(), alternate); + Pair sampleDepth = getSecondaryPileupNonrefCount(ref.getBaseAsChar(), stratifiedContexts.get(sample).getContext(StratifiedAlignmentContext.StratifiedContextType.COMPLETE).getBasePileup(), alternate); depth.first += sampleDepth.first; depth.second += sampleDepth.second; } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java b/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java index d447b48ec..3f068c2a2 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java @@ -171,7 +171,7 @@ public class VariantAnnotator extends LocusWalker { return 0; Object variant = rods.get(0); - VariantContext vc = VariantContextAdaptors.toVariantContext("variant", variant); + VariantContext vc = VariantContextAdaptors.toVariantContext("variant", variant, ref); if ( vc == null ) return 0; diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/concordance/IndelSubsets.java b/java/src/org/broadinstitute/sting/gatk/walkers/concordance/IndelSubsets.java index 7e9826f51..af64530fc 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/concordance/IndelSubsets.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/concordance/IndelSubsets.java @@ -77,12 +77,12 @@ public class IndelSubsets implements ConcordanceType { } private int homopolymerRunSize(ReferenceContext ref, VCFRecord indel) { - char[] bases = ref.getBases(); + byte[] bases = ref.getBases(); GenomeLoc window = ref.getWindow(); GenomeLoc locus = ref.getLocus(); int refBasePos = (int)(locus.getStart() - window.getStart()); - char indelBase = indel.isDeletion() ? bases[refBasePos+1] : indel.getAlternateAlleleList().get(0).charAt(0); + byte indelBase = indel.isDeletion() ? bases[refBasePos+1] : (byte)indel.getAlternateAlleleList().get(0).charAt(0); int leftRun = 0; for ( int i = refBasePos; i >= 0; i--) { if ( bases[i] != indelBase ) @@ -90,7 +90,7 @@ public class IndelSubsets implements ConcordanceType { leftRun++; } - indelBase = indel.isDeletion() ? bases[Math.min(refBasePos+indel.getAlternateAlleleList().get(0).length(),bases.length-1)] : indel.getAlternateAlleleList().get(0).charAt(indel.getAlternateAlleleList().get(0).length()-1); + indelBase = indel.isDeletion() ? bases[Math.min(refBasePos+indel.getAlternateAlleleList().get(0).length(),bases.length-1)] : (byte)indel.getAlternateAlleleList().get(0).charAt(indel.getAlternateAlleleList().get(0).length()-1); int rightRun = 0; for ( int i = refBasePos + (indel.isDeletion() ? 1+indel.getAlternateAlleleList().get(0).length() : 1); i < bases.length; i++) { if ( bases[i] != indelBase ) diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/concordance/SNPGenotypeConcordance.java b/java/src/org/broadinstitute/sting/gatk/walkers/concordance/SNPGenotypeConcordance.java index 62a53139a..095180cb9 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/concordance/SNPGenotypeConcordance.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/concordance/SNPGenotypeConcordance.java @@ -31,7 +31,7 @@ public class SNPGenotypeConcordance implements ConcordanceType { } public String computeConcordance(Map samplesToRecords, ReferenceContext ref) { - char refBase = ref.getBase(); + char refBase = ref.getBaseAsChar(); VCFGenotypeRecord call1 = samplesToRecords.get(sample1); if ( call1 != null && call1.isNoCall() ) @@ -90,7 +90,7 @@ public class SNPGenotypeConcordance implements ConcordanceType { // are they the same genotype if ( genotype1.equals(genotype2) ) result.append("sameGenotype"); - else if ( sameVariantAllele(genotype1, genotype2, ref.getBase()) ) + else if ( sameVariantAllele(genotype1, genotype2, ref.getBaseAsChar()) ) result.append("differentGenotypeSameVariantAllele"); else result.append("differentVariantAllele"); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java index ef8e55bb2..ece400d5a 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java @@ -29,6 +29,7 @@ import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; /** @@ -54,7 +55,7 @@ public class CoarseCoverageWalker extends ReadWalker { } @Override - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { if ( read.getReadUnmappedFlag() || read.getDuplicateReadFlag() || diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/fasta/BamToFastqWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/fasta/BamToFastqWalker.java index 1363c0a0a..cc0b7fe13 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/fasta/BamToFastqWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/fasta/BamToFastqWalker.java @@ -28,6 +28,7 @@ package org.broadinstitute.sting.gatk.walkers.fasta; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.walkers.WalkerName; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.commandline.Argument; import net.sf.samtools.SAMRecord; @@ -59,7 +60,7 @@ public class BamToFastqWalker extends ReadWalker { } } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { out.println("@" + read.getReadName()); if ( !RE_REVERSE || !read.getReadNegativeStrandFlag() ) { out.println(read.getReadString()); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java index dd2eca482..4972bff93 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java @@ -53,7 +53,7 @@ public class FastaAlternateReferenceWalker extends FastaReferenceWalker { return new Pair(context.getLocation(), ""); } - String refBase = String.valueOf(ref.getBase()); + String refBase = String.valueOf(ref.getBaseAsChar()); for ( VariantContext vc : tracker.getAllVariantContexts(ref) ) { // if we have multiple variants at a locus, just take the first one we see diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java index 9617d6295..88f0cf4f3 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java @@ -142,7 +142,7 @@ public class VariantFiltrationWalker extends RodWalker { if ( rods.size() == 0 ) return 0; - VariantContext vc = VariantContextAdaptors.toVariantContext("variant", rods.get(0)); + VariantContext vc = VariantContextAdaptors.toVariantContext("variant", rods.get(0), ref); FiltrationContext varContext = new FiltrationContext(tracker, ref, vc); // if we're still initializing the context, do so diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SimpleIndelCalculationModel.java b/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SimpleIndelCalculationModel.java index 019c44ed5..56212c79f 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SimpleIndelCalculationModel.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SimpleIndelCalculationModel.java @@ -9,6 +9,8 @@ import org.broadinstitute.sting.gatk.contexts.variantcontext.*; import java.util.*; +import net.sf.samtools.util.SequenceUtil; + public class SimpleIndelCalculationModel extends GenotypeCalculationModel { private int MIN_COVERAGE = 6; @@ -100,7 +102,7 @@ public class SimpleIndelCalculationModel extends GenotypeCalculationModel { // calculate the sum of quality scores for each base ReadBackedExtendedEventPileup pileup = context.getExtendedEventPileup(); - List> all_events = pileup.getEventStringsWithCounts(ref); + List> all_events = pileup.getEventStringsWithCounts(BaseUtils.charSeq2byteSeq(ref)); for ( Pair p : all_events ) { if ( p.second > bestIndelCount ) { bestIndelCount = p.second; 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 dcc8fa16d..7bec3669e 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -159,7 +159,7 @@ public class UnifiedGenotyperEngine { gcm.set(GenotypeCalculationModelFactory.makeGenotypeCalculation(samples, logger, UAC, format, verboseWriter, beagleWriter)); } - char ref = Character.toUpperCase(refContext.getBase()); + char ref = Character.toUpperCase(refContext.getBaseAsChar()); if ( !BaseUtils.isRegularBase(ref) ) return null; diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelGenotyperV2Walker.java b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelGenotyperV2Walker.java index 534d6ae65..c4b3a7947 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelGenotyperV2Walker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelGenotyperV2Walker.java @@ -39,6 +39,7 @@ import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODItera import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; import org.broadinstitute.sting.gatk.walkers.ReadFilters; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.sam.AlignmentUtils; import org.broadinstitute.sting.utils.collections.CircularArray; @@ -178,7 +179,7 @@ public class IndelGenotyperV2Walker extends ReadWalker { @Override - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { // if ( read.getReadName().equals("428EFAAXX090610:2:36:1384:639#0") ) System.out.println("GOT READ"); @@ -294,9 +295,9 @@ public class IndelGenotyperV2Walker extends ReadWalker { if ( rg == null ) throw new StingException("Read "+read.getReadName()+" has no read group in merged stream. RG is required for somatic calls."); if ( normalReadGroups.contains(rg) ) { - normal_context.add(read,ref); + normal_context.add(read,ref.getBasesAsChars()); } else if ( tumorReadGroups.contains(rg) ) { - tumor_context.add(read,ref); + tumor_context.add(read,ref.getBasesAsChars()); } else { throw new StingException("Unrecognized read group in merged stream: "+rg); } @@ -315,7 +316,7 @@ public class IndelGenotyperV2Walker extends ReadWalker { } else { - normal_context.add(read, ref); + normal_context.add(read, ref.getBasesAsChars()); if ( normal_context.getReads().size() > MAX_READ_NUMBER ) { System.out.println("WARNING: a count of "+MAX_READ_NUMBER+" reads reached in a window "+ refName+':'+normal_context.getStart()+'-'+normal_context.getStop()+". The whole window will be dropped"); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java index d5aebd2db..1d7652199 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java @@ -30,6 +30,7 @@ import net.sf.samtools.util.StringUtil; import org.broadinstitute.sting.utils.interval.IntervalMergingRule; import org.broadinstitute.sting.utils.interval.IntervalUtils; import org.broadinstitute.sting.gatk.contexts.variantcontext.VariantContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.simpleDataSources.SAMReaderID; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.VariantContextAdaptors; @@ -283,7 +284,7 @@ public class IndelRealigner extends ReadWalker { } } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { if ( currentInterval == null ) { emit(read); return 0; @@ -314,9 +315,9 @@ public class IndelRealigner extends ReadWalker { read.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START ) { readsNotToClean.add(read); } else { - readsToClean.add(read, ref); + readsToClean.add(read, ref.getBasesAsChars()); // add the rods to the list of known variants - populateKnownIndels(metaDataTracker); + populateKnownIndels(metaDataTracker, null); // todo -- fixme! } if ( readsToClean.size() + readsNotToClean.size() >= MAX_READS ) { @@ -335,7 +336,7 @@ public class IndelRealigner extends ReadWalker { return 0; } - private void cleanAndCallMap(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker, GenomeLoc readLoc) { + private void cleanAndCallMap(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker, GenomeLoc readLoc) { clean(readsToClean); knownIndelsToTry.clear(); @@ -403,7 +404,7 @@ public class IndelRealigner extends ReadWalker { } } - private void populateKnownIndels(ReadMetaDataTracker metaDataTracker) { + private void populateKnownIndels(ReadMetaDataTracker metaDataTracker, ReferenceContext ref) { for ( Collection rods : metaDataTracker.getContigOffsetMapping().values() ) { Iterator rodIter = rods.iterator(); while ( rodIter.hasNext() ) { @@ -411,7 +412,7 @@ public class IndelRealigner extends ReadWalker { if ( knownIndelsToTry.containsKey(rod) ) continue; if ( VariantContextAdaptors.canBeConvertedToVariantContext(rod)) - knownIndelsToTry.put(rod, VariantContextAdaptors.toVariantContext("", rod)); + knownIndelsToTry.put(rod, VariantContextAdaptors.toVariantContext("", rod, ref)); else knownIndelsToTry.put(rod, null); } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java b/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java index b3e7b1873..eafa4f7eb 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java @@ -123,7 +123,7 @@ public class RealignerTargetCreator extends LocusWalker { - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker tracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker tracker) { //System.out.println(read.format()); return 1; } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java index e6cbdb2f5..0734efe1c 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java @@ -29,6 +29,7 @@ import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.sam.AlignmentUtils; import org.broadinstitute.sting.commandline.Argument; @@ -104,7 +105,7 @@ public class CycleQualityWalker extends ReadWalker { } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { if ( AlignmentUtils.isReadUnmapped(read) && MAPPED_ONLY) return 0; diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java index 9d08d4081..aa3abb0e5 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java @@ -16,7 +16,7 @@ import net.sf.samtools.SAMRecord; */ public class PrintLocusContextWalker extends LocusWalker implements TreeReducible { public AlignmentContext map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { - out.printf( "In map: ref = %s, loc = %s, reads = %s%n", ref.getBase(), + out.printf( "In map: ref = %s, loc = %s, reads = %s%n", ref.getBaseAsChar(), context.getLocation(), Arrays.deepToString( getReadNames(context.getReads()) ) ); return context; diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java index 4f8d6e49f..fa10fca6b 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java @@ -26,6 +26,7 @@ import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.MathUtils; @@ -67,7 +68,7 @@ public class ReadClippingStatsWalker extends ReadWalker { * @param read the read itself, as a SAMRecord * @return true if the read passes the filter, false if it doesn't */ - public boolean filter(char[] ref, SAMRecord read) { + public boolean filter(ReferenceContext ref, SAMRecord read) { return true; } @@ -77,7 +78,7 @@ public class ReadValidationWalker extends ReadWalker { * @param read the read itself, as a SAMRecord * @return the read itself */ - public SAMRecord map( char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { + public SAMRecord map( ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { return read; } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java index 49d5ae586..95d72dae5 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java @@ -54,7 +54,7 @@ public class ValidatingPileupWalker extends LocusWalker { if( gatkRead.getBaseQualities()[offset] > 0 ) { bases = gatkRead.getReadBases(); - refBase = (byte)ref.getBase(); + refBase = ref.getBase(); // Skip if this base is an 'N' or etc. if( BaseUtils.isRegularBase( (char)(bases[offset]) ) ) { @@ -345,9 +345,9 @@ public class CovariateCounterWalker extends LocusWalker { * @param context The AlignmentContext which holds the reads covered by this locus * @param ref The reference base */ - private static void updateMismatchCounts(final Pair counts, final AlignmentContext context, final char ref) { + private static void updateMismatchCounts(final Pair counts, final AlignmentContext context, final byte ref) { for( PileupElement p : context.getBasePileup() ) { - final char readChar = (char)(p.getBase()); + final byte readChar = p.getBase(); final int readCharBaseIndex = BaseUtils.simpleBaseToBaseIndex(readChar); final int refCharBaseIndex = BaseUtils.simpleBaseToBaseIndex(ref); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java index 737abce66..e5f518d2a 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java @@ -49,6 +49,7 @@ import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.WalkerName; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.classloader.JVMUtils; import org.broadinstitute.sting.utils.classloader.PackageUtils; import org.broadinstitute.sting.utils.collections.NestedHashMap; @@ -316,7 +317,7 @@ public class TableRecalibrationWalker extends ReadWalker { logger.debug("Probing " + ref.getLocus() + " " + ref.getWindow()); - String refBase = String.valueOf(ref.getBase()); - Collection VCs = tracker.getAllVariantContexts(ref); if ( VCs.size() == 0 ) return ""; @@ -128,7 +126,7 @@ public class PickSequenomProbes extends RodWalker { } } - char[] context_bases = ref.getBases(); + byte[] context_bases = ref.getBases(); for (int i = 0; i < 401; i++) { if ( maskFlags[i] == 1 ) { context_bases[i] = 'N'; @@ -140,11 +138,11 @@ public class PickSequenomProbes extends RodWalker { String assay_sequence; if ( vc.isSNP() ) - assay_sequence = leading_bases + "[" + refBase + "/" + vc.getAlternateAllele(0).toString() + "]" + trailing_bases; + assay_sequence = leading_bases + "[" + ref.getBaseAsChar() + "/" + vc.getAlternateAllele(0).toString() + "]" + trailing_bases; else if ( vc.isInsertion() ) - assay_sequence = leading_bases + refBase + "[-/" + vc.getAlternateAllele(0).toString() + "]" + trailing_bases; + assay_sequence = leading_bases + ref.getBaseAsChar() + "[-/" + vc.getAlternateAllele(0).toString() + "]" + trailing_bases; else if ( vc.isDeletion() ) - assay_sequence = leading_bases + refBase + "[" + new String(vc.getReference().getBases()) + "/-]" + trailing_bases.substring(vc.getReference().length()); + assay_sequence = leading_bases + ref.getBaseAsChar() + "[" + new String(vc.getReference().getBases()) + "/-]" + trailing_bases.substring(vc.getReference().length()); else return ""; diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java index 0f2f14331..aa740b324 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java @@ -441,7 +441,7 @@ public class VariantEvalWalker extends RodWalker { public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { //System.out.printf("map at %s with %d skipped%n", context.getLocation(), context.getSkippedBases()); - Map vcs = getVariantContexts(tracker, context); + Map vcs = getVariantContexts(ref, tracker, context); //Collection comps = getCompVariantContexts(tracker, context); // to enable walking over pairs where eval or comps have no elements @@ -493,7 +493,7 @@ public class VariantEvalWalker extends RodWalker { return 0; } - private void writeInterestingSite(List interestingReasons, VariantContext vc, char ref) { + private void writeInterestingSite(List interestingReasons, VariantContext vc, byte ref) { if ( vc != null && writer != null && interestingReasons.size() > 0 ) { // todo -- the vc == null check is because you can be interesting because you are a FN, and so VC == null MutableVariantContext mvc = new MutableVariantContext(vc); @@ -576,21 +576,21 @@ public class VariantEvalWalker extends RodWalker { // //logger.info(String.format("Ignore second+ events at locus %s in rod %s => rec is %s", context.getLocation(), rodList.getName(), rec)); - private Map getVariantContexts(RefMetaDataTracker tracker, AlignmentContext context) { + private Map getVariantContexts(ReferenceContext ref, RefMetaDataTracker tracker, AlignmentContext context) { // todo -- we need to deal with dbSNP where there can be multiple records at the same start site. A potential solution is to // todo -- allow the variant evaluation to specify the type of variants it wants to see and only take the first such record at a site Map bindings = new HashMap(); if ( tracker != null ) { - bindVariantContexts(bindings, evalNames, tracker, context, false); - bindVariantContexts(bindings, compNames, tracker, context, true); + bindVariantContexts(ref, bindings, evalNames, tracker, context, false); + bindVariantContexts(ref, bindings, compNames, tracker, context, true); } return bindings; } - private void bindVariantContexts(Map map, Collection names, + private void bindVariantContexts(ReferenceContext ref, Map map, Collection names, RefMetaDataTracker tracker, AlignmentContext context, boolean allowExcludes ) { for ( String name : names ) { - Collection contexts = tracker.getVariantContexts(name, ALLOW_VARIANT_CONTEXT_TYPES, context.getLocation(), true, true); + Collection contexts = tracker.getVariantContexts(ref, name, ALLOW_VARIANT_CONTEXT_TYPES, context.getLocation(), true, true); if ( contexts.size() > 1 ) throw new StingException("Found multiple variant contexts at " + context.getLocation()); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/vcf/FilterLiftedVCF.java b/java/src/org/broadinstitute/sting/gatk/walkers/vcf/FilterLiftedVCF.java index 3defaa748..f758b5845 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/vcf/FilterLiftedVCF.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/vcf/FilterLiftedVCF.java @@ -80,7 +80,7 @@ public class FilterLiftedVCF extends RodWalker { List rods = tracker.getReferenceMetaData("vcf"); for ( Object rod : rods ) - filterAndWrite(ref.getBase(), (VCFRecord)rod); + filterAndWrite(ref.getBaseAsChar(), (VCFRecord)rod); return 0; } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/multisamplecaller/MultiSampleCaller.java b/java/src/org/broadinstitute/sting/oneoffprojects/multisamplecaller/MultiSampleCaller.java index d5168fdbb..473602584 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/multisamplecaller/MultiSampleCaller.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/multisamplecaller/MultiSampleCaller.java @@ -350,14 +350,14 @@ public class MultiSampleCaller extends LocusWalker= 10000) { return null; } // to deal with big piles -- totally arbitrary threshold - this.ref = ref.getBase(); - MultiSampleCallResult result = this.MultiSampleCall(tracker, ref.getBase(), context, sample_names); - if ( INCLUDE_STATS ) stats_output_file.println(DepthStats.Row(ref.getBase(), context)); + this.ref = ref.getBaseAsChar(); + MultiSampleCallResult result = this.MultiSampleCall(tracker, ref.getBaseAsChar(), context, sample_names); + if ( INCLUDE_STATS ) stats_output_file.println(DepthStats.Row(ref.getBaseAsChar(), context)); return result; } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlignedReadsHistoWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlignedReadsHistoWalker.java index 5573753eb..31982321f 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlignedReadsHistoWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlignedReadsHistoWalker.java @@ -4,6 +4,7 @@ import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.walkers.WalkerName; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; /** * Created by IntelliJ IDEA. @@ -28,7 +29,7 @@ public class AlignedReadsHistoWalker extends ReadWalker { return !read.getReadUnmappedFlag(); } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { //System.out.println(read.getAttribute("NM")); int editDist = Integer.parseInt(read.getAttribute("NM").toString()); if (editDist <= 50) diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlleleBalanceHistogramWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlleleBalanceHistogramWalker.java index 0448da9f8..1deacbfbc 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlleleBalanceHistogramWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/AlleleBalanceHistogramWalker.java @@ -104,7 +104,7 @@ public class AlleleBalanceHistogramWalker extends LocusWalker } for ( PileupElement e : alicon.getBasePileup() ) { - if ( BaseUtils.basesAreEqual( e.getBase(), (byte) ref.getBase() ) ) { + if ( BaseUtils.basesAreEqual( e.getBase(), ref.getBase() ) ) { refBases++; } else if ( BaseUtils.basesAreEqual(e.getBase(), (byte) snpBase ) ) { altBases++; diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/BaseTransitionTableCalculatorJavaWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/BaseTransitionTableCalculatorJavaWalker.java index 99eabb5a8..11047e47a 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/BaseTransitionTableCalculatorJavaWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/BaseTransitionTableCalculatorJavaWalker.java @@ -230,7 +230,7 @@ public class BaseTransitionTableCalculatorJavaWalker extends LocusWalker { } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { if ( AlignmentUtils.isReadUnmapped(read) ) return 0; diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/IOCrusherWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/IOCrusherWalker.java index d83457c23..cea131cd9 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/IOCrusherWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/IOCrusherWalker.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.oneoffprojects.walkers; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.utils.sam.ReadUtils; import net.sf.samtools.SAMRecord; @@ -63,7 +64,7 @@ public class IOCrusherWalker extends ReadWalker tracker.getReferenceMetaData("comp").size() != 0 ? tracker.getReferenceMetaData("comp").get(0) : null; VariantContext compContext; if ( comp != null ) { - compContext = VariantContextAdaptors.toVariantContext("comp",comp); + compContext = VariantContextAdaptors.toVariantContext("comp",comp, ref); } else { compContext = null; } @@ -142,12 +142,12 @@ public class IndelDBRateWalker extends RodWalker if ( vcfWriter != null ) { int i = 0; while ( i < compContexts.size() && compContexts.get(i).getLocation().isBefore(evalContexts.get(0).getLocation())) { - vcfWriter.addRecord(VariantContextAdaptors.toVCF(compContexts.get(i),(char)compContexts.get(i).getReference().getBases()[0])); + vcfWriter.addRecord(VariantContextAdaptors.toVCF(compContexts.get(i),compContexts.get(i).getReference().getBases()[0])); i++; } vcfWriter.addRecord(VariantContextAdaptors.toVCF(evalContexts.get(0),ref.getBase())); while ( i < compContexts.size() && compContexts.get(i).getLocation().distance(evalContexts.get(0).getLocation()) <= indelWindow) { - vcfWriter.addRecord(VariantContextAdaptors.toVCF(compContexts.get(i),(char) compContexts.get(i).getReference().getBases()[0])); + vcfWriter.addRecord(VariantContextAdaptors.toVCF(compContexts.get(i),compContexts.get(i).getReference().getBases()[0])); i++; } } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchCounterWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchCounterWalker.java index dda24d1c5..d9b182629 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchCounterWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchCounterWalker.java @@ -4,24 +4,25 @@ import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.walkers.WalkerName; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.Utils; import java.util.List; @WalkerName("CountMismatches") public class MismatchCounterWalker extends ReadWalker { - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { int nMismatches = 0; int start = read.getAlignmentStart()-1; int stop = read.getAlignmentEnd(); // sometimes BWA outputs screwy reads - if ( stop - start > ref.length ) + if ( stop - start > ref.getBases().length ) return 0; if ( read.getAlignmentBlocks().size() == 1 ) { // No indels - List refSeq = Utils.subseq(ref); + List refSeq = Utils.subseq(ref.getBases()); List readBases = Utils.subseq(read.getReadBases()); assert(refSeq.size() == readBases.size()); diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchHistoWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchHistoWalker.java index 6505005f2..db5d41e50 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchHistoWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/MismatchHistoWalker.java @@ -4,6 +4,7 @@ import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.walkers.WalkerName; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.Utils; import java.util.List; @@ -17,12 +18,12 @@ public class MismatchHistoWalker extends ReadWalker { protected final int MAX_TARGET_EDIT_DISTANCE = 10; // Do we actually want to operate on the context? - public boolean filter(char[] ref, SAMRecord read) { + public boolean filter(ReferenceContext ref, SAMRecord read) { // we only want aligned reads return !read.getReadUnmappedFlag(); } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { int editDist = Integer.parseInt(read.getAttribute("NM").toString()); @@ -34,15 +35,15 @@ public class MismatchHistoWalker extends ReadWalker { int start = read.getAlignmentStart()-1; int stop = read.getAlignmentEnd(); // sometimes BWA outputs screwy reads - if ( stop - start > ref.length ) + if ( stop - start > ref.getBases().length ) return 0; - List refSeq = Utils.subseq(ref); + List refSeq = Utils.subseq(ref.getBases()); List readBases = Utils.subseq(read.getReadBases()); assert(refSeq.size() == readBases.size()); // it's actually faster to reallocate a resized array than to use ArrayLists... - if ( ref.length > mismatchCounts.length ) { + if ( ref.getBases().length > mismatchCounts.length ) { int oldLength = mismatchCounts.length; mismatchCounts = (long[])resizeArray(mismatchCounts, refSeq.size()); for ( int i = oldLength; i < refSeq.size(); i++ ) diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/PairedQualityScoreCountsWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/PairedQualityScoreCountsWalker.java index 660f6433d..fd2851ef4 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/PairedQualityScoreCountsWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/PairedQualityScoreCountsWalker.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.oneoffprojects.walkers; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.BaseUtils; @@ -61,7 +62,7 @@ public class PairedQualityScoreCountsWalker extends ReadWalker map( char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Pair map( ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { if ( canUseRead(read) ) { return getCorrectlyOrientedBaseQualities(read); } else { diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReadErrorRateWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReadErrorRateWalker.java index 002d2ce12..b57f85f69 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReadErrorRateWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReadErrorRateWalker.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.oneoffprojects.walkers; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.BaseUtils; @@ -56,8 +57,8 @@ public class ReadErrorRateWalker extends ReadWalker protected static BufferedReader inputReader = null; protected static String line = null; - public SAMRecord map( char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { + public SAMRecord map( ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker ) { return read; // all the work is done in the reduce step for this walker } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReplaceQuals.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReplaceQuals.java index 09bcc5603..63119025f 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReplaceQuals.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/ReplaceQuals.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.oneoffprojects.walkers; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.utils.collections.Pair; import net.sf.samtools.*; @@ -90,7 +91,7 @@ public class ReplaceQuals extends ReadWalker { /** * */ - public SAMRecord map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public SAMRecord map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { final String name = read.getReadName(); if ( readNameToPairs.containsKey(name) ) { diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/TestReadFishingWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/TestReadFishingWalker.java index 1c8aacd63..e5337f199 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/TestReadFishingWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/TestReadFishingWalker.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.oneoffprojects.walkers; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.alignment.bwa.BWAAligner; import org.broadinstitute.sting.alignment.bwa.BWAConfiguration; import org.broadinstitute.sting.alignment.bwa.c.BWACAligner; @@ -130,7 +131,7 @@ public class TestReadFishingWalker extends ReadWalker { } @Override - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { Alignment bestAlignment = aligner.getBestAlignment(read.getReadBases()); System.out.println("bestAlignment = " + bestAlignment); return 1; diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/VCFReferenceFixerWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/VCFReferenceFixerWalker.java index 1e2edef15..d69b4271c 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/VCFReferenceFixerWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/VCFReferenceFixerWalker.java @@ -46,7 +46,7 @@ public class VCFReferenceFixerWalker extends RodWalker { vcfrod = (VCFRecord) rod; } - if (vcfrod != null) vcfrod.setReferenceBase(new String(BaseUtils.charSeq2byteSeq(context.getBases()))); + if (vcfrod != null) vcfrod.setReferenceBase(new String(context.getBases())); return vcfrod; /* diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfNonrefBasesSupportingSNP.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfNonrefBasesSupportingSNP.java index 1f0d5e171..afe1bc8e2 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfNonrefBasesSupportingSNP.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfNonrefBasesSupportingSNP.java @@ -62,7 +62,7 @@ public class ProportionOfNonrefBasesSupportingSNP implements InfoFieldAnnotation Pair totalNonref_totalSNP = new Pair(0,0); for ( String sample : context.keySet() ) { ReadBackedPileup pileup = context.get(sample).getContext(StratifiedAlignmentContext.StratifiedContextType.COMPLETE).getBasePileup(); - totalNonref_totalSNP = getNonrefAndSNP(pileup, ref.getBase(), vc.getAlternateAllele(0).toString().charAt(0), totalNonref_totalSNP); + totalNonref_totalSNP = getNonrefAndSNP(pileup, ref.getBaseAsChar(), vc.getAlternateAllele(0).toString().charAt(0), totalNonref_totalSNP); } if ( totalNonref_totalSNP.equals(new Pair(0,0)) ) diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfRefSecondBasesSupportingSNP.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfRefSecondBasesSupportingSNP.java index 45e9dc0f4..23b645634 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfRefSecondBasesSupportingSNP.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfRefSecondBasesSupportingSNP.java @@ -59,7 +59,7 @@ public class ProportionOfRefSecondBasesSupportingSNP implements InfoFieldAnnotat Pair totalAndSNPSupporting = new Pair(0,0); for ( String sample : context.keySet() ) { ReadBackedPileup pileup = context.get(sample).getContext(StratifiedAlignmentContext.StratifiedContextType.COMPLETE).getBasePileup(); - totalAndSNPSupporting = getTotalRefAndSNPSupportCounts(pileup, ref.getBase(), vc.getAlternateAllele(0).toString().charAt(0), totalAndSNPSupporting); + totalAndSNPSupporting = getTotalRefAndSNPSupportCounts(pileup, ref.getBaseAsChar(), vc.getAlternateAllele(0).toString().charAt(0), totalAndSNPSupporting); } if ( totalAndSNPSupporting.equals(new Pair(0,0)) ) diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfSNPSecondBasesSupportingRef.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfSNPSecondBasesSupportingRef.java index 4c43bc09f..43daf4d9c 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfSNPSecondBasesSupportingRef.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/annotator/ProportionOfSNPSecondBasesSupportingRef.java @@ -62,7 +62,7 @@ public class ProportionOfSNPSecondBasesSupportingRef implements InfoFieldAnnotat Pair totalAndSNPSupporting = new Pair(0,0); for ( String sample : context.keySet() ) { ReadBackedPileup pileup = context.get(sample).getContext(StratifiedAlignmentContext.StratifiedContextType.COMPLETE).getBasePileup(); - totalAndSNPSupporting = getTotalSNPandRefSupporting(pileup, ref.getBase(), vc.getAlternateAllele(0).toString().charAt(0), totalAndSNPSupporting); + totalAndSNPSupporting = getTotalSNPandRefSupporting(pileup, ref.getBaseAsChar(), vc.getAlternateAllele(0).toString().charAt(0), totalAndSNPSupporting); } if ( totalAndSNPSupporting.equals(new Pair(0,0)) ) diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/multisample/LocusConcordanceInfo.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/multisample/LocusConcordanceInfo.java index 7a9d2cd25..10d0d3adb 100644 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/multisample/LocusConcordanceInfo.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/multisample/LocusConcordanceInfo.java @@ -54,7 +54,7 @@ class LocusConcordanceInfo { } public byte getReferenceBase() { - return (byte) reference.getBase(); + return reference.getBase(); } public boolean isTruthOnly () { @@ -63,7 +63,7 @@ class LocusConcordanceInfo { public boolean isVariantSite() { for ( VCFGenotypeRecord g : truthVCFRecord.getVCFGenotypeRecords() ) { - if ( g.isVariant(reference.getBase()) ) { + if ( g.isVariant(reference.getBaseAsChar()) ) { return true; } } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/BeagleTrioToVCFWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/BeagleTrioToVCFWalker.java index 5725c6533..007708deb 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/BeagleTrioToVCFWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/BeagleTrioToVCFWalker.java @@ -73,7 +73,7 @@ public class BeagleTrioToVCFWalker extends RodWalker { VariantContext vc = null; if ( ref != null ) { - vc = tracker.getVariantContext(TRACK_NAME, null, context.getLocation(), false); + vc = tracker.getVariantContext(ref, TRACK_NAME, null, context.getLocation(), false); BeagleROD beagle = tracker.lookup(BEAGLE_NAME,BeagleROD.class); if ( vc != null ) { diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/VCFToBeagleWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/VCFToBeagleWalker.java index e4435380f..acf5c7ec0 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/VCFToBeagleWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/vcftools/VCFToBeagleWalker.java @@ -67,7 +67,7 @@ public class VCFToBeagleWalker extends RodWalker allowedTypes = EnumSet.of(VariantContext.Type.SNP); - VariantContext vc = tracker.getVariantContext("variants", allowedTypes, context.getLocation(), false); + VariantContext vc = tracker.getVariantContext(ref, "variants", allowedTypes, context.getLocation(), false); if ( vc != null && vc.isBiallelic() && vc.isNotFiltered() ) { if ( trio != null ) { // we are emitting a trio file diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CalculateAlleleLikelihoodsWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CalculateAlleleLikelihoodsWalker.java index 2266f0835..34e4bf312 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CalculateAlleleLikelihoodsWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CalculateAlleleLikelihoodsWalker.java @@ -28,6 +28,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.HLAcaller; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import java.util.ArrayList; @@ -106,7 +107,7 @@ public class CalculateAlleleLikelihoodsWalker extends ReadWalker>{ } //Get likelihood score for homozygous ref: used to normalize likelihoood scores at 0. - String homref = String.valueOf(ref.getBase())+String.valueOf(ref.getBase()); + String homref = String.valueOf(ref.getBaseAsChar())+String.valueOf(ref.getBaseAsChar()); Double homreflikelihood = Double.parseDouble((String) Scores.get(homref).toString()); //Add SNP if it is a SNP and hasn't been added before diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ClusterReadsWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ClusterReadsWalker.java index 7dd514b3e..c8f393622 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ClusterReadsWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ClusterReadsWalker.java @@ -3,6 +3,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.HLAcaller; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import java.util.ArrayList; @@ -89,7 +90,7 @@ public class ClusterReadsWalker extends ReadWalker { return 0; } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker tracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker tracker) { //Calculate concordance for this read and all overlapping reads if (!ReadsToDiscard.contains(read.getReadName())){ AlignedReads.add(read); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreateHaplotypesWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreateHaplotypesWalker.java index 25e7bddb6..10fc948b2 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreateHaplotypesWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreateHaplotypesWalker.java @@ -3,6 +3,8 @@ package org.broadinstitute.sting.playground.gatk.walkers.HLAcaller; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; + import java.util.Hashtable; /** * Creates a haplotype file given reads (for SNP analysis, imputation, etc) @@ -37,7 +39,7 @@ public class CreateHaplotypesWalker extends ReadWalker { - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { int readstart = read.getAlignmentStart(); int readstop = read.getAlignmentEnd(); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreatePedFileWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreatePedFileWalker.java index e84de332d..bf2e56bf2 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreatePedFileWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/CreatePedFileWalker.java @@ -28,6 +28,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.HLAcaller; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import java.util.ArrayList; @@ -209,7 +210,7 @@ public class CreatePedFileWalker extends ReadWalker { } } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { HLAnamesAL.add(read.getReadName()); HLAreadsAL.add(formatter.FormatRead(read.getCigarString(), read.getReadString())); HLAstartposAL.add(read.getAlignmentStart()); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindClosestAlleleWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindClosestAlleleWalker.java index d5771e4ae..5ec85ae70 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindClosestAlleleWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindClosestAlleleWalker.java @@ -28,6 +28,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.HLAcaller; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import java.util.ArrayList; @@ -227,7 +228,7 @@ public class FindClosestAlleleWalker extends ReadWalker { return maxFreq; } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { //Calculate concordance for this read and all overlapping reads if (read.getMappingQuality() > 0){ double maxConcordance = CalculateConcordance(read); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindPolymorphicSitesWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindPolymorphicSitesWalker.java index 9f8a16cd8..123b6b923 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindPolymorphicSitesWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/FindPolymorphicSitesWalker.java @@ -3,6 +3,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.HLAcaller; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import java.util.ArrayList; @@ -139,7 +140,7 @@ public class FindPolymorphicSitesWalker extends ReadWalker { NonPolymorphicSites = nonpolymorphicsites.toArray(new Integer[nonpolymorphicsites.size()]); } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { //Calculate concordance for this read and all overlapping reads return 1; } diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ImputeAllelesWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ImputeAllelesWalker.java index 3af3bf0ac..9f2bbff87 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ImputeAllelesWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HLAcaller/ImputeAllelesWalker.java @@ -3,6 +3,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.HLAcaller; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import java.io.FileInputStream; import java.io.BufferedReader; @@ -161,7 +162,7 @@ public class ImputeAllelesWalker extends ReadWalker { } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { int readstart = read.getAlignmentStart(); int readstop = read.getAlignmentEnd(); int startimputation = 0, stopimputation = 0; diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/LocusMismatchWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/LocusMismatchWalker.java index 2c328a123..670b95e5a 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/LocusMismatchWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/LocusMismatchWalker.java @@ -125,7 +125,7 @@ public class LocusMismatchWalker extends LocusWalker implements //System.out.printf("Using %s%n", e.getRead().getReadName()); baseCounts[e.getBaseIndex()] += 1; usableDepth++; - if ( ! BaseUtils.basesAreEqual(e.getBase(), (byte)ref.getBase()) ) { + if ( ! BaseUtils.basesAreEqual(e.getBase(), ref.getBase()) ) { nMismatches++; qSumMismatches += e.getQual(); } @@ -138,7 +138,7 @@ public class LocusMismatchWalker extends LocusWalker implements baseCountString += baseCounts[BaseUtils.simpleBaseToBaseIndex(b)] + " "; } return String.format("%s %c %10s %5.2f %d %d %d %s", - pileup.getLocation(), ref.getBase(), + pileup.getLocation(), ref.getBaseAsChar(), getGenotypeClass(g), 10 * g.getNegLog10PError(), usableDepth, nMismatches, qSumMismatches, baseCountString); } diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/TrioGenotyperWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/TrioGenotyperWalker.java index b41f7412b..376c995f0 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/TrioGenotyperWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/TrioGenotyperWalker.java @@ -90,7 +90,7 @@ public class TrioGenotyperWalker extends RefWalker{ } public VariantContext map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { - VariantContext vc = tracker.getVariantContext("variants", EnumSet.of(VariantContext.Type.SNP), context.getLocation(), true); + VariantContext vc = tracker.getVariantContext(ref, "variants", EnumSet.of(VariantContext.Type.SNP), context.getLocation(), true); if ( vc != null && vc.isPolymorphic() ) { if ( ! vc.hasGenotypes(FAMILY_MEMBERS) ) @@ -179,7 +179,7 @@ public class TrioGenotyperWalker extends RefWalker{ if ( a == 0 ) writer.writeHeader(VariantContextAdaptors.createVCFHeader(null, vc)); - writer.addRecord(VariantContextAdaptors.toVCF(vc, '.')); + writer.addRecord(VariantContextAdaptors.toVCF(vc, (byte)'.')); a++; } diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/VCFConcordance.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/VCFConcordance.java index cdc79fee9..8c76b0e95 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/VCFConcordance.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/VCFConcordance.java @@ -31,8 +31,8 @@ public class VCFConcordance extends RodWalker { VariantContext eval = null; VariantContext truth = null; try { - eval = tracker.getVariantContext("eval", vc, loc, true); - truth = tracker.getVariantContext("truth", vc, loc, true); + eval = tracker.getVariantContext(ref, "eval", vc, loc, true); + truth = tracker.getVariantContext(ref, "truth", vc, loc, true); } catch (java.util.NoSuchElementException e) { return 0; } diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/GenomicAnnotator.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/GenomicAnnotator.java index d0dd3bdb1..5c51bb713 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/GenomicAnnotator.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/GenomicAnnotator.java @@ -205,11 +205,11 @@ public class GenomicAnnotator extends RodWalker { return 0; Object variant = rods.get(0); - if( ref.getBase() == 'N') { + if( BaseUtils.isNBase(ref.getBase()) ) { return 0; //TODO Currently, VariantContextAdaptors.toVCF(annotatedVC, ref.getBase()) fails when base is 'N'. is this right? } - VariantContext vc = VariantContextAdaptors.toVariantContext("variant", variant); + VariantContext vc = VariantContextAdaptors.toVariantContext("variant", variant, ref); if ( vc == null ) return 0; diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/TranscriptToInfo.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/TranscriptToInfo.java index de16d6207..25be52a7d 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/TranscriptToInfo.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/annotator/TranscriptToInfo.java @@ -261,7 +261,7 @@ public class TranscriptToInfo extends RodWalker, TreeMap if(parsedTranscriptRod.positiveStrand) { parsedTranscriptRod.txSequence.append(ref.getBase()); } else { - final char complementBase = BaseUtils.simpleComplement(ref.getBase()); + final char complementBase = BaseUtils.simpleComplement(ref.getBaseAsChar()); parsedTranscriptRod.txSequence.insert(0, complementBase); } @@ -275,16 +275,16 @@ public class TranscriptToInfo extends RodWalker, TreeMap { if(position < parsedTranscriptRod.cdsStart) { - parsedTranscriptRod.utr5Sequence.append(ref.getBase()); //within utr5 + parsedTranscriptRod.utr5Sequence.append(ref.getBaseAsChar()); //within utr5 } else if(position >= parsedTranscriptRod.cdsStart && position <= parsedTranscriptRod.cdsEnd) { - parsedTranscriptRod.cdsSequence.append(ref.getBase()); //within CDS + parsedTranscriptRod.cdsSequence.append(ref.getBaseAsChar()); //within CDS } } else { - final char complementBase = BaseUtils.simpleComplement(ref.getBase()); + final char complementBase = BaseUtils.simpleComplement(ref.getBaseAsChar()); if(position > parsedTranscriptRod.cdsEnd) { //As we move left to right (aka. 3' to 5'), we do insert(0,..) to reverse the sequence so that it become 5' to 3' in parsedTranscriptRod.utr5Sequence. diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/ComputeConfusionMatrix.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/ComputeConfusionMatrix.java index 5d9aa0a23..9f4238dd9 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/ComputeConfusionMatrix.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/ComputeConfusionMatrix.java @@ -81,7 +81,7 @@ public class ComputeConfusionMatrix extends LocusWalker { int windowCenter = (windowLength - 1)/2; String fwRefBases = new String(ref.getBases()); - String fwRefBase = String.format("%c", ref.getBase()); + String fwRefBase = String.format("%c", ref.getBaseAsChar()); String fwWindowLeft = fwRefBases.substring(windowCenter - WINDOW_SIZE, windowCenter); //String rcRefBases = new String(BaseUtils.simpleReverseComplement(ref.getBases())); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/MatePairLibrarySize.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/MatePairLibrarySize.java index 9ec02f039..1ae8409b8 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/MatePairLibrarySize.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/MatePairLibrarySize.java @@ -2,6 +2,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.diagnostics; import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.utils.StingException; import net.sf.samtools.SAMRecord; @@ -31,11 +32,11 @@ public class MatePairLibrarySize extends ReadWalker { } } - public boolean filter(char[] ref, SAMRecord read) { + public boolean filter(ReferenceContext ref, SAMRecord read) { return (read.getReadPairedFlag() && read.getFirstOfPairFlag()); } - public Integer map(char[] ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) { int insert = read.getInferredInsertSize(); Integer oldcount = matePairSize.get(read.getReadGroup().getLibrary()).get(insert); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/SNPDensity.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/SNPDensity.java index 43585a82d..b4cb27dbf 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/SNPDensity.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/diagnostics/SNPDensity.java @@ -67,7 +67,7 @@ public class SNPDensity extends RefWalker, SNPDe VCFRecord vcf = tracker.lookup("eval",VCFRecord.class); if (vcf != null) - vc = VariantContextAdaptors.toVariantContext("eval", vcf); + vc = VariantContextAdaptors.toVariantContext("eval", vcf, ref); return new Pair(vc, context.getLocation()); } diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/graphalign/GraphReferenceAssessor.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/graphalign/GraphReferenceAssessor.java index 01c4f95e1..433491712 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/graphalign/GraphReferenceAssessor.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/graphalign/GraphReferenceAssessor.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.playground.gatk.walkers.graphalign; import org.broadinstitute.sting.gatk.refdata.*; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.commandline.Argument; @@ -176,7 +177,7 @@ public class GraphReferenceAssessor extends ReadWalker { return minNMM; } - public Integer map(char[] refArg, SAMRecord read, ReadMetaDataTracker metaDataTracker) { + public Integer map(ReferenceContext refArg, SAMRecord read, ReadMetaDataTracker metaDataTracker) { if ( MAXREADS-- == 0 ) { System.exit(0); @@ -184,7 +185,7 @@ public class GraphReferenceAssessor extends ReadWalker { ; } else if ( ! read.getReadUnmappedFlag() && read.getCigar().numCigarElements() == 1 ) { try { - byte[] ref = BaseUtils.charSeq2byteSeq(refArg); + byte[] ref = refArg.getBases(); // we're all XM int nMMFromRead = (Short)read.getAttribute("NM"); MismatchCounter nAlignedMM = countMismatches(ref, read.getReadBases(), read.getBaseQualities()); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/papergenotyper/GATKPaperGenotyper.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/papergenotyper/GATKPaperGenotyper.java index 7839f644d..a3ea89033 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/papergenotyper/GATKPaperGenotyper.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/papergenotyper/GATKPaperGenotyper.java @@ -68,7 +68,7 @@ public class GATKPaperGenotyper extends LocusWalker impleme if (ref.getBase() == 'N' || ref.getBase() == 'n') return null; // we don't deal with the N ref base case ReadBackedPileup pileup = context.getPileup(); - double likelihoods[] = DiploidGenotypePriors.getReferencePolarizedPriors(ref.getBase(), + double likelihoods[] = DiploidGenotypePriors.getReferencePolarizedPriors(ref.getBaseAsChar(), DiploidGenotypePriors.HUMAN_HETEROZYGOSITY, 0.01); // get the bases and qualities from the pileup @@ -97,7 +97,7 @@ public class GATKPaperGenotyper extends LocusWalker impleme return new SimpleCall(context.getLocation(), GENOTYPE.values()[sortedList[9]].toString(), likelihoods[sortedList[9]] - likelihoods[sortedList[8]], - ref.getBase()); + ref.getBaseAsChar()); } /** diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/secondaryBases/SecondaryBaseTransitionTableWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/secondaryBases/SecondaryBaseTransitionTableWalker.java index 7ec6840a4..ca9cff78e 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/secondaryBases/SecondaryBaseTransitionTableWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/secondaryBases/SecondaryBaseTransitionTableWalker.java @@ -39,14 +39,14 @@ public class SecondaryBaseTransitionTableWalker extends LocusWalker boolean isKnown = !vc.getAttribute("ID").equals("."); if(usingDBSNP) { isKnown = false; - for( final VariantContext dbsnpVC : tracker.getVariantContexts(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME, null, context.getLocation(), false, false) ) { + for( final VariantContext dbsnpVC : tracker.getVariantContexts(ref, DbSNPHelper.STANDARD_DBSNP_TRACK_NAME, null, context.getLocation(), false, false) ) { if(dbsnpVC != null && dbsnpVC.isSNP()) { isKnown = true; } diff --git a/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFGenotypeWriterAdapter.java b/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFGenotypeWriterAdapter.java index 201e2f954..dbc81bba7 100644 --- a/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFGenotypeWriterAdapter.java +++ b/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFGenotypeWriterAdapter.java @@ -89,7 +89,7 @@ public class VCFGenotypeWriterAdapter implements VCFGenotypeWriter { if ( mHeader == null ) throw new IllegalStateException("The VCF Header must be written before records can be added"); - VCFRecord call = VariantContextAdaptors.toVCF(vc, refAllele.charAt(0), allowedGenotypeFormatStrings, false, false); + VCFRecord call = VariantContextAdaptors.toVCF(vc, (byte)refAllele.charAt(0), allowedGenotypeFormatStrings, false, false); Set altAlleles = vc.getAlternateAlleles(); StringBuffer altAlleleCountString = new StringBuffer(); diff --git a/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java index 5dc24c71a..6454cb340 100644 --- a/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java @@ -346,7 +346,7 @@ public class ReadBackedExtendedEventPileup implements Iterable> getEventStringsWithCounts(char[] refBases) { + public List> getEventStringsWithCounts(byte[] refBases) { Map events = new HashMap(); for ( ExtendedEventPileupElement e : this ) { @@ -385,7 +385,7 @@ public class ReadBackedExtendedEventPileup implements Iterable extends TraversalEngine