package beast.util;
import java.util.ArrayList;
import java.util.List;
/**
* Credible Set results
*
* @author Walter Xie
*/
public class CredibleSet<T> {
public List<T> credibleSetList;
final double credSetProbability;
public int sumFrequency = 0;
public int targetIndex = -1;
public double targetProb = 0.0;
public double targetCum = 1.0;
public CredibleSet(double credSetProbability) {
credibleSetList = new ArrayList<>();
this.credSetProbability = credSetProbability;
}
public void setCredibleSetList(T target, FrequencySet<T> frequencySet) {
int total = frequencySet.getSumFrequency();
for (int i = 0; i < frequencySet.size(); i++) {
final int freq = frequencySet.getFrequency(i);
final double prop = ((double) freq) / total;
sumFrequency += freq;
final double sumProp = ((double) sumFrequency) / (double)total;
T obj = frequencySet.get(i);
credibleSetList.add(obj);
if (target != null && obj.equals(target)) {
targetIndex = i + 1;
targetProb = prop;
targetCum = sumProp;
}
if (sumProp >= credSetProbability) {
break;
}
}
}
/**
* get frequency of ith object
*/
public int getFrequency(int i, FrequencySet<T> frequencySet) {
return frequencySet.getFrequency(credibleSetList.get(i));
}
}