/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 1.3.31
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */


public class OBForceField {
  private long swigCPtr;
  protected boolean swigCMemOwn;

  protected OBForceField(long cPtr, boolean cMemoryOwn) {
    swigCMemOwn = cMemoryOwn;
    swigCPtr = cPtr;
  }

  protected static long getCPtr(OBForceField obj) {
    return (obj == null) ? 0 : obj.swigCPtr;
  }

  protected void finalize() {
    delete();
  }

  public synchronized void delete() {
    if(swigCPtr != 0 && swigCMemOwn) {
      swigCMemOwn = false;
      openbabelJNI.delete_OBForceField(swigCPtr);
    }
    swigCPtr = 0;
  }

  public OBForceField(String ID, boolean IsDefault) {
    this(openbabelJNI.new_OBForceField__SWIG_0(ID, IsDefault), true);
  }

  public OBForceField(String ID) {
    this(openbabelJNI.new_OBForceField__SWIG_1(ID), true);
  }

  public static pluginiterForceField Iter() {
    return new pluginiterForceField(openbabelJNI.OBForceField_Iter(), false);
  }

  public static OBForceField FindDefaultType() {
    long cPtr = openbabelJNI.OBForceField_FindDefaultType();
    return (cPtr == 0) ? null : new OBForceField(cPtr, false);
  }

  public static OBForceField FindType(String ID) {
    long cPtr = openbabelJNI.OBForceField_FindType(ID);
    return (cPtr == 0) ? null : new OBForceField(cPtr, false);
  }

  public static OBForceField FindForceField(String ID) {
    long cPtr = openbabelJNI.OBForceField_FindForceField__SWIG_0(ID);
    return (cPtr == 0) ? null : new OBForceField(cPtr, false);
  }

  public String GetUnit() {
    return openbabelJNI.OBForceField_GetUnit(swigCPtr, this);
  }

