Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

Program Structure

HARLEM has an object-oriented design and is mostly written in C++ language. We target the programs for the computers running Windows and UNIX operating systems. During the last ten years the C++ standard stabilized and good compilers appear for all popular computer platforms. A lot of useful mathematical software exist which is written 116 in FORTRAN, also a FORTRAN function being compiled will typically run faster than an analagous C or C++ function. Typically basic mathematical data transformations such as matrix multiplication or diagonalization is done within the program by FORTRAN functions, encapsulated into a C++ member function of an appropriate class (for example matrix class). The central class in HARLEM is the HaMolSet class (see Figure ?? which is an abstraction of a set of molecules. There can be several instances of HaMolSet classes in a running instantance of the program (HarlemApp class) (for example a molecular system under study and its fragments or several unrelated molecular systems). Molecular sets (instances of HaMolSet class) can be dynamically created and destroyed (for example when one performs a subdivision of the molecular system under study into molecular fragments). HaMolSet class maintains as a list of pointers to fragments, which are also the instances of HaMolSet class. Molecular set (HaMolSet class) contain several molecules (vector of pointers to instances of HaMolecule class). Molecules can be independently created (for example being loaded from the molecular coordinate file) or manipulated (for example rotated and translated in 3D space). HaMolecule class contain lists of atoms(Instances of HaAtom class), covalent bonds(Instances of HaBond class) and hydrogen bonds( instances of HaHBond class). In the HaMolecule class atoms are organized into residues (instances of HaResidue class corresponding for example to aminoacids in proteins), which in turn belong to chains (instances of HaChain class). HaMolecule class also maintains the list of chemical groups corresponging to chem- ical functional groups such as peptide groups of methyl groups (instances of HaChemGroup class), which provides an alternative classification of atoms in the molecule. HARLEM makes extensive use of STL (Standard Template Library of C++). Thus col- lections of the items usually represented by some STL data structure, like list, vector, set, map or others. Cycles through the collections of the objects such as a set of atoms in the molecule is done through the standard incrementation of the iterators of the corresponding STL containers or with the help of simple utility member functions such as GetFirstAtom() and GetNextAtom() which manipulate these iterators. HaMolSet class has member functions which read and write atom coordinates, list of bonds and other molecular info in the internal format of HARLEM (denoted by the extention 117 "*.hlm") or in some standard molecular description formats such as PDB (Protein Data Bank) format. HaMolSet provides a basic description of the molecular system under study and is assumed to be "conservative" so changes in the interface of the class as provided by access member functions will change only infrequently, so other program modules which use the HaMolSet will not need to be updated accordingly too often. Useful simulation work in HARLEM is done in computational modules which are realized as classes inherited from HaCompMod base class. HaMolSet class maintains a list of pointers of instances of HaCompMod class associated with a given molecular set. There are currently 5 types of the computational modules in HARLEM:

1. HaQCMod - class which setup quantum chemical model of the system such as basis set, electronic wave function type etc. 2. ETCoupl - class which responsible for donor/acceptor electronic coupling calculation. 3. HaGaussian - class which manages interaction with GAUSSIAN quantum chemical pack- age. 4. HaDalton - class to setup quantum chemical calculations through the DALTON quantum chemical program. 5. ElectrostMod - class to the numerical solution of 3D Poisson-Boltzmann. 6. HaInterMolMod - class to compute intermolecular interaction energy and perform dockin simulations including computations of bimolecular ET rates 7. HaMolMechMod - class to perform molecular mechanics calculations ( uses AMBER as an external program) 8. HaScatterMod - class to simulate electronic scattering experiments 9. StmMod - class to simulate STM (Scanning Tunneling Microscopy) experiments 10. NuclAcidMod - Nucleic Acid modeling module

The computational modules are created and desroyed dynamically whenever they needed. Every Computational Module recieves a pointer to the parent instance of HaMolSet class. Thus molecular geometry and structural informations became immidiately available for a created computational module. Computational modules can easily create other modules and access information in them through the member function GetCompModule() of the HaMolSet class. For example when a user initially load a geometry of an electron transfer system no computational modules exist. When the user start to define donor and acceptor and perform PATHWAYS calculations, an instance of ETCoupl class (donor/acceptor cou- pling module) is created. When the user start to setup Devide-and-Conquer calculation the instance of HaQCMod class with associated data structures is created. Such a modular organization permits an easy extension of the program functionality probably by differ- ent developers working simulatneously but independently of each other. Thus HARLEM provides a convinient environment for a creation of molecular simulation software.


Generated on Tue Feb 17 02:03:24 2004 for harlem by doxygen 1.3.6