
                       MACROMOLECULAR CLASS LIBRARY
              Copyright (C) The Trustees of Columbia University, 1993

     General Description:

     A total of 70 object classes have been developed and included in the 
     object-oriented PDB class library.  These classes are use to convert, 
     organize and manipulate Protein Data Bank (PDB) information in an 
     object-oriented representation.  The classes are organized into four 
     categories: 

     (i)  Classes (e.g. PdbFile, LineBuffer) that covert a PDB file into 
	  objects.
     (ii) Classes (e.q. atom, subentity, compound) that store protein 
          structural information in terms of objects. 
     (iii)Classes (i.e iterators and filters) that facilitate
          the navigation through the object-oriented structure. 
     (iv) Classes (i.e.Intr-classes) that enhance the extensibility of 
          this object library.  

     A text file, "Connect", was used to store subentities' connectivity
     information and generate connectivity objects at run time.


     Class Interface Description:

     In general, the interface of an object in the class library is the methods
     and features that are declared in the public portion of its definition.
     Most of these methods and features are self-explanatory.  For example, the
     phi_angle() method returns the phi angle calculated for a specific amino
     acid residue.  Interfaces that are of particular importance to users are
     as follows:

     PdbFile class:

          PdbFile(char* filename)  To initialize a PdbFile object with a PDB
                                   file named "Filename".
          import()                 Convert the contents of the PDB file into
                                   an object-oriented structure.


     Atom Class:

     The following group of atom methods have a similar operation in that they
     return the corresponding value (e.q. coordinates, temperature factor) of
     the "i"th alternative atom.  When i is greater than the number of
     alternative atoms (i.e. num_alt_position) found in the PDB file, the
     corresponding value of the "0"th alternative atom is returned.  This is
     equivalent to invoking these methods without an argument.  
      
          d_x(int i)               x coordinates.
          d_y(int i)               y coordinates.
          d_z(int i)               z coordinates. 
          d_x_p(int i)             pointer to the x coordinates.
          d_y_p(int i)             pointer to the y coordinates.
          d_z_p(int i)             pointer to the z coordinates.
          d_temperature(int i)     temperature factor.
          nth_alt_atom(int i)      pointer to alternative atom.

     The next group of methods return pointers to other objects to represent 
     relationships.

          myCompound(), myEntity(), mySubentity()...

     Other important atom methods are as follow:

          is_missing_atom()        It returns "1" when the target atom is
                                   missing from the PDB file.
          bound_atoms()            Returns a list of atoms that are bound and
                                   later in the sequence assumed in the
                                   "Connect" file to the target atom.


     SubEntity Class:


          atom_to_previous_        Returns pointers to the atoms that are bound
          subentity()              to other subentities in the conjunctive
          atom_to_next_subentity() residue sequence.
          find_atom(char* d_name)  Returns the pointer to the atom named
                                   "d_name".  Valid atom names associated with
                                   individual subentities are listed in the
                                   "connect" file.
          is_missing_subentity()   Returns "1" when the target subentity is
                                   missing from the PDB file.
          myType()                 Returns the type of the target subentity.
                                   Valid subentity types are defined in the
                                   enum type SubEntityType.



     Compound Class:

          ramachandran_quality()   Returns the percentage of amino acid 
                                   residues who's phi/psi combination falls 
                                   in the allowable regions.
          omega_angles()           Returns a sorted list of omega angles and
                                   their associated subentities.
          delta_omegas()           Similar to the previous method except that
                                   the values are the angle of deviation from
                                   180 degree.


     Secondary Structure Classes:

     Most of the secondary structural classes such as SecondaryStruc, Turn and
     Helix are still under development.

     Iterator and Filter Classes:

     Please refer to main.c and iterator.h for proper usage of iterators and
     filters.

     Intr and User Classes:

     Most of the classes have been divided into two closely related classes
     named Intr-class and User-class.  For example, the atom class was divided
     into IntrAtom class and Atom class.  The relationship between these two
     types of classes are so close that they actually behave as one.  The 
     Intr-classes will be updated regularly.  User defined methods and features
     should be confined in the User-classes, thus they can be linked to the
     later release of Intr-classes with ease. 

     Suggestions and questions are welcomed. Please contact

     Weider Chang, Ph.D
     Associate Research Scientist
     Columbia University
     Department of Biochemistry and Molecular Biophysics
     Tele: (212) 305-4270 FAX: (212) 305-7970
     E-mail weider@cuhhca.hhmi.columbia.edu 


