/*
* EmpiricalCodonRateMatrix.java
*
* Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard
*
* This file is part of BEAST.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership and licensing.
*
* BEAST is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* BEAST 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with BEAST; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package dr.oldevomodel.substmodel;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import dr.evolution.datatype.DataType;
/**
* Empirical rate matrix
*
* @author Stefan Zoller
*
*/
public class EmpiricalCodonRateMatrix {
/**
* constructor
*
* @param name Name of matrix
* @param dataType Data type as Codons.UNIVERSAL
* @param dir Directory that contains csv files with matrices
* @param fName Name of frequency csv file
* @param mName Name of initial matrix csv file
*/
public EmpiricalCodonRateMatrix(String name, DataType dataType, String dir, String fName, String mName) {
this.name = name;
this.dataType = dataType;
this.dataDir = dir;
this.matName = mName;
this.freqName = fName;
setupRates();
setupFreqs();
}
public final String getName() { return name; }
public final DataType getDataType() { return dataType; }
public double[] getRates() { return rates; }
public double[] getFrequencies() { return frequencies; }
public String getFreqName() { return freqName; }
public String getMatName() { return matName; }
public String getDirName() { return dataDir; }
public void setFrequencies(double[] f) {
this.frequencies = f;
}
public void setRates(double[] p) {
this.rates = p;
}
private void setupRates() {
this.rates = new double[1830];
readFile(this.rates, matName, 1830);
}
private void setupFreqs() {
this.frequencies = new double[61];
readFile(this.frequencies, freqName, 61);
}
// read csv data
private void readFile(double[] r, String f, int nr) {
File file = new File(dataDir, f);
try {
BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String line = null;
int col = 0;
while((line = bufRdr.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line,",");
while (st.hasMoreTokens()) {
r[col] = Double.valueOf(st.nextToken()).doubleValue();
col++;
}
}
bufRdr.close();
if(col != nr) {
Logger.getLogger("dr.evomodel").severe("Matrix does not contain " + nr + " values but " + col);
}
} catch (FileNotFoundException e) {
Logger.getLogger("dr.evomodel").severe("Caught FileNotFoundException: " + e.getMessage());
} catch (IOException e) {
Logger.getLogger("dr.evomodel").severe("Caught IOException: " + e.getMessage());
} finally {
}
}
protected double[] rates;
protected double[] frequencies;
private String name;
protected String dataDir;
protected String matName;
protected String freqName;
protected DataType dataType;
}