00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_MOLMEC_COMMON_PERIODICBOUNDARY_H
00008 #define BALL_MOLMEC_COMMON_PERIODICBOUNDARY_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_MATHS_SIMPLEBOX3_H
00019 # include <BALL/MATHS/simpleBox3.h>
00020 #endif
00021
00022 namespace BALL
00023 {
00024 class ForceField;
00025
00026 class PeriodicBoundary;
00027
00034 class BALL_EXPORT PeriodicBoundary
00035 {
00036 public:
00037
00038 BALL_CREATE(PeriodicBoundary)
00039
00040
00043
00044
00045 typedef std::pair<Size, Size> AtomIndexPair;
00046
00048 typedef std::vector<AtomIndexPair> AtomIndexArray;
00049
00051
00054
00056 struct BALL_EXPORT Option
00057 {
00059 static const char* PERIODIC_BOX_LOWER;
00060
00062 static const char* PERIODIC_BOX_UPPER;
00063
00065 static const char* PERIODIC_BOX_ENABLED;
00066
00068 static const char* PERIODIC_BOX_DISTANCE;
00069
00071 static const char* PERIODIC_BOX_ADD_SOLVENT;
00072
00077 static const char* PERIODIC_BOX_SOLVENT_FILE;
00078
00081 static const char* PERIODIC_BOX_SOLVENT_SOLUTE_DISTANCE;
00082
00085 static const char* PERIODIC_WATER_FILE;
00086
00087 };
00088
00090 struct BALL_EXPORT Default
00091 {
00093 static const Vector3 PERIODIC_BOX_LOWER;
00094
00096 static const Vector3 PERIODIC_BOX_UPPER;
00097
00099 static const bool PERIODIC_BOX_ENABLED;
00100
00102 static const float PERIODIC_BOX_DISTANCE;
00103
00105 static const bool PERIODIC_BOX_ADD_SOLVENT;
00106
00111 static const char* PERIODIC_BOX_SOLVENT_FILE;
00112
00114 static const float PERIODIC_BOX_SOLVENT_SOLUTE_DISTANCE;
00115
00117 static const char* PERIODIC_WATER_FILE;
00118 };
00119
00121
00124
00127 PeriodicBoundary();
00128
00131 PeriodicBoundary(const ForceField& force_field);
00132
00135 PeriodicBoundary(const PeriodicBoundary& periodic_boundary);
00136
00139 virtual ~PeriodicBoundary();
00140
00142
00145
00148 PeriodicBoundary& operator = (const PeriodicBoundary& periodic_boundary);
00149
00152 virtual void clear()
00153 ;
00154
00156
00159
00162 bool setup();
00163
00166 Size generateMoleculesVector();
00167
00169
00172
00174 void enable();
00175
00177 void disable();
00178
00181 SimpleBox3 getBox() const;
00182
00187 void setBox(const SimpleBox3& box);
00188
00201 Size addSolvent(const String& filename) const;
00202
00209 Size removeSolvent() const;
00210
00212
00215
00220 bool isEnabled() const;
00221
00223
00226
00231 void updateMolecules();
00232
00234
00237
00242 Options* options;
00243
00245
00246 protected:
00247
00248 private:
00249
00250
00251
00252
00253
00254
00255 ForceField* force_field_;
00256
00257
00258 bool enabled_;
00259
00260
00261 SimpleBox3 box_;
00262
00263
00264 AtomIndexArray molecules_;
00265
00266
00267
00268 };
00269
00270 }
00271
00272 #endif // BALL_MOLMEC_COMMON_PERIODICBOUNDARY_H