From f5818c0cda2e218eaf1c1bd815dc719e00194014 Mon Sep 17 00:00:00 2001 From: hanna Date: Fri, 13 Nov 2009 22:18:56 +0000 Subject: [PATCH] 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 --- c/bwa/bwa_gateway.cpp | 14 ++++++++++++-- c/bwa/bwa_gateway.h | 2 +- ...stitute_sting_alignment_bwa_BWACAligner.cpp | 18 ++++++++++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/c/bwa/bwa_gateway.cpp b/c/bwa/bwa_gateway.cpp index ec2ae2da0..45e28b6d7 100644 --- a/c/bwa/bwa_gateway.cpp +++ b/c/bwa/bwa_gateway.cpp @@ -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; } diff --git a/c/bwa/bwa_gateway.h b/c/bwa/bwa_gateway.h index 7a933ad82..f559cd9e2 100644 --- a/c/bwa/bwa_gateway.h +++ b/c/bwa/bwa_gateway.h @@ -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); diff --git a/c/bwa/org_broadinstitute_sting_alignment_bwa_BWACAligner.cpp b/c/bwa/org_broadinstitute_sting_alignment_bwa_BWACAligner.cpp index b24919950..ddb614062 100644 --- a/c/bwa/org_broadinstitute_sting_alignment_bwa_BWACAligner.cpp +++ b/c/bwa/org_broadinstitute_sting_alignment_bwa_BWACAligner.cpp @@ -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); + } +}