/*
Copyright (C) 2011 Diego Darriba, David Posada
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 3 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.jmodeltest.utilities;
import java.math.BigDecimal;
import javax.swing.table.AbstractTableModel;
import es.uvigo.darwin.jmodeltest.ModelTest;
/************************* MyTableModel ********************************/
/* This class fills in the data in the table */
public class MyTableModel extends AbstractTableModel {
private static final long serialVersionUID = -8310097889316872278L;
int i;
final String[] columnNamesModel = { "ID", "Name", "Partition", "-lnL", "p",
"fA", "fC", "fG", "fT", "ti/tv", "R(a)", "R(b)", "R(c)", "R(d)",
"R(e)", "R(f)", "p-inv", "shape"};
final String[] columnNamesAIC = { "ID", "Name", "Partition", "-lnL", "p",
"AIC", "deltaAIC", "weight", "cumWeight", "uDelta" };
final String[] columnNamesAICc = { "ID", "Name", "Partition", "-lnL", "p",
"AICc", "deltaAICc", "weight", "cumWeight", "uDelta" };
final String[] columnNamesBIC = { "ID", "Name", "Partition", "-lnL", "p",
"BIC", "deltaBIC", "weight", "cumWeight", "uDelta" };
final String[] columnNamesDT = { "ID", "Name", "Partition", "-lnL", "p",
"DT", "deltaDT", "weight", "cumWeight", "-" };
private String[] columnNames;
private Object[][] data;
private int size;
public MyTableModel(String whichTable, int size) {
this.size = size;
int precision = ModelTest.PRECISION;
if (whichTable.equals("Model")) {
columnNames = columnNamesModel;
data = new Object[size][18];
for (i = 0; i < size; i++) {
data[i][0] = new Integer(
ModelTest.getCandidateModels()[i].getId());
data[i][1] = ModelTest.getCandidateModels()[i].getName();
data[i][2] = ModelTest.getCandidateModels()[i].getPartition();
data[i][3] = new Double(Round(
ModelTest.getCandidateModels()[i].getLnL(), precision));
data[i][4] = new Integer(
ModelTest.getCandidateModels()[i].getK());
if (ModelTest.getCandidateModels()[i].ispF()) {
data[i][5] = new Double(Round(
ModelTest.getCandidateModels()[i].getfA(),
precision));
data[i][6] = new Double(Round(
ModelTest.getCandidateModels()[i].getfC(),
precision));
data[i][7] = new Double(Round(
ModelTest.getCandidateModels()[i].getfG(),
precision));
data[i][8] = new Double(Round(
ModelTest.getCandidateModels()[i].getfT(),
precision));
} else {
data[i][5] = "-";
data[i][6] = "-";
data[i][7] = "-";
data[i][8] = "-";
}
if (ModelTest.getCandidateModels()[i].ispT())
data[i][9] = new Double(Round(
ModelTest.getCandidateModels()[i].getTitv(),
precision));
else
data[i][9] = "-";
if (ModelTest.getCandidateModels()[i].ispR()) {
data[i][10] = new Double(Round(
ModelTest.getCandidateModels()[i].getRa(), 6));
data[i][11] = new Double(Round(
ModelTest.getCandidateModels()[i].getRb(), 6));
data[i][12] = new Double(Round(
ModelTest.getCandidateModels()[i].getRc(), 6));
data[i][13] = new Double(Round(
ModelTest.getCandidateModels()[i].getRd(), 6));
data[i][14] = new Double(Round(
ModelTest.getCandidateModels()[i].getRe(), 6));
data[i][15] = new Double(1);
} else {
data[i][10] = "-";
data[i][11] = "-";
data[i][12] = "-";
data[i][13] = "-";
data[i][14] = "-";
data[i][15] = "-";
}
if (ModelTest.getCandidateModels()[i].ispI()) {
data[i][16] = Utilities.format(ModelTest.getCandidateModels()[i].getPinv(), precision+2, precision, false);
} else {
data[i][16] = "-";
}
if (ModelTest.getCandidateModels()[i].ispG()) {
if (ModelTest.getCandidateModels()[i].getShape() != ModelTest.INFINITY) {
data[i][17] = Utilities.format(ModelTest.getCandidateModels()[i].getShape(), precision+2, precision, false);
} else {
data[i][17] = "inf";
}
} else {
data[i][17] = "-";
}
}
} else if (whichTable.equals("AIC")) {
columnNames = columnNamesAIC;
data = new Object[size][10];
} else if (whichTable.equals("AICc")) {
columnNames = columnNamesAICc;
data = new Object[size][10];
} else if (whichTable.equals("BIC")) {
columnNames = columnNamesBIC;
data = new Object[size][10];
} else if (whichTable.equals("DT")) {
columnNames = columnNamesDT;
data = new Object[size][10];
}
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public double Round(double number, int decimalPlace) {
double returnValue = number;
if (!(Double.isNaN(number) || Double.isInfinite(number))) {
BigDecimal bd = new BigDecimal(number);
bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
returnValue = bd.doubleValue();
}
return (returnValue);
}
public void populate(String whichTable) {
int precision = ModelTest.PRECISION;
if (whichTable.equals("AIC")) {
for (i = 0; i < size; i++) {
data[i][0] = new Integer(
ModelTest.getCandidateModels()[i].getId());
data[i][1] = ModelTest.getCandidateModels()[i].getName();
data[i][2] = ModelTest.getCandidateModels()[i].getPartition();
data[i][3] = new Double(Round(
ModelTest.getCandidateModels()[i].getLnL(), precision));
data[i][4] = new Integer(
ModelTest.getCandidateModels()[i].getK());
data[i][5] = new Double(Round(
ModelTest.getCandidateModels()[i].getAIC(), precision));
data[i][6] = new Double(Round(
ModelTest.getCandidateModels()[i].getAICd(), precision));
data[i][7] = new Double(Round(
ModelTest.getCandidateModels()[i].getAICw(), precision));
data[i][8] = new Double(Round(
ModelTest.getCandidateModels()[i].getCumAICw(),
precision));
if (ModelTest.getCandidateModels()[i].getUnconstrainedLnL() > 0.0d) {
data[i][9] = new Double(Round(
ModelTest.getCandidateModels()[i].getUAICd(),
precision));
} else {
data[i][9] = "-";
}
}
} else if (whichTable.equals("AICc")) {
for (i = 0; i < size; i++) {
data[i][0] = new Integer(
ModelTest.getCandidateModels()[i].getId());
data[i][1] = ModelTest.getCandidateModels()[i].getName();
data[i][2] = ModelTest.getCandidateModels()[i].getPartition();
data[i][3] = new Double(Round(
ModelTest.getCandidateModels()[i].getLnL(), precision));
data[i][4] = new Integer(
ModelTest.getCandidateModels()[i].getK());
data[i][5] = new Double(Round(
ModelTest.getCandidateModels()[i].getAICc(), precision));
data[i][6] = new Double(
Round(ModelTest.getCandidateModels()[i].getAICcd(),
precision));
data[i][7] = new Double(
Round(ModelTest.getCandidateModels()[i].getAICcw(),
precision));
data[i][8] = new Double(Round(
ModelTest.getCandidateModels()[i].getCumAICcw(),
precision));
if (ModelTest.getCandidateModels()[i].getUnconstrainedLnL() > 0.0d) {
data[i][9] = new Double(Round(
ModelTest.getCandidateModels()[i].getUAICcd(),
precision));
} else {
data[i][9] = "-";
}
}
} else if (whichTable.equals("BIC")) {
for (i = 0; i < size; i++) {
data[i][0] = new Integer(
ModelTest.getCandidateModels()[i].getId());
data[i][1] = ModelTest.getCandidateModels()[i].getName();
data[i][2] = ModelTest.getCandidateModels()[i].getPartition();
data[i][3] = new Double(Round(
ModelTest.getCandidateModels()[i].getLnL(), precision));
data[i][4] = new Integer(
ModelTest.getCandidateModels()[i].getK());
data[i][5] = new Double(Round(
ModelTest.getCandidateModels()[i].getBIC(), precision));
data[i][6] = new Double(Round(
ModelTest.getCandidateModels()[i].getBICd(), precision));
data[i][7] = new Double(Round(
ModelTest.getCandidateModels()[i].getBICw(), 4));
data[i][8] = new Double(Round(
ModelTest.getCandidateModels()[i].getCumBICw(),
precision));
if (ModelTest.getCandidateModels()[i].getUnconstrainedLnL() > 0.0d) {
data[i][9] = new Double(Round(
ModelTest.getCandidateModels()[i].getUBICd(),
precision));
} else {
data[i][9] = "-";
}
}
} else if (whichTable.equals("DT")) {
for (i = 0; i < size; i++) {
data[i][0] = new Integer(
ModelTest.getCandidateModels()[i].getId());
data[i][1] = ModelTest.getCandidateModels()[i].getName();
data[i][2] = ModelTest.getCandidateModels()[i].getPartition();
data[i][3] = new Double(Round(
ModelTest.getCandidateModels()[i].getLnL(), precision));
data[i][4] = new Integer(
ModelTest.getCandidateModels()[i].getK());
data[i][5] = new Double(Round(
ModelTest.getCandidateModels()[i].getDT(), precision));
data[i][6] = new Double(Round(
ModelTest.getCandidateModels()[i].getDTd(), precision));
data[i][7] = new Double(Round(
ModelTest.getCandidateModels()[i].getDTw(), 4));
data[i][8] = new Double(Round(
ModelTest.getCandidateModels()[i].getCumDTw(),
precision));
data[i][9] = "";
}
}
}
}