package aliview.alignment;
import aliview.AminoAcid;
import aliview.NucleotideUtilities;
import aliview.sequences.Sequence;
public abstract class AliHistogram{
int[][] hist;
public AliHistogram(int length) {
hist = new int[length][33];
}
public abstract void addSequence(Sequence seq);
public int getValueCount(int x, int value){
return hist[x][value];
}
public int getValueCount(int x, int[] values){
int sum = 0;
for(int value: values){
sum += hist[x][value];
}
return sum;
}
public abstract double getSumNonGap(int x);
public int getValueCount(int x, AminoAcid acid){
return getValueCount(x, acid.intVal);
}
public double getValueCount(int x, AminoAcid[] acids){
int sum = 0;
for(AminoAcid acid: acids){
sum += getValueCount(x, acid);
}
return sum;
}
public double getProportionCount(int x, AminoAcid acid){
return (double)getValueCount(x,acid)/(double)getSumNonGap(x);
}
public double getProportionCount(int x, AminoAcid[] acids){
return (double)getValueCount(x,acids)/(double)getSumNonGap(x);
}
public double getProportionCount(int x, int value){
return (double)getValueCount(x,value)/(double)getSumNonGap(x);
}
public double getProportionCount(int x, int[] values){
return (double)getValueCount(x,values)/(double)getSumNonGap(x);
}
public boolean isMajorityRuleConsensus(int x, int baseVal) {
return (getProportionCount(x, baseVal) >= 0.5);
}
}