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
00155
00158
00161 bool setup();
00162
00165 Size generateMoleculesVector();
00166
00168
00171
00173 void enable();
00174
00176 void disable();
00177
00180 SimpleBox3 getBox() const;
00181
00186 void setBox(const SimpleBox3& box);
00187
00204 Size addSolvent(const String& filename);
00205
00212 Size removeSolvent();
00213
00215
00218
00223 bool isEnabled() const;
00224
00226
00229
00234 void updateMolecules();
00235
00237
00240
00245 Options* options;
00246
00248
00249 protected:
00250
00251 private:
00252
00253
00254
00255
00256
00257
00258 ForceField* force_field_;
00259
00260
00261 bool enabled_;
00262
00263
00264 SimpleBox3 box_;
00265
00266
00267 AtomIndexArray molecules_;
00268
00269
00270
00271 };
00272
00273 }
00274
00275 #endif // BALL_MOLMEC_COMMON_PERIODICBOUNDARY_H