  public boolean Setup(OBMol mol) {
    return openbabelJNI.OBForceField_Setup(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean UpdateCoordinates(OBMol mol) {
    return openbabelJNI.OBForceField_UpdateCoordinates(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean UpdateConformers(OBMol mol) {
    return openbabelJNI.OBForceField_UpdateConformers(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public void OBFFLog(String msg) {
    openbabelJNI.OBForceField_OBFFLog__SWIG_0(swigCPtr, this, msg);
  }

  public double Energy(boolean gradients) {
    return openbabelJNI.OBForceField_Energy__SWIG_0(swigCPtr, this, gradients);
  }

  public double Energy() {
    return openbabelJNI.OBForceField_Energy__SWIG_1(swigCPtr, this);
  }

  public double E_Bond(boolean gradients) {
    return openbabelJNI.OBForceField_E_Bond__SWIG_0(swigCPtr, this, gradients);
  }

  public double E_Bond() {
    return openbabelJNI.OBForceField_E_Bond__SWIG_1(swigCPtr, this);
  }

  public double E_Angle(boolean gradients) {
    return openbabelJNI.OBForceField_E_Angle__SWIG_0(swigCPtr, this, gradients);
  }

  public double E_Angle() {
    return openbabelJNI.OBForceField_E_Angle__SWIG_1(swigCPtr, this);
  }

  public double E_StrBnd(boolean gradients) {
    return openbabelJNI.OBForceField_E_StrBnd__SWIG_0(swigCPtr, this, gradients);
  }

  public double E_StrBnd() {
    return openbabelJNI.OBForceField_E_StrBnd__SWIG_1(swigCPtr, this);
  }

  public double E_Torsion(boolean gradients) {
    return openbabelJNI.OBForceField_E_Torsion__SWIG_0(swigCPtr, this, gradients);
  }

  public double E_Torsion() {
    return openbabelJNI.OBForceField_E_Torsion__SWIG_1(swigCPtr, this);
  }

  public double E_OOP(boolean gradients) {
    return openbabelJNI.OBForceField_E_OOP__SWIG_0(swigCPtr, this, gradients);
  }

  public double E_OOP() {
    return openbabelJNI.OBForceField_E_OOP__SWIG_1(swigCPtr, this);
  }

  public double E_VDW(boolean gradients) {
    return openbabelJNI.OBForceField_E_VDW__SWIG_0(swigCPtr, this, gradients);
  }

  public double E_VDW() {
    return openbabelJNI.OBForceField_E_VDW__SWIG_1(swigCPtr, this);
  }

  public double E_Electrostatic(boolean gradients) {
    return openbabelJNI.OBForceField_E_Electrostatic__SWIG_0(swigCPtr, this, gradients);
  }

  public double E_Electrostatic() {
    return openbabelJNI.OBForceField_E_Electrostatic__SWIG_1(swigCPtr, this);
  }

  public boolean SetLogFile(SWIGTYPE_p_std__ostream pos) {
    return openbabelJNI.OBForceField_SetLogFile(swigCPtr, this, SWIGTYPE_p_std__ostream.getCPtr(pos));
  }

  public boolean SetLogLevel(int level) {
    return openbabelJNI.OBForceField_SetLogLevel(swigCPtr, this, level);
  }

  public int GetLogLevel() {
    return openbabelJNI.OBForceField_GetLogLevel(swigCPtr, this);
  }

  public void SystematicRotorSearch() {
    openbabelJNI.OBForceField_SystematicRotorSearch(swigCPtr, this);
  }

  public vector3 LineSearch(OBAtom atom, vector3 direction) {
    return new vector3(openbabelJNI.OBForceField_LineSearch(swigCPtr, this, OBAtom.getCPtr(atom), atom, vector3.getCPtr(direction), direction), true);
  }

  public void SteepestDescent(int steps, double econv, int method) {
    openbabelJNI.OBForceField_SteepestDescent__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void SteepestDescent(int steps, double econv) {
    openbabelJNI.OBForceField_SteepestDescent__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void SteepestDescent(int steps) {
    openbabelJNI.OBForceField_SteepestDescent__SWIG_2(swigCPtr, this, steps);
  }

  public void SteepestDescentInitialize(int steps, double econv, int method) {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void SteepestDescentInitialize(int steps, double econv) {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void SteepestDescentInitialize(int steps) {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_2(swigCPtr, this, steps);
  }

  public void SteepestDescentInitialize() {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_3(swigCPtr, this);
  }

  public boolean SteepestDescentTakeNSteps(int n) {
    return openbabelJNI.OBForceField_SteepestDescentTakeNSteps(swigCPtr, this, n);
  }

  public void ConjugateGradients(int steps, double econv, int method) {
    openbabelJNI.OBForceField_ConjugateGradients__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void ConjugateGradients(int steps, double econv) {
    openbabelJNI.OBForceField_ConjugateGradients__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void ConjugateGradients(int steps) {
    openbabelJNI.OBForceField_ConjugateGradients__SWIG_2(swigCPtr, this, steps);
  }

  public void ConjugateGradientsInitialize(int steps, double econv, int method) {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void ConjugateGradientsInitialize(int steps, double econv) {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void ConjugateGradientsInitialize(int steps) {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_2(swigCPtr, this, steps);
  }

  public void ConjugateGradientsInitialize() {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_3(swigCPtr, this);
  }

  public boolean ConjugateGradientsTakeNSteps(int n) {
    return openbabelJNI.OBForceField_ConjugateGradientsTakeNSteps(swigCPtr, this, n);
  }

  public boolean Validate() {
    return openbabelJNI.OBForceField_Validate(swigCPtr, this);
  }

  public boolean ValidateGradients() {
    return openbabelJNI.OBForceField_ValidateGradients(swigCPtr, this);
  }

  public vector3 ValidateGradientError(vector3 numgrad, vector3 anagrad) {
    return new vector3(openbabelJNI.OBForceField_ValidateGradientError(swigCPtr, this, vector3.getCPtr(numgrad), numgrad, vector3.getCPtr(anagrad), anagrad), true);
  }

  public static double VectorLengthDerivative(vector3 a, vector3 b) {
    return openbabelJNI.OBForceField_VectorLengthDerivative(vector3.getCPtr(a), a, vector3.getCPtr(b), b);
  }

  public static double VectorAngleDerivative(vector3 a, vector3 b, vector3 c) {
    return openbabelJNI.OBForceField_VectorAngleDerivative(vector3.getCPtr(a), a, vector3.getCPtr(b), b, vector3.getCPtr(c), c);
  }

  public static double VectorTorsionDerivative(vector3 a, vector3 b, vector3 c, vector3 d) {
    return openbabelJNI.OBForceField_VectorTorsionDerivative(vector3.getCPtr(a), a, vector3.getCPtr(b), b, vector3.getCPtr(c), c, vector3.getCPtr(d), d);
  }

  public void kludge() {
    openbabelJNI.OBForceField_kludge(swigCPtr, this);
  }

}


syntax highlighted by Code2HTML, v. 0.9.1