Contracted ReferenceContext. Removed depreciated accessors that aren't used in the GATK at all
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5834 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
d77f4ebe31
commit
9cc049f80f
|
|
@ -26,10 +26,10 @@
|
||||||
package org.broadinstitute.sting.gatk.contexts;
|
package org.broadinstitute.sting.gatk.contexts;
|
||||||
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLocParser;
|
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||||||
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
import org.broadinstitute.sting.utils.BaseUtils;
|
import org.broadinstitute.sting.utils.BaseUtils;
|
||||||
import net.sf.samtools.util.StringUtil;
|
import net.sf.samtools.util.StringUtil;
|
||||||
|
import com.google.java.contract.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The section of the reference that overlaps with the given
|
* The section of the reference that overlaps with the given
|
||||||
|
|
@ -45,17 +45,17 @@ public class ReferenceContext {
|
||||||
/**
|
/**
|
||||||
* Facilitates creation of new GenomeLocs.
|
* Facilitates creation of new GenomeLocs.
|
||||||
*/
|
*/
|
||||||
private GenomeLocParser genomeLocParser;
|
final private GenomeLocParser genomeLocParser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The locus.
|
* The locus.
|
||||||
*/
|
*/
|
||||||
private GenomeLoc locus;
|
final private GenomeLoc locus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The window of reference information around the current locus.
|
* The window of reference information around the current locus.
|
||||||
*/
|
*/
|
||||||
private GenomeLoc window;
|
final private GenomeLoc window;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The bases in the window around the current locus. If null, then bases haven't been fetched yet
|
* The bases in the window around the current locus. If null, then bases haven't been fetched yet
|
||||||
|
|
@ -65,12 +65,7 @@ public class ReferenceContext {
|
||||||
/**
|
/**
|
||||||
* Lazy loader to fetch reference bases
|
* Lazy loader to fetch reference bases
|
||||||
*/
|
*/
|
||||||
private ReferenceContextRefProvider basesProvider;
|
final private ReferenceContextRefProvider basesProvider;
|
||||||
|
|
||||||
/**
|
|
||||||
* A cache of the bases converted to characters for walkers not yet using byte[] interface
|
|
||||||
*/
|
|
||||||
private char[] basesAsCharCached = null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface to create byte[] contexts for lazy loading of the reference
|
* Interface to create byte[] contexts for lazy loading of the reference
|
||||||
|
|
@ -85,6 +80,7 @@ public class ReferenceContext {
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@Ensures("result != null")
|
||||||
public byte[] getBases();
|
public byte[] getBases();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -107,23 +103,45 @@ public class ReferenceContext {
|
||||||
* @param locus locus of interest.
|
* @param locus locus of interest.
|
||||||
* @param base reference base at that locus.
|
* @param base reference base at that locus.
|
||||||
*/
|
*/
|
||||||
|
@Requires({
|
||||||
|
"genomeLocParser != null",
|
||||||
|
"locus != null",
|
||||||
|
"locus.size() > 0"})
|
||||||
public ReferenceContext( GenomeLocParser genomeLocParser, GenomeLoc locus, byte base ) {
|
public ReferenceContext( GenomeLocParser genomeLocParser, GenomeLoc locus, byte base ) {
|
||||||
this( genomeLocParser, locus, locus, new ForwardingProvider(base) );
|
this( genomeLocParser, locus, locus, new ForwardingProvider(base) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Requires({
|
||||||
|
"genomeLocParser != null",
|
||||||
|
"locus != null",
|
||||||
|
"locus.size() > 0",
|
||||||
|
"window != null",
|
||||||
|
"window.size() > 0",
|
||||||
|
"bases != null && bases.length > 0"})
|
||||||
public ReferenceContext( GenomeLocParser genomeLocParser, GenomeLoc locus, GenomeLoc window, byte[] bases ) {
|
public ReferenceContext( GenomeLocParser genomeLocParser, GenomeLoc locus, GenomeLoc window, byte[] bases ) {
|
||||||
this( genomeLocParser, locus, window, new ForwardingProvider(bases) );
|
this( genomeLocParser, locus, window, new ForwardingProvider(bases) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Requires({
|
||||||
|
"genomeLocParser != null",
|
||||||
|
"locus != null",
|
||||||
|
"locus.size() > 0",
|
||||||
|
"window != null",
|
||||||
|
"window.size() > 0",
|
||||||
|
"basesProvider != null"})
|
||||||
public ReferenceContext( GenomeLocParser genomeLocParser, GenomeLoc locus, GenomeLoc window, ReferenceContextRefProvider basesProvider ) {
|
public ReferenceContext( GenomeLocParser genomeLocParser, GenomeLoc locus, GenomeLoc window, ReferenceContextRefProvider basesProvider ) {
|
||||||
// if( !window.containsP(locus) )
|
|
||||||
// throw new StingException("Invalid locus or window; window does not contain locus");
|
|
||||||
this.genomeLocParser = genomeLocParser;
|
this.genomeLocParser = genomeLocParser;
|
||||||
this.locus = locus;
|
this.locus = locus;
|
||||||
this.window = window;
|
this.window = window;
|
||||||
this.basesProvider = basesProvider;
|
this.basesProvider = basesProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility function to load bases from the provider to the cache, if necessary
|
||||||
|
*/
|
||||||
|
@Ensures({
|
||||||
|
"basesCache != null",
|
||||||
|
"old(basesCache) == null || old(basesCache) == basesCache"})
|
||||||
private void fetchBasesFromProvider() {
|
private void fetchBasesFromProvider() {
|
||||||
if ( basesCache == null ) {
|
if ( basesCache == null ) {
|
||||||
basesCache = basesProvider.getBases();
|
basesCache = basesProvider.getBases();
|
||||||
|
|
@ -131,6 +149,10 @@ public class ReferenceContext {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The genome loc parser associated with this reference context
|
||||||
|
*/
|
||||||
|
@Ensures("result != null")
|
||||||
public GenomeLocParser getGenomeLocParser() {
|
public GenomeLocParser getGenomeLocParser() {
|
||||||
return genomeLocParser;
|
return genomeLocParser;
|
||||||
}
|
}
|
||||||
|
|
@ -139,10 +161,12 @@ public class ReferenceContext {
|
||||||
* The locus currently being examined.
|
* The locus currently being examined.
|
||||||
* @return The current locus.
|
* @return The current locus.
|
||||||
*/
|
*/
|
||||||
|
@Ensures("result != null")
|
||||||
public GenomeLoc getLocus() {
|
public GenomeLoc getLocus() {
|
||||||
return locus;
|
return locus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Ensures("result != null")
|
||||||
public GenomeLoc getWindow() {
|
public GenomeLoc getWindow() {
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
@ -155,6 +179,17 @@ public class ReferenceContext {
|
||||||
return getBases()[(int)(locus.getStart() - window.getStart())];
|
return getBases()[(int)(locus.getStart() - window.getStart())];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All the bases in the window currently being examined.
|
||||||
|
* @return All bases available. If the window is of size [0,0], the array will
|
||||||
|
* contain only the base at the given locus.
|
||||||
|
*/
|
||||||
|
@Ensures({"result != null", "result.length > 0"})
|
||||||
|
public byte[] getBases() {
|
||||||
|
fetchBasesFromProvider();
|
||||||
|
return basesCache;
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public char getBaseAsChar() {
|
public char getBaseAsChar() {
|
||||||
return (char)getBase();
|
return (char)getBase();
|
||||||
|
|
@ -164,47 +199,8 @@ public class ReferenceContext {
|
||||||
* Get the base at the given locus.
|
* Get the base at the given locus.
|
||||||
* @return The base at the given locus from the reference.
|
* @return The base at the given locus from the reference.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated()
|
||||||
public int getBaseIndex() {
|
public int getBaseIndex() {
|
||||||
return BaseUtils.simpleBaseToBaseIndex(getBase());
|
return BaseUtils.simpleBaseToBaseIndex(getBase());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* All the bases in the window currently being examined.
|
|
||||||
* @return All bases available. If the window is of size [0,0], the array will
|
|
||||||
* contain only the base at the given locus.
|
|
||||||
*/
|
|
||||||
public byte[] getBases() {
|
|
||||||
fetchBasesFromProvider();
|
|
||||||
return basesCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public char[] getBasesAsChars() {
|
|
||||||
if ( basesAsCharCached == null )
|
|
||||||
basesAsCharCached = new String(getBases()).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
|
|
||||||
* from this context's locus through the end of the window will be returned.
|
|
||||||
* @param n number of requested bases including and starting from the current locus
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public byte[] getBasesAtLocus(int n) {
|
|
||||||
byte[] bases = getBases();
|
|
||||||
int start = (int)(locus.getStart()-window.getStart());
|
|
||||||
int stop = ( n==(-1) ? bases.length : start+n );
|
|
||||||
|
|
||||||
byte[] b = new byte[stop-start];
|
|
||||||
|
|
||||||
if ( stop > bases.length )
|
|
||||||
throw new ReviewedStingException("Bases beyond the current window requested: window="+window+", requested="+n);
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
for ( int j = start ; j < stop ; j++) b[i++]=bases[j];
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue