Moved the base complement method to BaseUtils.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@711 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
kiran 2009-05-14 18:57:48 +00:00
parent 3761c0900b
commit 68c9455c0f
2 changed files with 48 additions and 17 deletions

View File

@ -75,6 +75,28 @@ public class BaseUtils {
return baseIndexToSimpleBase(crossTalkPartnerIndex(simpleBaseToBaseIndex(base)));
}
/**
* Return the complement of a base index.
*
* @param baseIndex the base index (0:A, 1:C, 2:G, 3:T)
* @return the complementary base index
*/
static public byte complementIndex(int baseIndex) {
switch (baseIndex) {
case 0: return 3; // a -> t
case 1: return 2; // c -> g
case 2: return 1; // g -> c
case 3: return 0; // t -> a
default: return -1; // wtf?
}
}
/**
* Return the complement of a base.
*
* @param base the base [AaCcGgTt]
* @return the complementary base
*/
static public byte simpleComplement(char base) {
switch (base) {
case 'A':
@ -89,6 +111,11 @@ public class BaseUtils {
}
}
/**
* Reverse complement a byte array of bases
* @param bases the byte array of bases
* @return the reverse complement of the base byte array
*/
static public byte[] simpleReverseComplement(byte[] bases) {
byte[] rcbases = new byte[bases.length];

View File

@ -48,6 +48,12 @@ public class QualityUtils {
return b;
}
/**
* Return a quality score, capped at 63.
*
* @param qual the uncapped quality score
* @return the capped quality score
*/
static public byte boundQual(int qual) {
return (byte) Math.min(qual, 63);
}
@ -73,6 +79,14 @@ public class QualityUtils {
return compressedQual;
}
/**
* Compress a base and a log probabiliy difference (-10log10(p3/p2)) into
* a single byte so that it can be output in a SAMRecord's SQ field.
*
* @param baseIndex the base index
* @param probdiff the log probability difference between the secondary and tertiary bases (-10log10(p3/p2))
* @return a byte containing the index and the log probability difference
*/
static public byte baseAndProbDiffToCompressedQuality(int baseIndex, double probdiff) {
byte compressedQual = 0;
@ -110,6 +124,12 @@ public class QualityUtils {
return ((double) x2)/100.0;
}
/**
* From a compressed base, extract the log probability difference between the secondary and tertiary bases.
*
* @param compressedQual the compressed quality score, as returned by baseAndProbDiffToCompressedQuality
* @return the log probability difference (-10log10(p3/p2))
*/
static public double compressedQualityToProbDiff(byte compressedQual) {
// Because java natives are signed, extra care must be taken to avoid
// shifting a 1 into the sign bit in the implicit promotion of 2 to an int.
@ -119,22 +139,6 @@ public class QualityUtils {
return ((double) x2);
}
/**
* Return the complement of a base index.
*
* @param baseIndex the base index (0:A, 1:C, 2:G, 3:T)
* @return the complementary base index
*/
static public byte complement(int baseIndex) {
switch (baseIndex) {
case 0: return 3; // a -> t
case 1: return 2; // c -> g
case 2: return 1; // g -> c
case 3: return 0; // t -> a
default: return -1; // wtf?
}
}
/**
* Return the complement of a compressed quality
*
@ -145,7 +149,7 @@ public class QualityUtils {
int baseIndex = compressedQualityToBaseIndex(compressedQual);
double prob = compressedQualityToProb(compressedQual);
return baseAndProbToCompressedQuality(complement(baseIndex), prob);
return baseAndProbToCompressedQuality(BaseUtils.complementIndex(baseIndex), prob);
}
/**