pren / poltype

POLTYPE: AMOEBA parametrization tool
https://pren.github.io/poltype
Other
4 stars 11 forks source link

Endless Loop #66

Closed nickjbrowning closed 3 years ago

nickjbrowning commented 3 years ago

I followed the installation guide verbatim at https://pren.github.io/poltype/README_HELP.html.

When running it on one of the test examples in the Examples/ folder, in this case methanol, the code gets stuck in an endless loop which seems to be something to do with ParMed interpretting a keyfile.

poltype.ini: structure=methanol.sdf numproc=6 maxmem=16GB maxdisk=20GB

methanol.sdf taken directly from the supplied Examples folder.

--- modulename: codecs, funcname: decode codecs.py(320): data = self.buffer + input codecs.py(321): (result, consumed) = self._buffer_decode(data, self.errors, final) codecs.py(323): self.buffer = data[consumed:] codecs.py(324): return result parameterfile.py(462): while line.lstrip()[:5].lower() != 'bond ': parameterfile.py(463): line = f.readline().replace('\t', ' ') --- modulename: parameterfile, funcname: getattr parameterfile.py(27): return getattr(self._stream, attr) --- modulename: codecs, funcname: getstate codecs.py(332): return (self.buffer, 0) --- modulename: codecs, funcname: decode codecs.py(320): data = self.buffer + input codecs.py(321): (result, consumed) = self._buffer_decode(data, self.errors, final) codecs.py(323): self.buffer = data[consumed:] codecs.py(324): return result parameterfile.py(462): while line.lstrip()[:5].lower() != 'bond ': parameterfile.py(463): line = f.readline().replace('\t', ' ') --- modulename: parameterfile, funcname: getattr parameterfile.py(27): return getattr(self._stream, attr) --- modulename: codecs, funcname: getstate codecs.py(332): return (self.buffer, 0) --- modulename: codecs, funcname: decode codecs.py(320): data = self.buffer + input codecs.py(321): (result, consumed) = self._buffer_decode(data, self.errors, final) codecs.py(323): self.buffer = data[consumed:] codecs.py(324): return result parameterfile.py(462): while line.lstrip()[:5].lower() != 'bond ': parameterfile.py(463): line = f.readline().replace('\t', ' ') --- modulename: parameterfile, funcname: getattr parameterfile.py(27): return getattr(self._stream, attr) --- modulename: codecs, funcname: getstate codecs.py(332): return (self.buffer, 0) --- modulename: codecs, funcname: decode codecs.py(320): data = self.buffer + input codecs.py(321): (result, consumed) = self._buffer_decode(data, self.errors, final) codecs.py(323): self.buffer = data[consumed:] codecs.py(324): return result

misterbrandonwalker commented 3 years ago

Thank you, the people that wrote the parmed parser for AMOEBA parameter files assumed specific orders and that there has to be every kind of paramter type in .prm files also in the key file. They should have instead just parse what is available in key/prm file and dont assume order. I can get it to work for some molecules that contain all of the parameter types in key file by changing the order of parameter types in output keyfile to the order that is assumed, however for some small molecules (for example water) there wont be str-bnd parameter type and then parmed will freak out. This module was to be intended for use with unit testing, we are however in active development phase and making many changes to keyfile output. We will come back to this and come up with a way to trick parmed module into passing molecules that dont have certain parameter types, for example. For now I have turned the parser off.

https://parmed.github.io/ParmEd/html/_modules/parmed/tinker/tinkerfiles.html