00001 // $Id: CHPI.h,v 1.2.10.1 2007/08/07 16:16:15 bertsch Exp $ 00002 // Molecular Mechanics: SLICK force field, CH---pi interaction 00003 00004 #ifndef BALL_SCORING_COMPONENTS_CHPI_H 00005 #define BALL_SCORING_COMPONENTS_CHPI_H 00006 00007 #include <BALL/SCORING/COMMON/scoringComponent.h> 00008 #include <BALL/SCORING/COMMON/scoringFunction.h> 00009 #include <BALL/DATATYPE/options.h> 00010 00011 namespace BALL 00012 { 00013 00018 class CHPI 00019 : public ScoringComponent 00020 { 00021 public: 00022 00025 class AromaticRing 00026 { 00027 public: 00028 00030 AromaticRing() 00031 ; 00032 00034 AromaticRing(const AromaticRing& aromatic_ring) 00035 ; 00036 00038 AromaticRing(const std::vector<Atom*>& atoms) 00039 ; 00040 00042 const Vector3& getCentre() const 00043 ; 00044 00046 const Vector3& getNormalVector() const 00047 ; 00048 00050 void setRing(const std::vector<Atom*>& atoms) 00051 ; 00052 00053 // accessors for the private data members 00054 const std::vector<Atom*>& getRing() const 00055 ; 00056 00058 void dump(std::ostream& s = std::cout) const 00059 ; 00060 00061 private: 00062 00063 //_ A hash set containing pointers to all ring atoms: 00064 std::vector<Atom*> ring_atoms_; 00065 00066 //_ The centre of the aromatic ring. 00067 Vector3 centre_; 00068 00069 //_ The normal vector of the ring plane. 00070 Vector3 normal_vector_; 00071 00072 //_ 00073 void computeCentre_() 00074 ; 00075 00076 //_ 00077 void computeNormalVector_() 00078 ; 00079 00080 }; 00081 00082 00085 class CHGroup 00086 { 00087 public: 00088 00090 CHGroup() 00091 ; 00092 00094 ~CHGroup() 00095 ; 00096 00098 CHGroup(const CHGroup& CH_groups) 00099 ; 00100 00102 CHGroup (const Atom* C_atom, const Atom* H_atom) 00103 ; 00104 00106 void setCAtom(const Atom* C_atom) 00107 ; 00108 00110 void setHAtom(const Atom* H_atom) 00111 ; 00112 00114 void setAtoms(const Atom* C_atom, const Atom* H_atom) 00115 ; 00116 00118 const Atom* getHAtom() const 00119 00120 { 00121 return(H_atom_); 00122 } 00123 00125 const Atom* getCAtom() const 00126 00127 { 00128 return(C_atom_); 00129 } 00130 00131 void dump(std::ostream& s = std::cout) const 00132 ; 00133 00134 private : 00135 00136 //_ 00137 const Atom* H_atom_; 00138 00139 //_ 00140 const Atom* C_atom_; 00141 00142 }; 00143 00144 00145 struct Option 00146 { 00147 00149 static const String VERBOSITY; 00150 00152 static const String CX_DISTANCE_UPPER; 00153 00155 static const String CHX_ANGLE_LOWER; 00156 00158 static const String HX_PROJECTED_DISTANCE_LOWER; 00159 00161 static const String HX_PROJECTED_DISTANCE_UPPER; 00162 00164 static const String DISTANCE_TOLERANCE; 00165 00167 static const String ANGLE_TOLERANCE; 00168 00170 static const String LIMIT; 00171 00173 static const String CREATE_INTERACTION_FILE; 00174 00175 }; 00176 00177 00178 struct Default 00179 { 00180 00182 static const Size VERBOSITY; 00183 00185 static const float CX_DISTANCE_UPPER; 00186 00188 static const float CHX_ANGLE_LOWER; 00189 00191 static const float HX_PROJECTED_DISTANCE_LOWER; 00192 00194 static const float HX_PROJECTED_DISTANCE_UPPER; 00195 00197 static const float DISTANCE_TOLERANCE; 00198 00200 static const float ANGLE_TOLERANCE; 00201 00203 static const float LIMIT; 00204 00206 static const bool CREATE_INTERACTION_FILE; 00207 00208 }; 00209 00210 00214 00217 CHPI() 00218 ; 00219 00222 CHPI(ScoringFunction& sf) 00223 ; 00224 00227 CHPI(const CHPI& chpi) 00228 ; 00229 00232 virtual ~CHPI() 00233 ; 00234 00236 00239 00242 const CHPI& operator = (const CHPI& chpi) 00243 ; 00244 00247 virtual void clear() 00248 ; 00249 00251 00254 00255 bool operator == (const CHPI& chpi) const 00256 ; 00257 00259 00262 00265 virtual bool setup() 00266 ; 00267 00268 virtual double calculateScore() 00269 ; 00270 00272 Options options; 00273 00274 private: 00275 00276 //_ A vector containing all possible interactions between aliphatic 00277 //_ C-H groups in the sugar and aromatic rings in the receptor. 00278 std::vector< std::pair<const AromaticRing*, const CHGroup*> > possible_interactions_; 00279 00280 //_ A vector containing all aliphatic C-H groups of the ligand. 00281 std::vector<CHGroup> all_CH_groups_; 00282 00283 //_ A vector containing all aromatic rings of the receptor. 00284 std::vector<AromaticRing> all_aromatic_rings_; 00285 00286 //_ 00287 float CX_distance_upper_; 00288 00289 //_ 00290 float CHX_angle_lower_; 00291 00292 //_ 00293 float HX_projected_distance_lower_; 00294 00295 //_ 00296 float HX_projected_distance_upper_; 00297 00298 //_ The tolerance area for creating scores instead of simply counted 00299 //_ interactions. 00300 float distance_tolerance_; 00301 float angle_tolerance_; 00302 00303 //_ A limit for ignoring interactions that have only very small 00304 //_ scores 00305 float limit_; 00306 00307 //_ Verbosity of the code 00308 Size verbosity_; 00309 00310 //_ Flag for writing HIN file containing pseudomolecules for the CHPI 00311 //_ interactions found in the system 00312 bool write_interactions_file_; 00313 00314 }; 00315 00316 00317 00318 } // namespace BALL 00319 00320 #endif // BALL_SCORING_COMPONENTS_CHPI_H