Fix max edit distance to ensure interface similarity between our aligner and

'bwa aln'.


git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2043 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-11-13 22:18:56 +00:00
parent 52494d8176
commit f5818c0cda
3 changed files with 29 additions and 5 deletions

View File

@ -76,10 +76,20 @@ void BWA::load_default_options()
options.trim_qual = 0;
}
void BWA::set_max_edit_distance(int edit_distance) { options.max_diff = edit_distance; }
void BWA::set_max_edit_distance(float edit_distance) {
if(edit_distance < 1) {
options.fnr = edit_distance;
options.max_diff = -1;
}
else {
options.fnr = -1.0;
options.max_diff = (int)edit_distance;
}
}
void BWA::set_max_gap_opens(int max_gap_opens) { options.max_gapo = max_gap_opens; }
void BWA::set_max_gap_extensions(int max_gap_extensions) { options.max_gape = max_gap_extensions; }
void BWA::set_disallow_indel_within_range(int indel_range) { options.indel_end_skip = indel_range; printf("set indel end skip to %d\n", options.indel_end_skip);}
void BWA::set_disallow_indel_within_range(int indel_range) { options.indel_end_skip = indel_range; }
void BWA::set_mismatch_penalty(int penalty) { options.s_mm = penalty; }
void BWA::set_gap_open_penalty(int penalty) { options.s_gapo = penalty; }
void BWA::set_gap_extension_penalty(int penalty) { options.s_gape = penalty; }

View File

@ -32,7 +32,7 @@ class BWA {
~BWA();
// Parameterize the aligner.
void set_max_edit_distance(int edit_distance);
void set_max_edit_distance(float edit_distance);
void set_max_gap_opens(int max_gap_opens);
void set_max_gap_extensions(int max_gap_extensions);
void set_disallow_indel_within_range(int indel_range);

View File

@ -13,9 +13,12 @@ static jclass java_alignment_class = NULL;
static jmethodID java_alignment_constructor = NULL;
typedef void (BWA::*int_setter)(int value);
typedef void (BWA::*float_setter)(float value);
static jstring get_configuration_string(JNIEnv* env, jobject configuration, const char* field_name);
static void set_int_configuration_param(JNIEnv* env, jobject configuration, const char* field_name, BWA* bwa, int_setter setter);
static void set_float_configuration_param(JNIEnv* env, jobject configuration, const char* field_name, BWA* bwa, float_setter setter);
JNIEXPORT jlong JNICALL Java_org_broadinstitute_sting_alignment_bwa_BWACAligner_create(JNIEnv* env, jobject instance, jobject configuration)
{
@ -43,14 +46,13 @@ JNIEXPORT jlong JNICALL Java_org_broadinstitute_sting_alignment_bwa_BWACAligner_
reverse_bwt_filename,
reverse_sa_filename);
//set_int_configuration_param(env, configuration, "maximumEditDistance", bwa, &BWA::set_max_edit_distance);
set_float_configuration_param(env, configuration, "maximumEditDistance", bwa, &BWA::set_max_edit_distance);
set_int_configuration_param(env, configuration, "maximumGapOpens", bwa, &BWA::set_max_gap_opens);
set_int_configuration_param(env, configuration, "maximumGapExtensions", bwa, &BWA::set_max_gap_extensions);
set_int_configuration_param(env, configuration, "disallowIndelWithinRange", bwa, &BWA::set_disallow_indel_within_range);
set_int_configuration_param(env, configuration, "mismatchPenalty", bwa, &BWA::set_mismatch_penalty);
set_int_configuration_param(env, configuration, "gapOpenPenalty", bwa, &BWA::set_gap_open_penalty);
set_int_configuration_param(env, configuration, "gapExtensionPenalty", bwa, &BWA::set_gap_extension_penalty);
env->ReleaseStringUTFChars(java_ann,ann_filename);
env->ReleaseStringUTFChars(java_amb,amb_filename);
@ -152,3 +154,15 @@ static void set_int_configuration_param(JNIEnv* env, jobject configuration, cons
(bwa->*setter)(value);
}
}
static void set_float_configuration_param(JNIEnv* env, jobject configuration, const char* field_name, BWA* bwa, float_setter setter) {
jclass configuration_class = env->GetObjectClass(configuration);
jfieldID configuration_field = env->GetFieldID(configuration_class, field_name, "Ljava/lang/Float;");
jobject boxed_value = env->GetObjectField(configuration,configuration_field);
if(boxed_value != NULL) {
jclass float_box_class = env->FindClass("java/lang/Float");
jmethodID float_extractor = env->GetMethodID(float_box_class,"floatValue", "()F");
jfloat value = env->CallFloatMethod(boxed_value,float_extractor);
(bwa->*setter)(value);
}
}