/usr/include/BALL/DOCKING/COMMON/constraints.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 | // -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
#ifndef BALL_DOCKING_COMMON_CONSTRAINTS
#define BALL_DOCKING_COMMON_CONSTRAINTS
#ifndef BALL_MATHS_VECTOR3_H
#include <BALL/MATHS/vector3.h>
#endif
#ifndef BALL_MATHS_MATRIX44_H
#include <BALL/MATHS/matrix44.h>
#endif
#ifndef BALL_MATHS_PLANE3_H
#include <BALL/MATHS/plane3.h>
#endif
#ifndef BALL_KERNEL_SYSTEM_H
#include <BALL/KERNEL/system.h>
#endif
#ifndef BALL_DATATYPE_HASHGRID_H
#include <BALL/DATATYPE/hashGrid.h>
#endif
namespace BALL
{
class DockingAlgorithm;
namespace VIEW
{
class DockRLDialog;
}
class ScoringFunction;
class BALL_EXPORT Constraint
{
public:
Constraint();
virtual ~Constraint();
virtual double calculateScore(AtomContainer* mol) = 0;
/** Set a name for this ReferenceArea. This way, the score summary printed by the ScoringFunction can be analyzed more easily */
virtual void setName(String name);
String getName();
String getType();
virtual void setScoringFunction(ScoringFunction* sf);
protected:
String name_;
/** Stores the type - 'ReferenceArea' or 'PharmacophoreConstraint' - of this Constraint for text output purposes. */
String type_;
/** penalty value that is to be added to the calculated energy if the desired constraints are not fullfilled. */
double penalty_;
ScoringFunction* scoring_function_;
};
/** ReferenceAreas are cuboids specified by the user for the examined target structure. A given number of ligand atoms or a given fraction of the ligand atoms should be located within these areas, so that docking is optimized in this way. */
class BALL_EXPORT ReferenceArea
: public Constraint
{
public:
ReferenceArea();
~ReferenceArea();
/** Constructor. Creates a ReferenceArea from 4 given points, that describe a cuboid.\n
Of those four given points, p1 should be located on the same edge as p2, p3 on the same egde as p2 and p4 on the same edge as p3. */
ReferenceArea(Vector3& p1, Vector3& p2, Vector3& p3, Vector3& p4, bool atom_fraction, double atoms, double penalty);
/** Constructor. Creates a ReferenceArea from 2 points that describe one side of the cuboid and the the desired expansion of the cubiod along the x- and y-axes of a right handed coordinate system (after transformation) */
ReferenceArea(Vector3& p1, Vector3& p2, int y_expansion, int z_expansion, bool atom_fraction, double atoms, double penalty);
/** Constructor that creates a ReferenceArea describing the area occupied by a given AtomContainer */
ReferenceArea(const AtomContainer* sys, bool atom_fraction, double atoms, double penalty);
ReferenceArea(list<const AtomContainer*>& container_list, const list<String>& interaction_types, double desired_interaction_score, double penalt);
/** calculates a penalty for the given AtomContainer */
double calculateScore(AtomContainer* mol);
/** returns the number of atoms located within this ReferenceAreas as calculated by the last call of getScore() (respectively ScoringFunction::updateScore() ) */
double getContainedAtoms();
/** Creates a molecule with four atoms located on the bonders of the cube that this ReferenceArea describes.\n
This can be used for visualization purposes.\n
@return the created System if this ReferenceArea contains a valid ref-area description; else NULL is returned. */
System* createBoundaryMolecule();
/** Enlarge this ReferenceArea by the given amount in all directions */
void enlarge(double angstroem);
/** Sets the number resp. fraction of atoms of a ligand that should be contained in this ReferenceArea */
void setNumberDesiredAtoms(double d);
void setName(String name);
void setScoringFunction(ScoringFunction* sf);
private:
double countContainedAtoms(AtomContainer* sys);
/** transformation matrix. It is used to rotate the specified cuboid in such a way that it is aligned with the global coordinate system */
Matrix4x4 T_;
double min_x_, max_x_, min_y_, max_y_, min_z_, max_z_;
/** the number of atoms of a reference ligand within this ReferenceArea respectively the fractions of atoms of a reference ligand within this ReferenceArea */
double ref_atoms_;
/** if == 1, ReferenceArea.atoms indicates the desired fraction of ligand atoms that should be located within this area */
bool atom_fraction_;
/** the number of atoms located within this ReferenceAreas as calculated by the last call of getScore() (respectively ScoringFunction::updateScore() ) */
double contained_atoms_;
vector<Vector3> input_points_;
/** the number of atoms of the reference ligand */
Size number_reflig_atoms_;
/** If set to true, the fraction of ligand-atoms contained within this ReferenceArea is calculated with respect to the number of atoms of the reference-ligand, if the current ligand has more atoms than the reference ligand.
This is useful, because a much larger ligand obviously needs more space and might therefore not fit completely into the binding pocket (as the reference ligand did). */
bool scale_by_size_;
friend class BALL::DockingAlgorithm;
friend class BALL::VIEW::DockRLDialog;
};
/** PharmacophoreConstraint allow to define specific intermolecular interactions that should exist between receptor and ligand.\n
If those interactions do not exist or are too weak (i.e. have a score that is not good enough), a penalty score is calculated and used by ScoringFunction::updateScore() if this PharmacophoreConstraint has been added to ScoringFunction::constraints.\n
In order to be able to evaluate the ligand's interactions with the specified atoms, the pairwise interactions have to be stored. Use ScoringFunction::enableStoreInteractions() to allow this. */
class BALL_EXPORT PharmacophoreConstraint
: public Constraint
{
public:
PharmacophoreConstraint(list<const AtomContainer*>& container_list, const list<String>& interaction_types, double desired_interaction_score, double penalty);
PharmacophoreConstraint(const AtomContainer* container, const list<String>& interaction_types, double desired_interaction_score, double penalty);
PharmacophoreConstraint(const PharmacophoreConstraint& phC);
~PharmacophoreConstraint();
/** Constructor for initializing a PharmacophoreConstraint with a list of residue-IDs. \n
If using this constructor, the ScoringFunction for this object must be set by setScoringFunction() _before_ calling calculateScore() for the first time. If the receptor that is used by this ScoringFunction is not a Protein or does not have residues for all the specified IDs, setScoringFunction() will throw an exception. */
PharmacophoreConstraint(vector<String>& residue_IDs, const list<String>& interaction_types, double desired_interaction_score, double penalty);
void setScoringFunction(ScoringFunction* sf);
/** calculates a penalty for the given AtomContainer */
double calculateScore(AtomContainer* mol);
/** returns the interaction-score between the ligand and the desired receptor-atoms as calculated during the last call of calculateScore() */
double getInteractionScore();
bool usesReceptorResidues();
AtomContainer* getGridContainer();
const list<String>* getInteractionTypes();
const list<const AtomContainer*>* getInteractionPartners();
private:
/** only used in case of creation of an object of this class by constructor PharmacophoreConstraint(vector<String>& residue_IDs ...) */
vector<String> residue_IDs_;
vector<String> chain_IDs_;
list<const AtomContainer*> interaction_partners_;
list<String> interaction_types_;
double desired_interaction_score_;
double interaction_score_;
bool uses_receptor_residues_;
/** Contains copies of all relevant receptor-atoms in case of grid-based ScoringFunctions */
AtomContainer grid_container_;
/** Saves the ID of the relevant ScoreGridSet in case of grid-based ScoringFunctions */
unsigned int gridSetID_;
friend class BALL::DockingAlgorithm;
friend class BALL::VIEW::DockRLDialog;
};
}
#endif // BALL_DOCKING_COMMON_CONSTRAINTS
|