/*
* RegressionJNIWrapper.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.inference.regression;
/**
* @author Marc A. Suchard
*/
public class RegressionJNIWrapper {
public static final String LIBRARY_NAME = "bsccs_jni";
public static final String LIBRARY_PATH_LABEL = "bsccs.library.path";
public static final String LIBRARY_PLATFORM_NAME = getPlatformSpecificLibraryName();
public static final int NO_PRIOR = 0;
public static final int LAPLACE_PRIOR = 1;
public static final int NORMAL_PRIOR = 2;
/**
* private constructor to enforce singleton instance
*/
private RegressionJNIWrapper() {
}
public native int loadData(String fileName);
public native double getLogLikelihood(int instance);
public native double getLogPrior(int instance);
public native double getBeta(int instance, int index);
public native int getBetaSize(int instance);
public native double getHessian(int instance, int index1, int index2);
public native void setBeta(int instance, int index, double value);
public native void setBeta(int instance, double[] values);
public native double getHyperprior(int instance);
public native void setHyperprior(int instance, double value);
public native void findMode(int instance);
public native int getUpdateCount(int instance);
public native int getLikelihoodCount(int instance);
public native void setPriorType(int instance, int type);
public native void makeDirty(int instance);
/* Library loading routines */
private static String getPlatformSpecificLibraryName() {
String osName = System.getProperty("os.name").toLowerCase();
String osArch = System.getProperty("os.arch").toLowerCase();
if (osName.startsWith("windows")) {
if(osArch.equals("i386")) return LIBRARY_NAME + "32";
if(osArch.startsWith("amd64")||osArch.startsWith("x86_64")) return LIBRARY_NAME + "64";
}
return LIBRARY_NAME;
}
public static RegressionJNIWrapper loadLibrary() throws UnsatisfiedLinkError {
if (INSTANCE == null) {
System.err.println("Trying to load BSCCS library...");
String path = "";
if (System.getProperty(LIBRARY_PATH_LABEL) != null) {
path = System.getProperty(LIBRARY_PATH_LABEL);
if (path.length() > 0 && !path.endsWith("/")) {
path += "/";
}
}
System.loadLibrary(path + LIBRARY_PLATFORM_NAME);
INSTANCE = new RegressionJNIWrapper();
System.err.println("BSCCS library loaded.");
}
return INSTANCE;
}
private static RegressionJNIWrapper INSTANCE = null;
}