pairExpInteractionEnergyProcessor.h

Go to the documentation of this file.
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