/usr/include/BALL/MOLMEC/COMMON/periodicBoundary.h is in libball1.4-dev 1.4.3~beta1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | // -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
// $Id: periodicBoundary.h,v 1.22 2005/12/23 17:01:51 amoll Exp $
//
#ifndef BALL_MOLMEC_COMMON_PERIODICBOUNDARY_H
#define BALL_MOLMEC_COMMON_PERIODICBOUNDARY_H
#ifndef BALL_COMMON_H
# include <BALL/common.h>
#endif
#ifndef BALL_DATATYPE_OPTIONS_H
# include <BALL/DATATYPE/options.h>
#endif
#ifndef BALL_MATHS_SIMPLEBOX3_H
# include <BALL/MATHS/simpleBox3.h>
#endif
namespace BALL
{
class ForceField;
class PeriodicBoundary;
/** Periodic boundary class for force field simulations.
Molecular Mechanics: class representing periodic boundary conditions.
\par
\ingroup MolmecCommon
*/
class BALL_EXPORT PeriodicBoundary
{
public:
BALL_CREATE(PeriodicBoundary)
/** @name Type definitions
*/
//@{
///
typedef std::pair<Size, Size> AtomIndexPair;
///
typedef std::vector<AtomIndexPair> AtomIndexArray;
//@}
/** @name Constants used as option keys
*/
//@{
///
struct BALL_EXPORT Option
{
/// Vector containing the lower corner of the box
static const char* PERIODIC_BOX_LOWER;
/// Vector containing the upper corner of the box
static const char* PERIODIC_BOX_UPPER;
/// Bool that indicates whether periodic boundary is enabled or not
static const char* PERIODIC_BOX_ENABLED;
/// Minimum distance between solute molecules and the box in Angstrom
static const char* PERIODIC_BOX_DISTANCE;
/// Flag to initiate the addition of solvent to the box
static const char* PERIODIC_BOX_ADD_SOLVENT;
/** Name of the file containing the solvent.
This file should contain an equilibrated box of the solvent
in the HyperChem format.
*/
static const char* PERIODIC_BOX_SOLVENT_FILE;
/** Minimum distance between solvent and solute for added solvent.
*/
static const char* PERIODIC_BOX_SOLVENT_SOLUTE_DISTANCE;
/** Filename for the default solvent.
*/
static const char* PERIODIC_WATER_FILE;
};
/// Default values
struct BALL_EXPORT Default
{
/// Default vector for the lower corner of the box
static const Vector3 PERIODIC_BOX_LOWER;
/// Default vector for the upper corner of the box
static const Vector3 PERIODIC_BOX_UPPER;
/// Default bool value for periodic boundary (enabled or not)
static const bool PERIODIC_BOX_ENABLED;
/// Default minimum distance between solute molecules and the box in Angstrom
static const float PERIODIC_BOX_DISTANCE;
/// Default value of the flag to initiate the addition of solvent to the box
static const bool PERIODIC_BOX_ADD_SOLVENT;
/** Default file for adding solvent molecules into the box.
This file should contain an equilibrated box of the solvent
in the HyperChem format.
*/
static const char* PERIODIC_BOX_SOLVENT_FILE;
/// Default minimum distance between solvent and solute for added solvent.
static const float PERIODIC_BOX_SOLVENT_SOLUTE_DISTANCE;
/// Default file for default solvent.
static const char* PERIODIC_WATER_FILE;
};
//@}
/** @name Constructors and Destructors
*/
//@{
/** Default constructor.
*/
PeriodicBoundary();
/** Constructor.
*/
PeriodicBoundary(const ForceField& force_field);
/** Copy constructor
*/
PeriodicBoundary(const PeriodicBoundary& periodic_boundary);
/** Destructor.
*/
virtual ~PeriodicBoundary();
//@}
/** @name Assignment
*/
//@{
/** Assignment operator.
*/
PeriodicBoundary& operator = (const PeriodicBoundary& periodic_boundary);
/** Clear method
*/
virtual void clear();
//@}
/** @name Setup Methods
*/
//@{
/** Sets up the periodic box
*/
bool setup();
/** Generate the vector of molecules of the system
*/
Size generateMoleculesVector();
//@}
/** @name Accessors
*/
//@{
/// Enable periodic boundary conditions
void enable();
/// Disable periodic boundary conditions
void disable();
/** Retrieve the box dimensions.
*/
SimpleBox3 getBox() const;
/** Set the box dimensions.
The box dimensions are additionally stored in options
using keys \link lower lower \endlink and \link upper upper \endlink .
*/
void setBox(const SimpleBox3& box);
/** Fill the defined box with a solvent.
This method fills the defined box with solvent molecules.
If no box is defined, no solvent is added. The neccessary
solvent box template is either taken from the options (solvent_file)
or a default is assumed. \par
This method replicates the solvent box starting at the box origin in
all three dimensions and removes all solvent molecules that are within
\link solvent_distance solvent_distance \endlink of a solute molecule
or outside the periodic box. \par
To ensure periodicity, our SimpleBox instance might be resized to an integral
multiple of the spacing of the periodic solvent box.
The method returns the number of inserted solvent molecules. All solvent
molecules are marked as such by setting their property
\link Molecule::PROPERTY__PERIODIC_BOX_SOLVENT Molecule::PROPERTY__PERIODIC_BOX_SOLVENT \endlink . \par
@see removeSolvent
*/
Size addSolvent(const String& filename);
/** Removes all solvent molecules
This method removes all molecules that have the property \link Molecule::PROPERTY__PERIODIC_BOX_SOLVENT Molecule::PROPERTY__PERIODIC_BOX_SOLVENT \endlink
set from the force field's system.
The number of removed solvent molecules is returned.
@see addSolvent
*/
Size removeSolvent();
//@}
/** @name Predicates
*/
//@{
/** Returns <b>true</b> if the periodic boundary is enabled
@see enable
@see disable
*/
bool isEnabled() const;
//@}
/** @name Periodic boundary methods
*/
//@{
/** Checks which molecules are inside the box.
If the center of mass of a molecule leaves the box,
it is inserted on the other side.
*/
void updateMolecules();
//@}
/** @name Variables
*/
//@{
/** Periodic Boundary options.
This is usually a pointer to the options of the force field the PeriodicBoundary object
is contained in.
*/
Options* options;
//@}
protected:
private:
/*_ @name Private Attributes
*/
//_@{
//_ Pointer to the force field of the periodic boundary
ForceField* force_field_;
//_ Indicates if periodic boundary is enabled or not
bool enabled_;
//_ The box of the periodic boundary
SimpleBox3 box_;
//_ An pair vector with the start and end indices of all molecules (atoms of the molecules)
AtomIndexArray molecules_;
//_@}
};
} // namespace BALL
#endif // BALL_MOLMEC_COMMON_PERIODICBOUNDARY_H
|