Merge branch 'repval'
This commit is contained in:
commit
10e873d9c6
|
|
@ -419,6 +419,44 @@ public class BaseUtils {
|
||||||
return new String(simpleComplement(bases.getBytes()));
|
return new String(simpleComplement(bases.getBytes()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the index of the most common base in the basecounts array. To be used with
|
||||||
|
* pileup.getBaseCounts.
|
||||||
|
*
|
||||||
|
* @param baseCounts counts of a,c,g,t in order.
|
||||||
|
* @return the index of the most common base
|
||||||
|
*/
|
||||||
|
static public int mostFrequentBaseIndex(int[] baseCounts) {
|
||||||
|
int mostFrequentBaseIndex = 0;
|
||||||
|
for (int baseIndex = 1; baseIndex < 4; baseIndex++) {
|
||||||
|
if (baseCounts[baseIndex] > baseCounts[mostFrequentBaseIndex]) {
|
||||||
|
mostFrequentBaseIndex = baseIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mostFrequentBaseIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public int mostFrequentBaseIndexNotRef(int[] baseCounts, int refBaseIndex) {
|
||||||
|
int tmp = baseCounts[refBaseIndex];
|
||||||
|
baseCounts[refBaseIndex] = -1;
|
||||||
|
int result = mostFrequentBaseIndex(baseCounts);
|
||||||
|
baseCounts[refBaseIndex] = tmp;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public int mostFrequentBaseIndexNotRef(int[] baseCounts, byte refSimpleBase) {
|
||||||
|
return mostFrequentBaseIndexNotRef(baseCounts, simpleBaseToBaseIndex(refSimpleBase));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the most common base in the basecounts array. To be used with pileup.getBaseCounts.
|
||||||
|
*
|
||||||
|
* @param baseCounts counts of a,c,g,t in order.
|
||||||
|
* @return the most common base
|
||||||
|
*/
|
||||||
|
static public byte mostFrequentSimpleBase(int[] baseCounts) {
|
||||||
|
return baseIndexToSimpleBase(mostFrequentBaseIndex(baseCounts));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For the most frequent base in the sequence, return the percentage of the read it constitutes.
|
* For the most frequent base in the sequence, return the percentage of the read it constitutes.
|
||||||
|
|
@ -437,12 +475,7 @@ public class BaseUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int mostFrequentBaseIndex = 0;
|
int mostFrequentBaseIndex = mostFrequentBaseIndex(baseCounts);
|
||||||
for (int baseIndex = 1; baseIndex < 4; baseIndex++) {
|
|
||||||
if (baseCounts[baseIndex] > baseCounts[mostFrequentBaseIndex]) {
|
|
||||||
mostFrequentBaseIndex = baseIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((double) baseCounts[mostFrequentBaseIndex])/((double) sequence.length);
|
return ((double) baseCounts[mostFrequentBaseIndex])/((double) sequence.length);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ package org.broadinstitute.sting.utils;
|
||||||
|
|
||||||
import com.google.java.contract.Requires;
|
import com.google.java.contract.Requires;
|
||||||
import net.sf.samtools.SAMRecord;
|
import net.sf.samtools.SAMRecord;
|
||||||
|
import org.apache.lucene.messages.NLS;
|
||||||
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
|
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
|
||||||
import org.broadinstitute.sting.utils.exceptions.UserException;
|
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||||||
|
|
||||||
|
|
@ -124,6 +125,16 @@ public class MathUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the log10 cumulative sum of an array with log10 probabilities
|
||||||
|
* @param log10p the array with log10 probabilites
|
||||||
|
* @param upTo index in the array to calculate the cumsum up to
|
||||||
|
* @return the log10 of the cumulative sum
|
||||||
|
*/
|
||||||
|
public static double log10CumulativeSumLog10(double [] log10p, int upTo) {
|
||||||
|
return log10sumLog10(log10p, 0, upTo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a real space array of probabilities into a log10 array
|
* Converts a real space array of probabilities into a log10 array
|
||||||
* @param prRealSpace
|
* @param prRealSpace
|
||||||
|
|
@ -137,10 +148,14 @@ public class MathUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double log10sumLog10(double[] log10p, int start) {
|
public static double log10sumLog10(double[] log10p, int start) {
|
||||||
|
return log10sumLog10(log10p, start, log10p.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double log10sumLog10(double[] log10p, int start, int finish) {
|
||||||
double sum = 0.0;
|
double sum = 0.0;
|
||||||
|
|
||||||
double maxValue = Utils.findMaxEntry(log10p);
|
double maxValue = Utils.findMaxEntry(log10p);
|
||||||
for ( int i = start; i < log10p.length; i++ ) {
|
for ( int i = start; i < finish; i++ ) {
|
||||||
sum += Math.pow(10.0, log10p[i] - maxValue);
|
sum += Math.pow(10.0, log10p[i] - maxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -345,6 +360,23 @@ public class MathUtils {
|
||||||
return Math.pow(10,log10MultinomialProbability(n, k, log10P));
|
return Math.pow(10,log10MultinomialProbability(n, k, log10P));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* calculate the Root Mean Square of an array of integers
|
||||||
|
* @param x an byte[] of numbers
|
||||||
|
* @return the RMS of the specified numbers.
|
||||||
|
*/
|
||||||
|
public static double rms(byte[] x) {
|
||||||
|
if ( x.length == 0 )
|
||||||
|
return 0.0;
|
||||||
|
|
||||||
|
double rms = 0.0;
|
||||||
|
for (int i : x)
|
||||||
|
rms += i * i;
|
||||||
|
rms /= x.length;
|
||||||
|
return Math.sqrt(rms);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* calculate the Root Mean Square of an array of integers
|
* calculate the Root Mean Square of an array of integers
|
||||||
* @param x an int[] of numbers
|
* @param x an int[] of numbers
|
||||||
|
|
@ -471,6 +503,18 @@ public class MathUtils {
|
||||||
return maxI;
|
return maxI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int maxElementIndex(int[] array) {
|
||||||
|
if ( array == null ) throw new IllegalArgumentException("Array cannot be null!");
|
||||||
|
|
||||||
|
int maxI = -1;
|
||||||
|
for ( int i = 0; i < array.length; i++ ) {
|
||||||
|
if ( maxI == -1 || array[i] > array[maxI] )
|
||||||
|
maxI = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxI;
|
||||||
|
}
|
||||||
|
|
||||||
public static double arrayMax(double[] array) {
|
public static double arrayMax(double[] array) {
|
||||||
return array[maxElementIndex(array)];
|
return array[maxElementIndex(array)];
|
||||||
}
|
}
|
||||||
|
|
@ -727,6 +771,38 @@ public class MathUtils {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int countOccurrences(byte element, byte [] array) {
|
||||||
|
int count = 0;
|
||||||
|
for (byte y : array) {
|
||||||
|
if (element == y)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the top (larger) N elements of the array. Naive n^2 implementation (Selection Sort).
|
||||||
|
* Better than sorting if N (number of elements to return) is small
|
||||||
|
*
|
||||||
|
* @param array the array
|
||||||
|
* @param n number of top elements to return
|
||||||
|
* @return the n larger elements of the array
|
||||||
|
*/
|
||||||
|
public static Collection<Double> getNMaxElements(double [] array, int n) {
|
||||||
|
ArrayList<Double> maxN = new ArrayList<Double>(n);
|
||||||
|
double lastMax = Double.MAX_VALUE;
|
||||||
|
for (int i=0; i<n; i++) {
|
||||||
|
double max = Double.MIN_VALUE;
|
||||||
|
for (double x : array) {
|
||||||
|
max = Math.min(lastMax, Math.max(x, max));
|
||||||
|
}
|
||||||
|
maxN.add(max);
|
||||||
|
lastMax = max;
|
||||||
|
}
|
||||||
|
return maxN;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns n random indices drawn with replacement from the range 0..(k-1)
|
* Returns n random indices drawn with replacement from the range 0..(k-1)
|
||||||
*
|
*
|
||||||
|
|
@ -1015,6 +1091,11 @@ public class MathUtils {
|
||||||
return ((-q)/10.0);
|
return ((-q)/10.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the phred scaled value of probability p
|
||||||
|
* @param p probability (between 0 and 1).
|
||||||
|
* @return phred scaled probability of p
|
||||||
|
*/
|
||||||
public static byte probabilityToPhredScale (double p) {
|
public static byte probabilityToPhredScale (double p) {
|
||||||
return (byte) ((-10) * Math.log10(p));
|
return (byte) ((-10) * Math.log10(p));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue