gatk-3.8/archive/java/src/org/broadinstitute/sting/oldsecondarybases/BasecallingStats.java

107 lines
3.0 KiB
Java
Executable File

package org.broadinstitute.sting.secondarybase;
import org.broadinstitute.sting.utils.BaseUtils;
/**
* BasecallingStats is a utility class to aggregate and emit basecalling
* stats (total bases seen and consistency between basecalling methods).
*
* @author Kiran Garimella
*/
public class BasecallingStats {
private int basesConsistent = 0;
private int basesTotal = 0;
private int readsTotal = 0;
/**
* Constructor that does nothing.
*/
public BasecallingStats() {}
/**
* Return the number of bases called identically by two different methods.
*
* @return the number of consistent bases.
*/
public int getBasesConsistent() {
return basesConsistent;
}
/**
* Return the total number of bases seen.
*
* @return the total number of bases seen.
*/
public int getBasesTotal() {
return basesTotal;
}
/**
* Return the total number of reads seen.
*
* @return the total number of reads seen.
*/
public int getReadsTotal() {
return readsTotal;
}
/**
* Return the percent of bases called consistently by two different methods.
*
* @return the percent of bases called consistently
*/
public double getPercentConsistent() {
return 100.0*((double) getBasesConsistent())/((double) getBasesTotal());
}
/**
* Updates the number of bases seen, the number of reads seen, and the number of consistent bases.
*
* @param rr the raw Illumina read
* @param fpr the FourProb read
*/
public void update(RawRead rr, FourProbRead fpr) {
for (int cycle = 0; cycle < fpr.size(); cycle++) {
int rawBaseIndex = BaseUtils.simpleBaseToBaseIndex((char) rr.getSequence()[cycle]);
int fpBaseIndex = fpr.get(cycle).indexAtRank(0);
if (rawBaseIndex >= 0 && fpBaseIndex >= 0) {
basesTotal++;
if (rawBaseIndex == fpBaseIndex) {
basesConsistent++;
}
}
}
readsTotal++;
}
/**
* Returns basecalling stats info in a nicely formatted string.
*
* @return nicely formatted string containing basecalling stats
*/
public String toString() {
return String.format(" Reads seen: %d; %% bases consistent: %d/%d (%2.2f%%)", getReadsTotal(), getBasesConsistent(), getBasesTotal(), getPercentConsistent());
}
/**
* Periodically print a line containing basecalling stats after having seen a certain number of reads.
*
* @param interval the periodicity (in number of reads) of the messages given in number of bases observed
*/
public void notifyOnInterval(int interval) {
if (getReadsTotal() > 0 && getReadsTotal() % interval == 0) {
System.out.printf("%s\n", toString());
}
}
/**
* Immediately print a line containing basecalling stats.
*/
public void notifyNow() {
System.out.printf("%s\n", toString());
}
}