Time for a reorganization. Repackage generally useful alignment classes lower in the package structure, and create a subpackage for bwa-specific code. Repackage BWA alignment code away from BWT representation. Isolate byte- and word-packing streams in another package that will ultimately be killed off en masse.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1648 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-09-17 23:28:47 +00:00
parent b4df089b59
commit c186a49d55
21 changed files with 89 additions and 64 deletions

View File

@ -1,10 +1,16 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment;
import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMRecord;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
import org.broadinstitute.sting.alignment.bwa.*;
import org.broadinstitute.sting.alignment.bwa.bwt.BWT;
import org.broadinstitute.sting.alignment.bwa.bwt.SuffixArray;
import org.broadinstitute.sting.alignment.bwa.bwt.BWTReader;
import org.broadinstitute.sting.alignment.bwa.bwt.SuffixArrayReader;
/** /**
* Create perfect alignments from the read to the genome represented by the given BWT / suffix array. * Create perfect alignments from the read to the genome represented by the given BWT / suffix array.
* *

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment;
/** /**
* Represents an alignment of a read to a site in the reference genome. * Represents an alignment of a read to a site in the reference genome.

View File

@ -1,4 +1,6 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa;
import org.broadinstitute.sting.alignment.Alignment;
/** /**
* An alignment object to be used incrementally as the BWA aligner * An alignment object to be used incrementally as the BWA aligner

View File

@ -1,10 +1,13 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa;
import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMRecord;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import org.broadinstitute.sting.alignment.bwa.bwt.Base;
import org.broadinstitute.sting.alignment.bwa.bwt.BWT;
/** /**
* At any point along the given read, what is a good lower bound for the * At any point along the given read, what is a good lower bound for the
* total number of differences? * total number of differences?

View File

@ -1,7 +1,9 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa;
import org.broadinstitute.sting.utils.fasta.IndexedFastaSequenceFile; import org.broadinstitute.sting.utils.fasta.IndexedFastaSequenceFile;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.alignment.bwa.bwt.SuffixArrayReader;
import org.broadinstitute.sting.alignment.bwa.bwt.*;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;

View File

@ -1,4 +1,6 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import org.broadinstitute.sting.alignment.bwa.packing.PackUtils;
/** /**
* Represents the Burrows-Wheeler Transform of a reference sequence. * Represents the Burrows-Wheeler Transform of a reference sequence.
@ -128,43 +130,3 @@ public class BWT {
return sequenceBlocks; return sequenceBlocks;
} }
} }
/**
* Models a block of bases within the BWT.
*/
class SequenceBlock {
/**
* Start position of this sequence within the BWT.
*/
public final int sequenceStart;
/**
* Length of this sequence within the BWT.
*/
public final int sequenceLength;
/**
* Occurrences of each letter up to this sequence block.
*/
public final Counts occurrences;
/**
* Sequence for this segment.
*/
public final byte[] sequence;
/**
* Create a new block within this BWT.
* @param sequenceStart Starting position of this sequence within the BWT.
* @param sequenceLength Length of this sequence.
* @param occurrences How many of each base has been seen before this sequence began.
* @param sequence The actual sequence from the BWT.
*/
SequenceBlock( int sequenceStart, int sequenceLength, Counts occurrences, byte[] sequence ) {
this.sequenceStart = sequenceStart;
this.sequenceLength = sequenceLength;
this.occurrences = occurrences;
this.sequence = sequence;
}
}

View File

