MMFF94BasedParameterSetReader { public void readParameterSets(IChemObjectBuilder builder) throws Exception { LOG.debug("------ Read MMFF94 ParameterSets ------"); if (ins == null) { ClassLoader loader = this.getClass().getClassLoader(); ins = loader.getResourceAsStream(configFile); } if (ins == null) { throw new IOException("There was a problem getting the default stream: " + configFile); } BufferedReader r = new BufferedReader(new InputStreamReader(ins), 1024); String s; int[] a = {0, 0, 0, 0, 0, 0, 0, 0}; if (insvdW == null) { insvdW = this.getClass().getClassLoader().getResourceAsStream(configFilevdW); } if (insvdW == null) { throw new IOException("There was a problem getting the default stream: " + configFilevdW); } BufferedReader rvdW = new BufferedReader(new InputStreamReader(insvdW), 1024); String svdW; int ntvdW; if (insDFSB == null) { insDFSB = this.getClass().getClassLoader().getResourceAsStream(configFileDFSB); } if (insDFSB == null) { throw new IOException("There was a problem getting the default stream: " + configFileDFSB); } BufferedReader rDFSB = new BufferedReader(new InputStreamReader(insDFSB), 1024); String sDFSB; int ntDFSB; try { while (true) { s = r.readLine(); if (s == null) { break; } st = new StringTokenizer(s, "\t; "); int nt = st.countTokens(); if (s.startsWith("atom") & nt <= 8) { setAtomTypes(builder); a[0]++; } else if (s.startsWith("bond") & nt == 9) { setBond(); a[1]++; } else if (s.startsWith("angle") & nt <= 10) { setAngle(); a[2]++; } else if (s.startsWith("strbnd") & nt == 7) { setStrBnd(); a[3]++; } else if (s.startsWith("torsion") & nt == 11) { setTorsion(); a[4]++; } else if (s.startsWith("opbend") & nt == 6) { setOpBend(); a[5]++; } else if (s.startsWith("data") & nt == 10) { readatmmffvdw: while (true) { svdW = rvdW.readLine(); if (svdW == null) { break; } stvdW = new StringTokenizer(svdW, "\t; "); ntvdW = stvdW.countTokens(); LOG.debug("ntvdW : " + ntvdW); if (svdW.startsWith("vdw") & ntvdW == 9) { st.nextToken(); sid = st.nextToken(); stvdW.nextToken(); sidvdW = stvdW.nextToken(); if (sid.equals(sidvdW)) { setAtomTypeData(); a[6]++; } break readatmmffvdw; } } } } ins.close(); insvdW.close(); } catch (IOException e) { throw new IOException("There was a problem parsing the mmff94 forcefield"); } try { LOG.debug("Parses the Default Stretch-Bend Parameters"); while (true) { sDFSB = rDFSB.readLine(); LOG.debug("sDFSB = " + sDFSB); if (sDFSB == null) { LOG.debug("sDFSB == null, break"); break; } stDFSB = new StringTokenizer(sDFSB, "\t; "); ntDFSB = stDFSB.countTokens(); LOG.debug("ntDFSB : " + ntDFSB); if (sDFSB.startsWith("DFSB") & ntDFSB == 6) { setDefaultStrBnd(); } } insDFSB.close(); LOG.debug("insDFSB closed"); } catch (IOException e) { throw new IOException("There was a problem parsing the Default Stretch-Bend Parameters (mmffdfsb.par)"); } } MMFF94BasedParameterSetReader(); Map<String, Object> getParamterSet(); List<IAtomType> getAtomTypes(); void setInputStream(InputStream ins); void readParameterSets(IChemObjectBuilder builder);  }
@Test public void testreadParameterSets() throws Exception { MMFF94BasedParameterSetReader mmff94bpsr = new MMFF94BasedParameterSetReader(); mmff94bpsr.readParameterSets(DefaultChemObjectBuilder.getInstance()); Map<String, Object> parameterSet = new Hashtable<String, Object>(); parameterSet = mmff94bpsr.getParamterSet(); List<IAtomType> atomtypes = mmff94bpsr.getAtomTypes(); IAtomType atomtype = atomtypes.get(0); String sid = "C"; assertEquals(sid, atomtype.getAtomTypeName()); String rootType = "C"; assertEquals(rootType, atomtype.getSymbol()); String smaxbond = "4"; assertEquals(Integer.parseInt(smaxbond), (int) atomtype.getFormalNeighbourCount()); String satomNr = "6"; assertEquals(Integer.parseInt(satomNr), (int) atomtype.getAtomicNumber()); String sid1 = "C"; String sid2 = "C"; String slen = "1.508"; String sk2 = "306.432"; String sk3 = "-612.865"; String sk4 = "715.009"; String sbci = "0.0000"; String bondkey = "bond" + sid1 + ";" + sid2; List<Double> bonddata = new ArrayList<Double>(); bonddata.add((Double) (new Double(slen).doubleValue())); bonddata.add((Double) (new Double(sk2).doubleValue())); bonddata.add((Double) (new Double(sk3).doubleValue())); bonddata.add((Double) (new Double(sk4).doubleValue())); bonddata.add((Double) (new Double(sbci).doubleValue())); sid1 = "C"; sid2 = "C"; String sid3 = "C"; String value1 = "14.82507"; String value2 = "14.82507"; String strbndkey = "strbnd" + sid1 + ";" + sid2 + ";" + sid3; List<Double> strbnddata = new ArrayList<Double>(); strbnddata.add((Double) (new Double(value1).doubleValue())); strbnddata.add((Double) (new Double(value2).doubleValue())); sid1 = "C="; sid2 = "C"; sid3 = "N"; value1 = "105.837"; value2 = "86.1429"; String value3 = "-34.5494"; String value4 = "0"; String anglekey = "angle" + sid1 + ";" + sid2 + ";" + sid3; List<Double> angledata = new ArrayList<Double>(); angledata.add((Double) (new Double(value1).doubleValue())); angledata.add((Double) (new Double(value2).doubleValue())); angledata.add((Double) (new Double(value3).doubleValue())); angledata.add((Double) (new Double(value4).doubleValue())); sid1 = "HC"; sid2 = "C"; sid3 = "C"; String sid4 = "HC"; value1 = "0.142"; value2 = "0.693"; value3 = "0.157"; value4 = "0.000"; String value5 = "0.000"; String torsionkey = "torsion" + ";" + sid1 + ";" + sid2 + ";" + sid3 + ";" + sid4; List<Double> torsiondata = new ArrayList<Double>(); torsiondata.add((Double) (new Double(value1).doubleValue())); torsiondata.add((Double) (new Double(value2).doubleValue())); torsiondata.add((Double) (new Double(value3).doubleValue())); torsiondata.add((Double) (new Double(value4).doubleValue())); torsiondata.add((Double) (new Double(value5).doubleValue())); sid1 = "O="; sid2 = "C="; sid3 = "CR4R"; sid4 = "CR4R"; value1 = "10.86681780"; String opbendkey = "opbend" + ";" + sid1 + ";" + sid2 + ";" + sid3 + ";" + sid4; List<Double> opbenddata = new ArrayList<Double>(); opbenddata.add((Double) (new Double(value1).doubleValue())); for (Entry<String, Object> e : parameterSet.entrySet()) { if (e.getKey().equals(bondkey)) assertEquals(bonddata, e.getValue()); else if (e.getKey().equals(strbndkey)) assertEquals(strbnddata, e.getValue()); else if (e.getKey().equals(anglekey)) assertEquals(angledata, e.getValue()); else if (e.getKey().equals(torsionkey)) assertEquals(torsiondata, e.getValue()); else if (e.getKey().equals(opbendkey)) assertEquals(opbenddata, e.getValue()); } }