charmm.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: charmm.h,v 1.17 2005/12/23 17:01:50 amoll Exp $
00005 //
00006 
00007 // Molecular Mechanics: CHARMM force field class
00008 
00009 #ifndef BALL_MOLMEC_CHARMM_CHARMM_H
00010 #define BALL_MOLMEC_CHARMM_CHARMM_H
00011 
00012 #ifndef BALL_COMMON_H
00013 # include <BALL/common.h>
00014 #endif
00015 
00016 #ifndef BALL_MOLMEC_COMMON_FORCEFIELD_H
00017 # include <BALL/MOLMEC/COMMON/forceField.h>
00018 #endif
00019 
00020 #ifndef BALL_KERNEL_SYSTEM_H
00021 # include <BALL/KERNEL/system.h>
00022 #endif
00023 
00024 
00025 namespace BALL 
00026 {
00031   class BALL_EXPORT CharmmFF 
00032     : public ForceField
00033   {
00034     public:
00035 
00039 
00042     struct BALL_EXPORT Option
00043     {
00048       static const char* FILENAME;
00049 
00052       static const char* NONBONDED_CUTOFF;
00053 
00056       static const char* VDW_CUTOFF;
00057 
00060       static const char* VDW_CUTON;
00061 
00064       static const char* ELECTROSTATIC_CUTOFF;
00065 
00068       static const char* ELECTROSTATIC_CUTON;
00069 
00072       static const char* SOLVATION_CUTOFF;
00073 
00076       static const char* SOLVATION_CUTON;
00077 
00080       static const char* SCALING_VDW_1_4;
00081 
00084       static const char* USE_EEF1;
00085 
00088       static const char* SCALING_ELECTROSTATIC_1_4;
00089 
00092       static const char* DISTANCE_DEPENDENT_DIELECTRIC; 
00093 
00096       static const char* ASSIGN_CHARGES;
00097 
00100       static const char* ASSIGN_TYPENAMES;
00101 
00104       static const char* ASSIGN_TYPES;
00105 
00108       static const char* OVERWRITE_CHARGES;
00109 
00112       static const char* OVERWRITE_TYPENAMES;
00113     };
00114 
00117     struct BALL_EXPORT Default
00118     {
00121       static const char* FILENAME;
00122 
00125       static const float NONBONDED_CUTOFF;
00126 
00129       static const float VDW_CUTOFF;
00130 
00133       static const float VDW_CUTON;
00134 
00137       static const float ELECTROSTATIC_CUTOFF;
00138 
00141       static const float ELECTROSTATIC_CUTON;
00142 
00145       static const float SOLVATION_CUTOFF;
00146 
00149       static const float SOLVATION_CUTON;
00150 
00153       static const float SCALING_ELECTROSTATIC_1_4; 
00154 
00157       static const bool USE_EEF1;
00158 
00161       static const float SCALING_VDW_1_4; 
00162 
00165       static const bool DISTANCE_DEPENDENT_DIELECTRIC; 
00166 
00169       static const bool ASSIGN_CHARGES;
00170 
00173       static const bool ASSIGN_TYPENAMES;
00174 
00177       static const bool ASSIGN_TYPES;
00178 
00181       static const bool OVERWRITE_CHARGES;
00182 
00185       static const bool OVERWRITE_TYPENAMES;
00186     };
00187 
00189 
00192 
00193     BALL_CREATE(CharmmFF)
00194 
00195     
00197     CharmmFF();
00198 
00201     CharmmFF(System& system);
00202 
00205     CharmmFF(System& system, const Options& options);
00206  
00209     CharmmFF(const CharmmFF& force_field);
00210 
00213     virtual ~CharmmFF();
00214 
00216 
00219       
00222     const CharmmFF& operator = (const CharmmFF& force_field)
00223       ;
00224       
00227     virtual void clear()
00228       ;
00229 
00231 
00234 
00237     virtual bool specificSetup()
00238       throw(Exception::TooManyErrors);
00239 
00241 
00244 
00247     double getStretchEnergy() const;
00248 
00251     double getBendEnergy() const;
00252 
00256     double getTorsionEnergy() const;
00257 
00260     double getImproperTorsionEnergy() const;
00261 
00264     double getProperTorsionEnergy() const;
00265 
00269     double getNonbondedEnergy() const;
00270 
00273     double getESEnergy() const;
00274 
00277     double getVdWEnergy() const;
00278 
00281     double getSolvationEnergy() const;
00282 
00285     bool hasInitializedParameters() const;
00286     
00288     virtual String getResults() const
00289       ;
00290 
00292 
00293     protected:
00294       
00295     String  filename_;
00296 
00297     bool    parameters_initialized_;
00298 
00299   };
00300 } // namespace BALL
00301 
00302 #endif // BALL_MOLMEC_CHARMM_CHARMM_H