@ -1,6 +1,9 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.alignment.bwa.packing.IntPackedInputStream;
import org.broadinstitute.sting.alignment.bwa.packing.BasePackedInputStream;
import org.broadinstitute.sting.alignment.bwa.packing.PackUtils;
import java.io.*; import java.io.*;
import java.nio.ByteOrder; import java.nio.ByteOrder;
@ -50,7 +53,7 @@ public class BWTReader {
sequenceBlocks = new SequenceBlock[PackUtils.numberOfPartitions(bwtSize,BWT.SEQUENCE_BLOCK_SIZE)]; sequenceBlocks = new SequenceBlock[PackUtils.numberOfPartitions(bwtSize,BWT.SEQUENCE_BLOCK_SIZE)];
for( int block = 0; block < sequenceBlocks.length; block++ ) { for( int block = 0; block < sequenceBlocks.length; block++ ) {
int sequenceStart = block*BWT.SEQUENCE_BLOCK_SIZE; int sequenceStart = block* BWT.SEQUENCE_BLOCK_SIZE;
int sequenceLength = Math.min(BWT.SEQUENCE_BLOCK_SIZE,bwtSize-sequenceStart); int sequenceLength = Math.min(BWT.SEQUENCE_BLOCK_SIZE,bwtSize-sequenceStart);
int[] occurrences = new int[PackUtils.ALPHABET_SIZE]; int[] occurrences = new int[PackUtils.ALPHABET_SIZE];

View File

@ -1,6 +1,8 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.alignment.bwa.packing.IntPackedOutputStream;
import org.broadinstitute.sting.alignment.bwa.packing.BasePackedOutputStream;
import java.io.*; import java.io.*;
import java.nio.ByteOrder; import java.nio.ByteOrder;

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Map; import java.util.Map;

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
@ -25,7 +25,7 @@ public class Counts implements Cloneable {
* @param data Count data, broken down by base. * @param data Count data, broken down by base.
* @param cumulative Whether the counts are cumulative, (count_G=numA+numC+numG,for example). * @param cumulative Whether the counts are cumulative, (count_G=numA+numC+numG,for example).
*/ */
Counts( int[] data, boolean cumulative ) { public Counts( int[] data, boolean cumulative ) {
for( Base base: EnumSet.allOf(Base.class)) for( Base base: EnumSet.allOf(Base.class))
counts[base.toPack()] = data[base.toPack()]; counts[base.toPack()] = data[base.toPack()];

View File

@ -23,7 +23,7 @@
* OTHER DEALINGS IN THE SOFTWARE. * OTHER DEALINGS IN THE SOFTWARE.
*/ */
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import net.sf.picard.reference.ReferenceSequenceFile; import net.sf.picard.reference.ReferenceSequenceFile;
import net.sf.picard.reference.ReferenceSequenceFileFactory; import net.sf.picard.reference.ReferenceSequenceFileFactory;
@ -35,6 +35,7 @@ import java.util.TreeSet;
import java.util.Comparator; import java.util.Comparator;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.alignment.bwa.packing.PackUtils;
/** /**
* Create a suffix array data structure. * Create a suffix array data structure.

View File

@ -0,0 +1,41 @@
package org.broadinstitute.sting.alignment.bwa.bwt;
/**
* Models a block of bases within the BWT.
*/
public class SequenceBlock {
/**
* Start position of this sequence within the BWT.
*/
public final int sequenceStart;
/**
* Length of this sequence within the BWT.
*/
public final int sequenceLength;
/**
* Occurrences of each letter up to this sequence block.
*/
public final Counts occurrences;
/**
* Sequence for this segment.
*/
public final byte[] sequence;
/**
* Create a new block within this BWT.
* @param sequenceStart Starting position of this sequence within the BWT.
* @param sequenceLength Length of this sequence.
* @param occurrences How many of each base has been seen before this sequence began.
* @param sequence The actual sequence from the BWT.
*/
public SequenceBlock( int sequenceStart, int sequenceLength, Counts occurrences, byte[] sequence ) {
this.sequenceStart = sequenceStart;
this.sequenceLength = sequenceLength;
this.occurrences = occurrences;
this.sequence = sequence;
}
}

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
/** /**
* An in-memory representation of a suffix array. * An in-memory representation of a suffix array.

View File

@ -1,6 +1,8 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.alignment.bwa.packing.IntPackedInputStream;
import org.broadinstitute.sting.alignment.bwa.packing.PackUtils;
import java.io.*; import java.io.*;
import java.nio.ByteOrder; import java.nio.ByteOrder;

View File

@ -1,6 +1,7 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.bwt;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.alignment.bwa.packing.IntPackedOutputStream;
import java.io.*; import java.io.*;
import java.nio.ByteOrder; import java.nio.ByteOrder;

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.packing;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;
@ -38,7 +38,7 @@ public class BasePackedInputStream<T> {
this.targetInputStream = inputStream; this.targetInputStream = inputStream;
this.type = type; this.type = type;
this.buffer = ByteBuffer.allocate(PackUtils.bitsInType(type)/PackUtils.BITS_PER_BYTE).order(byteOrder); this.buffer = ByteBuffer.allocate(PackUtils.bitsInType(type)/ PackUtils.BITS_PER_BYTE).order(byteOrder);
} }
/** /**

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.packing;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;

View File

@ -23,7 +23,7 @@
* OTHER DEALINGS IN THE SOFTWARE. * OTHER DEALINGS IN THE SOFTWARE.
*/ */
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.packing;
import net.sf.picard.reference.ReferenceSequenceFile; import net.sf.picard.reference.ReferenceSequenceFile;
import net.sf.picard.reference.ReferenceSequenceFileFactory; import net.sf.picard.reference.ReferenceSequenceFileFactory;

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.packing;
import java.io.*; import java.io.*;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -38,7 +38,7 @@ public class IntPackedInputStream {
*/ */
public IntPackedInputStream(InputStream inputStream, ByteOrder byteOrder) { public IntPackedInputStream(InputStream inputStream, ByteOrder byteOrder) {
this.targetInputStream = inputStream; this.targetInputStream = inputStream;
this.buffer = ByteBuffer.allocate(PackUtils.bitsInType(Integer.class)/PackUtils.BITS_PER_BYTE).order(byteOrder); this.buffer = ByteBuffer.allocate(PackUtils.bitsInType(Integer.class)/ PackUtils.BITS_PER_BYTE).order(byteOrder);
} }
/** /**

View File

@ -23,7 +23,7 @@
* OTHER DEALINGS IN THE SOFTWARE. * OTHER DEALINGS IN THE SOFTWARE.
*/ */
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.packing;
import java.io.*; import java.io.*;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.bwa; package org.broadinstitute.sting.alignment.bwa.packing;
import org.broadinstitute.sting.utils.StingException; import org.broadinstitute.sting.utils.StingException;