gatk-3.8/PairHMM_JNI/org_broadinstitute_sting_ut...

152 lines
6.5 KiB
C++

#include "headers.h"
#include "jni_common.h"
#include "org_broadinstitute_sting_utils_pairhmm_DebugJNILoglessPairHMM.h"
#include "template.h"
#include "utils.h"
#include "LoadTimeInitializer.h"
#include "jnidebug.h"
DataHolder<double> g_double_dataholder;
using namespace std;
JNIEXPORT void JNICALL Java_org_broadinstitute_sting_utils_pairhmm_DebugJNILoglessPairHMM_jniInitialize
(JNIEnv* env, jobject thisObject,
jint readMaxLength, jint haplotypeMaxLength)
{
static int g_num_init_calls = 0;
#ifdef DEBUG3
cout << "Entered alloc initialized .. readMaxLength "<<readMaxLength<<" haplotypeMaxLength "<<haplotypeMaxLength<<"\n";
#endif
g_double_dataholder.initialize(readMaxLength, haplotypeMaxLength);
#ifdef DEBUG3
debug_dump("lengths_jni.txt", to_string(readMaxLength)+" "+to_string(haplotypeMaxLength),true);
#endif
++g_num_init_calls;
}
JNIEXPORT void JNICALL Java_org_broadinstitute_sting_utils_pairhmm_DebugJNILoglessPairHMM_jniInitializeProbabilities
(JNIEnv* env, jclass thisObject,
jobjectArray transition, jbyteArray insertionGOP, jbyteArray deletionGOP, jbyteArray overallGCP
)
{
jboolean is_copy = JNI_FALSE;
jsize length = (env)->GetArrayLength(insertionGOP);
#ifdef DEBUG3
cout << "Entered initializeProbabilities .. length "<<length<<"\n";
#endif
jbyte* insertionGOPArray = (env)->GetByteArrayElements(insertionGOP, &is_copy);
jbyte* deletionGOPArray = (env)->GetByteArrayElements(deletionGOP, &is_copy);
jbyte* overallGCPArray = (env)->GetByteArrayElements(overallGCP, &is_copy);
#ifdef DEBUG
if(insertionGOPArray == 0)
cerr << "insertionGOP array not initialized in JNI\n";
////assert(insertionGOPArray && "insertionGOP array not initialized in JNI");
if(deletionGOPArray == 0)
cerr << "deletionGOP array not initialized in JNI\n";
////assert(deletionGOPArray && "deletionGOP array not initialized in JNI");
assert(overallGCPArray && "OverallGCP array not initialized in JNI");
#endif
g_double_dataholder.initializeProbabilities(length, insertionGOPArray, deletionGOPArray, overallGCPArray);
env->ReleaseByteArrayElements(overallGCP, overallGCPArray, JNI_ABORT);
env->ReleaseByteArrayElements(deletionGOP, deletionGOPArray, JNI_ABORT);
env->ReleaseByteArrayElements(insertionGOP, insertionGOPArray, JNI_ABORT);
}
JNIEXPORT jdouble JNICALL
Java_org_broadinstitute_sting_utils_pairhmm_DebugJNILoglessPairHMM_jniInitializePriorsAndUpdateCells(
JNIEnv* env, jobject thisObject,
jboolean doInitialization, jint paddedReadLength, jint paddedHaplotypeLength,
jbyteArray readBases, jbyteArray haplotypeBases, jbyteArray readQuals,
jint hapStartIndex
)
{
#ifdef DEBUG3
cout << "Entered mainCompute .. doInitialization "<<(doInitialization == JNI_TRUE)<<" hapStartIndex "<<hapStartIndex<<"\n";
cout << "mainCompute padded lengths "<< paddedReadLength << " " << paddedHaplotypeLength <<"\n";
#endif
jboolean is_copy = JNI_FALSE;
jbyte* readBasesArray = (env)->GetByteArrayElements(readBases, &is_copy);
jbyte* haplotypeBasesArray = (env)->GetByteArrayElements(haplotypeBases, &is_copy);
jbyte* readQualsArray = (env)->GetByteArrayElements(readQuals, &is_copy);
#ifdef DEBUG
assert(readBasesArray && "readBasesArray not initialized in JNI");
assert(haplotypeBasesArray && "haplotypeBasesArray not initialized in JNI");
assert(readQualsArray && "readQualsArray not initialized in JNI");
#endif
testcase tc;
tc.rslen = paddedReadLength-1;
tc.haplen = paddedHaplotypeLength-1;
tc.rs = (char*)readBasesArray;
tc.hap = (char*)haplotypeBasesArray;
tc.q = (char*)readQualsArray; //TOASK - q is now char*
compute_full_prob<double>(&tc, g_double_dataholder.m_matchMatrix, g_double_dataholder.m_insertionMatrix,
g_double_dataholder.m_deletionMatrix, g_double_dataholder.m_transition,
doInitialization == JNI_TRUE, hapStartIndex, NULL);
env->ReleaseByteArrayElements(readBases, readBasesArray, JNI_ABORT);
env->ReleaseByteArrayElements(haplotypeBases, haplotypeBasesArray, JNI_ABORT);
env->ReleaseByteArrayElements(readQuals, readQualsArray, JNI_ABORT);
return 0.0;
}
JNIEXPORT jdouble JNICALL
Java_org_broadinstitute_sting_utils_pairhmm_DebugJNILoglessPairHMM_jniSubComputeReadLikelihoodGivenHaplotypeLog10(
JNIEnv* env, jobject thisObject,
jint readLength, jint haplotypeLength,
jbyteArray readBases, jbyteArray haplotypeBases, jbyteArray readQuals,
jbyteArray insertionGOP, jbyteArray deletionGOP, jbyteArray overallGCP,
jint hapStartIndex
)
{
jboolean is_copy = JNI_FALSE;
jbyte* readBasesArray = (jbyte*)GET_BYTE_ARRAY_ELEMENTS(readBases, &is_copy);
jbyte* haplotypeBasesArray = (jbyte*)GET_BYTE_ARRAY_ELEMENTS(haplotypeBases, &is_copy);
jbyte* readQualsArray = (jbyte*)GET_BYTE_ARRAY_ELEMENTS(readQuals, &is_copy);
jbyte* insertionGOPArray = (jbyte*)GET_BYTE_ARRAY_ELEMENTS(insertionGOP, &is_copy);
jbyte* deletionGOPArray = (jbyte*)GET_BYTE_ARRAY_ELEMENTS(deletionGOP, &is_copy);
jbyte* overallGCPArray = (jbyte*)GET_BYTE_ARRAY_ELEMENTS(overallGCP, &is_copy);
#ifdef DEBUG
assert(readBasesArray && "readBasesArray not initialized in JNI");
assert(haplotypeBasesArray && "haplotypeBasesArray not initialized in JNI");
assert(readQualsArray && "readQualsArray not initialized in JNI");
assert(insertionGOPArray && "insertionGOP array not initialized in JNI");
assert(deletionGOPArray && "deletionGOP array not initialized in JNI");
assert(overallGCPArray && "OverallGCP array not initialized in JNI");
assert(readLength < MROWS);
#endif
testcase tc;
tc.rslen = readLength;
tc.haplen = haplotypeLength;
tc.rs = (char*)readBasesArray;
tc.hap = (char*)haplotypeBasesArray;
for(unsigned i=0;i<readLength;++i)
{
tc.q[i] = (int)readQualsArray[i];
tc.i[i] = (int)insertionGOPArray[i];
tc.d[i] = (int)deletionGOPArray[i];
tc.c[i] = (int)overallGCPArray[i];
}
double result_avxd = g_compute_full_prob_double(&tc, 0);
double result = log10(result_avxd) - log10(ldexp(1.0, 1020));
#ifdef DEBUG
g_load_time_initializer.debug_dump("return_values_jni.txt",to_string(result),true);
#endif
RELEASE_BYTE_ARRAY_ELEMENTS(overallGCP, overallGCPArray, JNI_RO_RELEASE_MODE);
RELEASE_BYTE_ARRAY_ELEMENTS(deletionGOP, deletionGOPArray, JNI_RO_RELEASE_MODE);
RELEASE_BYTE_ARRAY_ELEMENTS(insertionGOP, insertionGOPArray, JNI_RO_RELEASE_MODE);
RELEASE_BYTE_ARRAY_ELEMENTS(readQuals, readQualsArray, JNI_RO_RELEASE_MODE);
RELEASE_BYTE_ARRAY_ELEMENTS(haplotypeBases, haplotypeBasesArray, JNI_RO_RELEASE_MODE);
RELEASE_BYTE_ARRAY_ELEMENTS(readBases, readBasesArray, JNI_RO_RELEASE_MODE);
return 0.0;
}