Quick optimization to the PairHMM

Problem
--------
the logless HMM scale factor (to avoid double under-flows) was 10^300. Although this serves the purpose this value results in a complex mantissa that further complicates cpu calculations.

Solution
---------
initialize with 2^1020 (2^1023 is the max value), and adjust the scale factor accordingly.
This commit is contained in:
Mauricio Carneiro 2013-04-14 23:25:33 -04:00
parent 55547b68bb
commit 9bfa5eb70f
1 changed files with 3 additions and 3 deletions

View File

@ -56,8 +56,8 @@ import org.broadinstitute.sting.utils.QualityUtils;
* Date: 10/16/12 * Date: 10/16/12
*/ */
public final class LoglessPairHMM extends PairHMM { public final class LoglessPairHMM extends PairHMM {
protected static final double SCALE_FACTOR_LOG10 = 300.0; protected static final double INITIAL_CONDITION = Math.pow(2, 1020);
protected static final double INITIAL_CONDITION = Math.pow(10, SCALE_FACTOR_LOG10); protected static final double INITIAL_CONDITION_LOG10 = Math.log10(INITIAL_CONDITION);
private static final int matchToMatch = 0; private static final int matchToMatch = 0;
private static final int indelToMatch = 1; private static final int indelToMatch = 1;
@ -118,7 +118,7 @@ public final class LoglessPairHMM extends PairHMM {
for (int j = 1; j < paddedHaplotypeLength; j++) { for (int j = 1; j < paddedHaplotypeLength; j++) {
finalSumProbabilities += matchMatrix[endI][j] + insertionMatrix[endI][j]; finalSumProbabilities += matchMatrix[endI][j] + insertionMatrix[endI][j];
} }
return Math.log10(finalSumProbabilities) - SCALE_FACTOR_LOG10; return Math.log10(finalSumProbabilities) - INITIAL_CONDITION_LOG10;
} }
/** /**