00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: pairExpInteractionEnergyProcessor.h,v 1.20 2005/12/23 17:02:00 amoll Exp $ 00005 // 00006 00007 #ifndef BALL_SOLVATION_PAIREXPINTERACTIONENERGYPROCESSOR_H 00008 #define BALL_SOLVATION_PAIREXPINTERACTIONENERGYPROCESSOR_H 00009 00010 #ifndef BALL_COMMON_H 00011 # include <BALL/common.h> 00012 #endif 00013 00014 #ifndef BALL_DATATYPE_OPTIONS_H 00015 # include <BALL/DATATYPE/options.h> 00016 #endif 00017 00018 #ifndef BALL_KERNEL_ATOM_H 00019 # include <BALL/KERNEL/atom.h> 00020 #endif 00021 00022 #ifndef BALL_MATHS_SURFACE_H 00023 # include <BALL/MATHS/surface.h> 00024 #endif 00025 00026 #ifndef BALL_ENERGY_ENERGYPROCESSOR_H 00027 # include <BALL/ENERGY/energyProcessor.h> 00028 #endif 00029 00030 #ifndef BALL_STRUCTURE_RDFPARAMETER_H 00031 # include <BALL/STRUCTURE/RDFParameter.h> 00032 #endif 00033 00034 #ifndef BALL_SOLVATION_PAIREXPRDFINTEGRATOR_H 00035 # include <BALL/SOLVATION/pairExpRDFIntegrator.h> 00036 #endif 00037 00038 #ifndef BALL_SOLVATION_SOLVENTDESCRIPTOR_H 00039 # include <BALL/SOLVATION/solventDescriptor.h> 00040 #endif 00041 00042 // ?????: The constants alpha, C1 and C2 i.e. the K_ij have to be 00043 // embedded in a senseful way. 00044 00045 namespace BALL 00046 { 00054 class BALL_EXPORT PairExpInteractionEnergyProcessor 00055 : public EnergyProcessor 00056 { 00057 00058 public: 00059 00060 BALL_CREATE(PairExpInteractionEnergyProcessor) 00061 00062 // ?????: Doku. 00063 enum SurfaceType 00064 { 00066 SURFACE__UNKNOWN = 0, 00068 SURFACE__SAS = 1, 00070 SURFACE__SES = 2, 00072 SURFACE__EXTERNAL = 3 00073 }; 00074 00079 struct BALL_EXPORT Option 00080 { 00081 00087 static const char* VERBOSITY; 00088 00097 static const char* ALPHA; 00098 static const char* C1; 00099 static const char* C2; 00100 00101 static const char* CLAVERIE_FILENAME; 00102 00109 static const char* USE_RDF; 00110 00117 static const char* RDF_FILENAME; 00118 00125 static const char* SOLVENT_FILENAME; 00126 00131 static const char* SURFACE_TYPE; 00132 00137 static const char* SURFACE_FILENAME; 00138 00139 }; 00140 00145 struct BALL_EXPORT Default 00146 { 00150 static const Size VERBOSITY; 00151 00157 static const double ALPHA; 00158 static const double C1; 00159 static const double C2; 00160 00161 static const char* CLAVERIE_FILENAME; 00162 00168 static const bool USE_RDF; 00169 static const char* RDF_FILENAME; 00170 static const char* SOLVENT_FILENAME; 00171 00175 static const Size SURFACE_TYPE; 00176 00180 static const char* SURFACE_FILENAME; 00181 00182 }; 00183 00187 00190 PairExpInteractionEnergyProcessor(); 00191 00194 PairExpInteractionEnergyProcessor(const 00195 PairExpInteractionEnergyProcessor& proc); 00196 00199 virtual ~PairExpInteractionEnergyProcessor(); 00200 00202 00205 00208 const PairExpInteractionEnergyProcessor& operator = 00209 (const PairExpInteractionEnergyProcessor& proc); 00210 00213 virtual void clear(); 00214 00216 00219 00222 virtual bool finish(); 00223 00225 00228 00231 Options options; 00232 00234 00235 protected: 00236 00237 /*_ Alpha constant from the Kitaygorodski Potential 00238 */ 00239 double alpha_; 00240 00241 /*_ Repulsion constant from the Kitaygorodski Potential 00242 */ 00243 double C1_; 00244 00245 /*_ Dispersion constant from the Kitaygorodski Potential 00246 */ 00247 double C2_; 00248 00249 /*_ The solvent description 00250 */ 00251 SolventDescriptor solvent_; 00252 00253 /*_ The helper class for reading rdf descriptions from an INIFile 00254 */ 00255 RDFParameter rdf_parameter_; 00256 00257 // PairExpRDFIntegrator rdf_integrator_; 00258 00259 00260 private: 00261 00262 void computeClaverieParameters(Atom::Type solvent_type, 00263 Atom::Type solute_type, std::pair<float, float>& parameters); 00264 void getExternalSurface_( 00265 std::vector< std::pair<Vector3, Surface> >& surface_map, 00266 const char* surface_file); 00267 00268 }; 00269 00270 } // namespace BALL 00271 00272 #endif // BALL_SOLVATION_PAIREXPINTERACTIONENERGYPROCESSOR_H