package org.openscience.cdk.modeling.builder3d; import java.util.List; import java.util.Map; /** * Set the right atoms order to get the parameters. * * @author chhoppe * @cdk.created 2004-10-8 * @cdk.module forcefield * @cdk.githash */ public class MMFF94ParametersCall { private Map<String,List> pSet = null; //private final static double DEFAULT_BOND_LENGTH = 1.5; //private final static double DEFAULT_ANGLE = 90; // Only to test //private final static double DEFAULT_TORSION_ANGLE = 90; public MMFF94ParametersCall(){} /** * Initialize the AtomOrder class. * * @param parameterSet Force Field parameter as Map */ public void initialize(Map<String,List> parameterSet) { pSet = parameterSet; } /** * Gets the bond parameter set. * * @param id1 atom1 id * @param id2 atom2 id * @return The distance value from the force field parameter set * @exception Exception Description of the Exception */ public List getBondData(String code, String id1, String id2) throws Exception { String dkey = ""; if (pSet.containsKey(("bond" + code + ";" + id1 + ";" + id2))) { dkey="bond" + code + ";" + id1 + ";" + id2; }else if (pSet.containsKey(("bond" + code + ";" + id2 + ";" + id1))) { dkey = "bond" + code + ";" + id2 + ";" + id1; } /*else { System.out.println("KEYError:Unknown distance key in pSet: " + code + ";" + id2 + " ;" + id1+" take default bon length:" + DEFAULT_BOND_LENGTH); return DEFAULT_BOND_LENGTH; }*/ //logger.debug("dkey = " + dkey); return (List) pSet.get(dkey); } /** * Gets the angle parameter set. * * @param id1 ID from Atom 1. * @param id2 ID from Atom 2. * @param id3 ID from Atom 3. * @return The angle data from the force field parameter set * @exception Exception Description of the Exception */ public List getAngleData(String angleType, String id1, String id2, String id3) throws Exception { String akey = ""; if (pSet.containsKey(("angle" + angleType + ";" + id1 + ";" + id2 + ";" + id3))) { akey = "angle" + angleType + ";" + id1 + ";" + id2 + ";" + id3; } else if (pSet.containsKey(("angle" + angleType + ";" + id3 + ";" + id2 + ";" + id1))) { akey = "angle" + angleType + ";" + id3 + ";" + id2 + ";" + id1; } /*else { System.out.println("KEYErrorAngle:Unknown angle key in pSet: " + angleType + ";" + id1 + " ; " + id2 + " ; " + id3 +" take default angle:" + DEFAULT_ANGLE); return (Vector)[DEFAULT_ANGLE,0,0]; }*/ //logger.debug("angle key : " + akey); return (List) pSet.get(akey); } /** * Gets the bond-angle interaction parameter set. * * @param id1 ID from Atom 1. * @param id2 ID from Atom 2. * @param id3 ID from Atom 3. * @return The bond-angle interaction data from the force field parameter set * @exception Exception Description of the Exception */ public List getBondAngleInteractionData(String strbndType, String id1, String id2, String id3) throws Exception { String akey = ""; if (pSet.containsKey(("strbnd" + strbndType + ";" + id1 + ";" + id2 + ";" + id3))) { akey = "strbnd" + strbndType + ";" + id1 + ";" + id2 + ";" + id3; } else if (pSet.containsKey(("strbnd" + strbndType + ";" + id1 + ";" + id3 + ";" + id2))) { akey = "strbnd" + strbndType + ";" + id1 + ";" + id3 + ";" + id2; } else if (pSet.containsKey(("strbnd" + strbndType + ";" + id2 + ";" + id1 + ";" + id3))) { akey = "strbnd" + strbndType + ";" + id2 + ";" + id1 + ";" + id3; } else if (pSet.containsKey(("strbnd" + strbndType + ";" + id2 + ";" + id3 + ";" + id1))) { akey = "strbnd" + strbndType + ";" + id2 + ";" + id3 + ";" + id1; } else if (pSet.containsKey(("strbnd" + strbndType + ";" + id3 + ";" + id1 + ";" + id2))) { akey = "strbnd" + strbndType + ";" + id3 + ";" + id1 + ";" + id2; } else if (pSet.containsKey(("strbnd" + strbndType + ";" + id3 + ";" + id2 + ";" + id1))) { akey = "strbnd" + strbndType + ";" + id3 + ";" + id2 + ";" + id1; } /*else { System.out.println("KEYErrorAngle:Unknown angle key in pSet: " +id1 + " ; " + id2 + " ; " + id3+" take default angle:" + DEFAULT_ANGLE); return (Vector)[DEFAULT_ANGLE,0,0]; }*/ //logger.debug("akey : " + akey); return (List) pSet.get(akey); } /** * Gets the bond-angle interaction parameter set. * * @param iR ID from Atom 1. * @param jR ID from Atom 2. * @param kR ID from Atom 3. * @return The bond-angle interaction data from the force field parameter set * @exception Exception Description of the Exception */ public List getDefaultStretchBendData(int iR, int jR, int kR) throws Exception { String dfsbkey = ""; if (pSet.containsKey(("DFSB" + iR + ";" + jR + ";" + kR))) { dfsbkey = "DFSB" + iR + ";" + jR + ";" + kR; } /*else { System.out.println("KEYErrorDefaultStretchBend:Unknown default stretch-bend key in pSet: " + iR + " ; " + jR + " ; " + kR); }*/ //logger.debug("dfsbkey : " + dfsbkey); return (List) pSet.get(dfsbkey); } /** * Gets the bond parameter set. * * @param id1 atom1 id * @param id2 atom2 id * @return The distance value from the force field parameter set * @exception Exception Description of the Exception */ public List getTorsionData(String code, String id1, String id2, String id3, String id4) throws Exception { String dkey = ""; if (pSet.containsKey(("torsion" + code + ";" + id1 + ";" + id2 + ";" + id3 + ";" + id4))) { dkey="torsion" + code + ";" + id1 + ";" + id2 + ";" + id3 + ";" + id4; }else if (pSet.containsKey(("torsion" + code + ";" + id4 + ";" + id3 + ";" + id2 + ";" + id1))) { dkey = "torsion" + code + ";" + id4 + ";" + id3 + ";" + id2 + ";" + id1; }else if (pSet.containsKey(("torsion" + code + ";*;" + id2 + ";" + id3 + ";*"))) { dkey="torsion" + code + ";*;" + id2 + ";" + id3 + ";*"; }else if (pSet.containsKey(("torsion" + code + ";*;" + id3 + ";" + id2 + ";*"))) { dkey = "torsion" + code + ";*;" + id3 + ";" + id2 + ";*"; }else if (pSet.containsKey(("torsion" + 0 + ";*;" + id2 + ";" + id3 + ";*"))) { dkey = "torsion" + 0 + ";*;" + id2 + ";" + id3 + ";*"; }else if (pSet.containsKey(("torsion" + 0 + ";*;" + id3 + ";" + id2 + ";*"))) { dkey = "torsion" + 0 + ";*;" + id3 + ";" + id2 + ";*"; } /*else { System.out.println("KEYError:Unknown distance key in pSet: torsion" + code + ";" + id1 + ";" + id2 + ";" + id3 + ";" + id4 + " take default torsion angle:" + DEFAULT_TORSION_ANGLES); return DEFAULT_TORSION_ANGLE; }*/ //logger.debug("dkey = " + dkey); return (List) pSet.get(dkey); } }