From: Michael B. <mb...@gm...> - 2003-09-22 23:04:41
|
On Sun, Sep 21, 2003 at 09:31:43PM -0500, Geoff Hutchison wrote: > I'm not sure the best and most general way to handle this, since you > don't know you have a mult-molecule file until you get into it. One > easy solution is to change all of the ReadFormat() and WriteFormat() > codes to take OBMolVector() objects instead of OBMol() objects. I thought about this problem a bit over the last weeks. I didn't come up with a clear design yet, mostly because I shouldn't think about it in the first place and rather concentrate on my studies :) Just some random thoughts: * A couple of classes could be derived from OBMolVector for each possible (and chemically different) list of molecules. It includes an OBMolVector plus additional specific information. OBConformer, OBGeomOptStep, OBMoleculeList, OBReaction{Reactants,Products} come to mind. * Especially for reactions, have a OBReaction class which includes the two vectors OBReactionReactants and OBReactionProducts, plus possible information like reaction conditions, catalysts, whether it's an reaction equilibrium etc. * File formats should be able to declare whether they are able to read/write multiple conformers, geometry optimization steps or whether they are able to handle reactions. (This goes a bit into the "Let each file format be a class of its own, with their own attributes and methods (i.e. read/writing molecules) implementation" direction) * One superclass should be taken by the read/write routines. This superclass includes the above MolVectors. The routines then decide which part of the information they are able to handle and will write. * Alternatively, we could split up the read/write routines to really just write one molecule at a time, while the header (and possible glue stuff and footer) will be written by a helper routine. Of course, this is quite different from the way it works right now, but perhaps basis for discussion. Also, as I said above, this is not thought out very well, just random thinking. Michael |