/*
Copyright (C) 2009 Diego Darriba
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package es.uvigo.darwin.prottest.selection.model;
import es.uvigo.darwin.prottest.model.Model;
import es.uvigo.darwin.prottest.selection.BIC;
import es.uvigo.darwin.prottest.tree.TreeDistancesCache;
/**
* Model wrapper including information about Decision Theory Information Criterion
*/
public class DTSelectionModel extends SelectionModel {
/**
* Instantiates a new Decision Theory selection model.
*
* @param model the underlying model
* @param sampleSize the sample size
*/
public DTSelectionModel(Model model, double sampleSize, BIC bic,
TreeDistancesCache distancesCache) {
super(model, sampleSize);
double minBIC = bic.get(bic.getBestModel()).getValue();
double sum = 0.0;
for (SelectionModel selectionModel : bic.getSelectionModels()) {
double distance = distancesCache.getDistance(model.getTree(), selectionModel.getModel().getTree());
if (distance > 0) {
double power = Math.log(distance) - selectionModel.getValue() + minBIC;
if (power > -30) {
sum += Math.exp(power);
}
}
}
this.value = sum;
}
}