On Friday 29 August 2003 18:50, Miguel wrote:
> I am trying to work on the adapter to map the cdk class hierarchy to the
> Jmol view of the world.
>
> Some of us discussed this briefly the other day on #cdk irc. However, I
> have now spent some time on it and I am (once again :) confused and
> frustrated.

My apologies for the lack of documentation.

> The Jmol picture of the world is pretty simple.
>  A clientFile contains one or more frames
>  A frame contains one or more atoms/bonds/vectors/crystal cells
>
> Someone needs to help me map this over to the cdk world. There are simply
> too many layers for me to figure it out.

It is fo many of us... even to Christoph and I...

> This class hierarchy seems very complicated to me. I only want to ask a
> few (seemingly simple) questions:
>  - How many frames are in your file?
> For each frame:
>  - How many atoms do you have?
>    (the client can answer '0' if it doesn't want to figure it out)
>  - Iterate over all the atoms
>  - Iterate over all the bonds
>    (if you have any)
>  - Iterate over all the vectors
>    (if you have any)
>  - Iterate over all the lines which make up your crystal cell
>    (if you have any)

I'll get back to this...

> I assume that a jmol.clientFile is a cdk.ChemFile. However, this may not
> be correct. Please confirm.

Here is an overview of the classes, with some explanation to what I think they 
are...

A ChemFile is a container that should be able to contain a complete chemical
document, one of any sort... This might not be feasible at all, but it's just 
a starting point, and given its flexibility it might just work... 

A ChemFile contains one or more ChemSequence's. A ChemSequence is a set of
chemical entities that home some relation ship... it may be a plain set of 
models, or an animation. A set of molecules might be presented as a 
SetOfMolecules too, btw.

Each sequence contains zero or more ChemModel, and each ChemModel holds
an instance of chemical space: a set of atoms, bonds, lattice vectors etc...

A ChemModel then contains chemistry... either a SetOfMolecules, which should
actually be a SetOfAtomContainers... this is to provide an option of splitting 
up things in space... into molecules is used, but don't directly see any 
other use for this... It can also contains a SetOfReactions and a Crystal. 
When more than just one of those three is given, the behaviour is not really 
specified, but I think it should all be taken into account...

> Does a ChemSequence correspond to a single "frame" of an animation?

An animation.

> If so, then a ChemSequence would map to a single 'frame' in the Jmol
> world. That is, the atoms which get rendered to the screen at one time
> are:
> - all the Atoms
> -- in all the Molecules
> --- in the SetOfMolecules
> ---- in all the ChemModels
> ----- contained in the specified ChemSequence
> ------ contained in the ChemFile

Getting back to the iterators... There are helper classes that help you 
retrieve information from this tree... these are called manipulators, and 
could best be used in the Iterators... The most straightforward method in the 
*Manipulators (cdk.tools) classes, is the getAllInOneContainer() methods...
They create a new container containing all the atoms and bonds in the 
object... e.g. if Jmol is using the ChemModel for one frame, then it could 
retrieve all Atoms as follows:

ChemModel frame1;
Atom[] allAtoms = 
ChemModelManipulator.getAllInOneContainer(frame1).getAtoms();

> Now a Crystal is not a Molecule. Therefore, it cannot be contained in a
> SetOfMolecules. Therefore, it must be handled differently. But it seems
> that there is only one Crystal in a ChemModel, so I suppose that
> simplifies things somewhat down the crystal branch.

>  - How many frames are in your file?

(The actual syntax might be slightly off... doing this without having API 
besides me...)

ChemFile jmolDocument;
if (jmolDocument.getChemSequenceCount() > 0) {
        int frameCount = jmolDocument.getChemSequence(0).getChemModelCount();
} else {
        int frameCount = 0;
}

>  - How many atoms do you have?
>    (the client can answer '0' if it doesn't want to figure it out)

int atomCount = 
ChemFileManipulator.getAllInOneContainer(jmolDocument).getAtomCount();

>  - Iterate over all the atoms

Atom[] atoms = 
ChemFileManipulator.getAllInOneContainer(jmolDocument).getAtoms();
for (int i=0; i<atoms.length; i++) {
}

>  - Iterate over all the bonds

Bond[] bonds = 
ChemFileManipulator.getAllInOneContainer(jmolDocument).getBonds();
for (int i=0; i<bonds.length; i++) {
}

>  - Iterate over all the vectors
>    (if you have any)

Unspecified in CDK... we should probably discuss this in more depth...

>  - Iterate over all the lines which make up your crystal cell
>    (if you have any)

Yes, that is more straight forward... it should look something like (excluding
tests for nullness):

Crystal crystal = 
jmolDocument.getChemSequence(0).getChemModel(0).getCrystal();
double[] vectorForAAxis = crystal.getA();
double[] vectorForBAxis = crystal.getB();
double[] vectorForCAxis = crystal.getC();

The Crystal class currently has no fields for its dimensions in terms of unit 
cells... I've planned to extend it for this purpose and will do this next 
week...The Iterator will take care of using this information in iterating 
over all Atoms that need to be displayed... And the Iterator will also take 
care of displaying the atoms in several ways: 1) the original atoms, 2) all 
atoms within the unit cell box.

Ok, hope this helps for now...

Egon

-- 
PhD Molecular Representation in Chemometrics
Dept. Analytical Chemistry
http://www-cac.sci.kun.nl/people/egonw.html


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Jmol-developers mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jmol-developers

Reply via email to