8 #ifndef IMPCORE_PREDICATES_H
9 #define IMPCORE_PREDICATES_H
11 #include <IMP/core/core_config.h>
16 IMPCORE_BEGIN_NAMESPACE
24 "InBoundingBox3DSingletonPredicate%1%")
28 return bb_.get_contains(
XYZ(m, pi).get_coordinates()) ? 1 : 0;
46 "AttributeSingletonPredicate%1%")
50 return m->get_attribute(bb_, pi);
71 m->get_sphere(pi[0]).get_radius() + m->get_sphere(pi[1]).get_radius();
72 #if IMP_HAS_CHECKS > 1
75 for (
unsigned int i = 0; i < 3; ++i) {
76 double delta = std::abs(m->get_sphere(pi[0]).get_center()[i] -
77 m->get_sphere(pi[1]).get_center()[i]);
85 m->get_sphere(pi[1]).get_center()) <
86 algebra::get_squared(sr);
103 template <
class Predicate,
class Score = SingletonScore>
108 Score *get_score(
int val)
const {
109 if (val < offset_ || val > scores_.size() + offset_) {
112 return scores_[val + offset_];
118 std::string name =
"PredicateScore%1%")
120 void set_singleton_score(
int val, Score *score) {
122 "Negative predicate values not supported yet");
123 scores_.resize(std::max<int>(val + 1, scores_.size()));
124 scores_[val] = score;
134 #if !defined(SWIG) && !defined(IMP_DOXYGEN)
135 template <
class Predicate,
class Score>
139 int val = pred_->get_value(m, p);
140 Score *s = get_score(val);
142 return s->Score::evaluate_index(m, p, da);
150 template <
class Predicate,
class Score>
151 inline PredicateSingletonScore<Predicate, Score> *
155 ret->set_score(val, score);
159 IMPCORE_END_NAMESPACE
Return 1 if the XYZ is in the bounding box, 0 otherwise.
virtual ModelObjectsTemp do_get_inputs(Model *m, const ParticleIndexes &pi) const
Overload this method to specify the inputs.
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
virtual int get_value_index(Model *m, ParticleIndex pi) const
Compute the predicate and the derivative if needed.
double get_squared_distance(const VectorD< D > &v1, const VectorD< D > &v2)
Compute the squared distance between two vectors.
Macros for various classes.
ParticlesTemp get_particles(Model *m, const ParticleIndexes &ps)
virtual int get_value_index(Model *m, const ParticleIndexPair &pi) const
Compute the predicate and the derivative if needed.
A more IMP-like version of the std::vector.
A smart pointer to a reference counted object.
#define IMP_INTERNAL_CHECK(expr, message)
An assertion to check for internal errors in IMP. An IMP::ErrorException will be thrown.
Define SingletonPredicate.
Class for storing model, its restraints, constraints, and particles.
Return the value of an int attribute as the predicate value.
Abstract class for scoring object(s) of type ParticleIndex.
#define IMP_SINGLETON_SCORE_METHODS(Name)
A decorator for a particle with x,y,z coordinates.
virtual ModelObjectsTemp do_get_inputs(Model *m, const ParticleIndexes &pi) const
Overload this method to specify the inputs.
virtual ModelObjectsTemp do_get_inputs(Model *m, const ParticleIndexes &pi) const
Overload this method to specify the inputs.
Return 1 if two XYZRs collide.
#define IMP_SINGLETON_PREDICATE_METHODS(Name)
Define extra the functions needed for a SingletonPredicate.
Abstract predicate function.
Abstract predicate function.
double Float
Basic floating-point value (could be float, double...)
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method.
PredicateSingletonScore< Predicate, Score > * create_predicates_singleton_score(Predicate *pred, int val, Score *score)
double get_distance(const Line3D &s, const Vector3D &p)
Get closest distance between a line and a point.
#define IMP_OVERRIDE
Cause a compile error if this method does not override a parent method.
Class for adding derivatives from restraints to the model.
#define IMP_PAIR_PREDICATE_METHODS(Name)
Define extra the functions needed for a PairPredicate.
virtual int get_value_index(Model *m, ParticleIndex pi) const
Compute the predicate and the derivative if needed.
A decorator for a particle with x,y,z coordinates and a radius.