charmmTorsion.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: charmmTorsion.h,v 1.20.18.1 2007/03/25 21:23:49 oliver Exp $
00005 //
00006 
00007 // Molecular Mechanics: CHARMM force field, proper torsion component
00008 
00009 #ifndef BALL_MOLMEC_CHARMM_CHARMMTORSION_H
00010 #define BALL_MOLMEC_CHARMM_CHARMMTORSION_H
00011 
00012 #ifndef BALL_COMMON_H
00013 # include <BALL/common.h>
00014 #endif
00015 
00016 #ifndef BALL_MOLMEC_PARAMETER_COSINETORSION_H
00017 # include <BALL/MOLMEC/PARAMETER/cosineTorsion.h>
00018 #endif
00019 
00020 #ifndef BALL_MOLMEC_PARAMETER_RESIDUETORSIONS_H
00021 # include <BALL/MOLMEC/PARAMETER/residueTorsions.h>
00022 #endif
00023 
00024 #ifndef BALL_MOLMEC_COMMON_FORCEFIELDCOMPONENT_H
00025 # include <BALL/MOLMEC/COMMON/forceFieldComponent.h>
00026 #endif
00027 
00028 #ifndef BALL_MOLMEC_COMMON_FORCEFIELD_H
00029 # include <BALL/MOLMEC/COMMON/forceField.h>
00030 #endif
00031 
00032 namespace BALL 
00033 {
00038   class BALL_EXPORT CharmmTorsion 
00039     : public ForceFieldComponent
00040   {
00041     public:
00042 
00044     #define CHARMM_TORSIONS_ENABLED "enable Torsions"
00045 
00049 
00050     struct SingleCharmmTorsion 
00051     {
00052       Atom* atom1;
00053       Atom* atom2;
00054       Atom* atom3;
00055       Atom* atom4;
00056 
00057       float   V;
00058       unsigned char f;
00059       float   phase;
00060 
00061       SingleCharmmTorsion()
00062         : atom1(0),
00063           atom2(0),
00064           atom3(0),
00065           atom4(0),
00066           V(0),
00067           f(0),
00068           phase(0)
00069       {
00070       }
00071 
00072       SingleCharmmTorsion(CosineTorsion::SingleData& t)
00073       {
00074         atom1 = t.atom1;
00075         atom2 = t.atom2;
00076         atom3 = t.atom3;
00077         atom4 = t.atom4;
00078 
00079         V = t.values.V / t.values.n;
00080         f = (unsigned char)t.values.f;
00081 
00082         // convert phase from degrees to radiant
00083         phase = (float)(BALL::Constants::PI / 180.0) * t.values.phase;
00084       }
00085     };
00086 
00088 
00091 
00092     BALL_CREATE(CharmmTorsion)
00093 
00094     
00096     CharmmTorsion();
00097 
00100     CharmmTorsion(ForceField& force_field);
00101 
00104     CharmmTorsion(const CharmmTorsion& charmm_stretch);
00105 
00108     virtual ~CharmmTorsion();
00109 
00111 
00114 
00117     virtual bool setup()
00118       throw(Exception::TooManyErrors);
00119 
00121 
00124 
00127     virtual double updateEnergy();
00128 
00131     virtual void updateForces();
00132 
00134 
00135     private:
00136 
00137     /*_ @name Private Attributes  
00138     */
00139     //_@{
00140 
00141     /*_ Vector containing the parameters for each torsion.
00142     */
00143     vector<SingleCharmmTorsion>   torsion_;
00144 
00145     /*_ Contents of the [Torsions] section of the parameter file.
00146     */
00147     CosineTorsion                 torsion_parameters_;    
00148 
00149     /*_ Contents of the [ResidueTorsions] section of the parameter file.
00150     */
00151     ResidueTorsions               residue_torsions_;
00152 
00153     /*_ true, if the torsions are read from the ResidueTorsions section.
00154     */
00155     bool use_residue_torsion_list_;
00156 
00157     //_@}
00158    
00159   };
00160 } // namespace BALL 
00161 
00162 #endif // BALL_MOLMEC_CHARMM_CHARMMTORSION_H