The BWA/C bindings were triggering the local aligner to repeatedly reload the

ref genome.  Make sure the reference genome is cached.


git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1961 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-11-03 00:01:55 +00:00
parent 3a33401822
commit c63af32fc7
3 changed files with 19 additions and 9 deletions

View File

@ -12,7 +12,13 @@ BWA::BWA(const char* ann_filename,
const char* reverse_bwt_filename, const char* reverse_bwt_filename,
const char* reverse_sa_filename) const char* reverse_sa_filename)
{ {
// Load the bns (?) and reference
bns = bns_restore_core(ann_filename,amb_filename,pac_filename); bns = bns_restore_core(ann_filename,amb_filename,pac_filename);
reference = new ubyte_t[bns->l_pac/4+1];
rewind(bns->fp_pac);
fread(reference, 1, bns->l_pac/4+1, bns->fp_pac);
// Load the BWTs (both directions) and suffix arrays (both directions)
bwts[0] = bwt_restore_bwt(forward_bwt_filename); bwts[0] = bwt_restore_bwt(forward_bwt_filename);
bwt_restore_sa(forward_sa_filename, bwts[0]); bwt_restore_sa(forward_sa_filename, bwts[0]);
bwts[1] = bwt_restore_bwt(reverse_bwt_filename); bwts[1] = bwt_restore_bwt(reverse_bwt_filename);
@ -21,6 +27,8 @@ BWA::BWA(const char* ann_filename,
} }
BWA::~BWA() { BWA::~BWA() {
delete[] reference;
bns_destroy(bns);
bwt_destroy(bwts[0]); bwt_destroy(bwts[0]);
bwt_destroy(bwts[1]); bwt_destroy(bwts[1]);
} }
@ -105,8 +113,6 @@ void BWA::copy_bases_into_sequence(bwa_seq_t* sequence, const char* bases, const
} }
void BWA::create_alignments(bwa_seq_t* sequence, Alignment*& alignments, unsigned& num_alignments) { void BWA::create_alignments(bwa_seq_t* sequence, Alignment*& alignments, unsigned& num_alignments) {
bool debug = false;
num_alignments = 0; num_alignments = 0;
for(unsigned i = 0; i < (unsigned)sequence->n_aln; i++) for(unsigned i = 0; i < (unsigned)sequence->n_aln; i++)
num_alignments += (sequence->aln + i)->l - (sequence->aln + i)->k + 1; num_alignments += (sequence->aln + i)->l - (sequence->aln + i)->k + 1;
@ -138,14 +144,9 @@ void BWA::create_alignments(bwa_seq_t* sequence, Alignment*& alignments, unsigne
if(alignment_idx > 0) if(alignment_idx > 0)
seq_reverse(sequence->len, sequence->seq, 0); seq_reverse(sequence->len, sequence->seq, 0);
// Calculate the local alignment. // Calculate the local coordinate and local alignment.
bwa_cal_pac_pos_core(bwts[0],bwts[1],sequence,options.max_diff,options.fnr); bwa_cal_pac_pos_core(bwts[0],bwts[1],sequence,options.max_diff,options.fnr);
if(debug) { bwa_refine_gapped(bns, 1, sequence, reference, NULL);
printf("alignment_idx = %d, k = %d, l = %d, sa_idx = %d\n", alignment_idx, alignment_block->k, alignment_block->l, sa_idx);
printf("sequence->pos = %d\n",sequence->pos);
}
bwa_refine_gapped(bns, 1, sequence, 0, NULL);
// Copy the local alignment data into the alignment object. // Copy the local alignment data into the alignment object.
Alignment& alignment = *(alignments + alignment_idx); Alignment& alignment = *(alignments + alignment_idx);

View File

@ -12,6 +12,7 @@ class Alignment;
class BWA { class BWA {
private: private:
bntseq_t *bns; bntseq_t *bns;
ubyte_t* reference;
bwt_t* bwts[2]; bwt_t* bwts[2];
gap_opt_t options; gap_opt_t options;

View File

@ -30,6 +30,11 @@ public class AlignmentValidationWalker extends ReadWalker<Integer,Integer> {
*/ */
private int count = 0; private int count = 0;
/**
* Max delta in mapping quality.
*/
private int maxMapQDelta = 0;
/** /**
* Create an aligner object. The aligner object will load and hold the BWT until close() is called. * Create an aligner object. The aligner object will load and hold the BWT until close() is called.
*/ */
@ -77,6 +82,8 @@ public class AlignmentValidationWalker extends ReadWalker<Integer,Integer> {
matches &= (alignment.getAlignmentStart() == read.getAlignmentStart()); matches &= (alignment.getAlignmentStart() == read.getAlignmentStart());
matches &= (alignment.isNegativeStrand() == read.getReadNegativeStrandFlag()); matches &= (alignment.isNegativeStrand() == read.getReadNegativeStrandFlag());
matches &= (alignment.getCigar().equals(read.getCigar())); matches &= (alignment.getCigar().equals(read.getCigar()));
int mapQDelta = Math.abs(alignment.getMappingQuality()-read.getMappingQuality());
maxMapQDelta = Math.max(mapQDelta,maxMapQDelta);
//matches &= (alignment.getMappingQuality() == read.getMappingQuality()); //matches &= (alignment.getMappingQuality() == read.getMappingQuality());
if(matches) break; if(matches) break;
} }
@ -133,6 +140,7 @@ public class AlignmentValidationWalker extends ReadWalker<Integer,Integer> {
@Override @Override
public void onTraversalDone(Integer result) { public void onTraversalDone(Integer result) {
aligner.close(); aligner.close();
out.printf("Max mapping quality delta: %s%n", maxMapQDelta);
super.onTraversalDone(result); super.onTraversalDone(result);
} }