IMP logo
IMP Reference Guide  2.8.0
The Integrative Modeling Platform
triplet_macros.h
Go to the documentation of this file.
1 // Autogenerated by ../../../../tmp/nightly-build-97111/imp-2.8.0/tools/build/make_containers.py
2 // from ../../../../tmp/nightly-build-97111/imp-2.8.0/tools/build/container_templates/kernel/classname_macros.h
3 // Do not edit - any changes will be lost!
4 
5 /**
6  * \file IMP/triplet_macros.h
7  * \brief Macros for various classes.
8  *
9  * Copyright 2007-2017 IMP Inventors. All rights reserved.
10  */
11 
12 #ifndef IMPKERNEL_TRIPLET_MACROS_H
13 #define IMPKERNEL_TRIPLET_MACROS_H
14 
15 #include "internal/TupleRestraint.h"
16 #include "internal/functors.h"
17 #include "container_macros.h"
18 #include <IMP/object_macros.h>
19 #include <algorithm>
20 
21 /** Define
22  - IMP::TripletScore::evaluate_indexes()
23  - IMP::TripletScore::evaluate_if_good_indexes()
24  */
25 #define IMP_TRIPLET_SCORE_METHODS(Name) \
26  double evaluate_indexes(Model *m, const ParticleIndexTriplets &p, \
27  DerivativeAccumulator *da, unsigned int lower_bound, \
28  unsigned int upper_bound) const IMP_FINAL { \
29  double ret = 0; \
30  for (unsigned int i = lower_bound; i < upper_bound; ++i) { \
31  ret += evaluate_index(m, p[i], da); \
32  } \
33  return ret; \
34  } \
35  double evaluate_if_good_indexes( \
36  Model *m, const ParticleIndexTriplets &p, DerivativeAccumulator *da, \
37  double max, unsigned int lower_bound, unsigned int upper_bound) const { \
38  double ret = 0; \
39  for (unsigned int i = lower_bound; i < upper_bound; ++i) { \
40  ret += evaluate_if_good_index(m, p[i], da, max - ret); \
41  if (ret > max) return std::numeric_limits<double>::max(); \
42  } \
43  return ret; \
44  }
45 
46 //! Define extra the functions needed for a TripletPredicate
47 #define IMP_TRIPLET_PREDICATE_METHODS(Name) \
48  int get_value(const ParticleTriplet& a) const { \
49  return get_value_index(IMP::internal::get_model(a), \
50  IMP::internal::get_index(a)); \
51  } \
52  Ints get_value(const ParticleTripletsTemp &o) const { \
53  Ints ret(o.size()); \
54  for (unsigned int i = 0; i < o.size(); ++i) { \
55  ret[i] += Name::get_value(o[i]); \
56  } \
57  return ret; \
58  } \
59  Ints get_value_index(Model *m, const ParticleIndexTriplets &o) const { \
60  Ints ret(o.size()); \
61  for (unsigned int i = 0; i < o.size(); ++i) { \
62  ret[i] += Name::get_value_index(m, o[i]); \
63  } \
64  return ret; \
65  } \
66  IMP_IMPLEMENT_INLINE_NO_SWIG( \
67  void remove_if_equal(Model *m, ParticleIndexTriplets &ps, \
68  int value) const, \
69  { \
70  ps.erase( \
71  std::remove_if(ps.begin(), ps.end(), \
72  IMP::internal::PredicateEquals<Name, true>( \
73  this, m, value)), \
74  ps.end()); \
75  }); \
76  IMP_IMPLEMENT_INLINE_NO_SWIG(void remove_if_not_equal(Model *m, \
77  ParticleIndexTriplets &ps, \
78  int value) const, \
79  { \
80  ps.erase( \
81  std::remove_if(ps.begin(), ps.end(), \
82  IMP::internal::PredicateEquals<Name, false>( \
83  this, m, value)), \
84  ps.end()); \
85  });
86 
87 //! Use IMP_TRIPLET_MODIFIER() instead
88 #define IMP_TRIPLET_DERIVATIVE_MODIFIER(Name) IMP_TRIPLET_MODIFIER(Name)
89 
90 /** Define
91  - IMP::TripletModifier::apply_indexes()
92 */
93 #define IMP_TRIPLET_MODIFIER_METHODS(Name) \
94  virtual void apply_indexes(Model *m, const ParticleIndexTriplets &o, \
95  unsigned int lower_bound, \
96  unsigned int upper_bound) const IMP_FINAL { \
97  for (unsigned int i = lower_bound; i < upper_bound; ++i) { \
98  apply_index(m, o[i]); \
99  } \
100  }
101 
102 //! Use IMP_INDEX_TRIPLET_MODIFIER instead
103 #define IMP_INDEX_TRIPLET_DERIVATIVE_MODIFIER(Name) \
104  IMP_INDEX_TRIPLET_MODIFIER(Name)
105 
106 #ifndef IMP_DOXYGEN
107 #define IMP_IMPLEMENT_TRIPLET_CONTAINER(Name) \
108  IMP_IMPLEMENT_INLINE(void do_apply(const TripletModifier *sm) const, \
109  { apply_generic(sm); }); \
110  virtual ParticleIndexes get_all_possible_indexes() const IMP_OVERRIDE; \
111  IMP_OBJECT_METHODS(Name)
112 #endif
113 
114 /** Use this to fill in container methods
115  IMP::TripletContainer::do_apply()
116 */
117 #define IMP_TRIPLET_CONTAINER_METHODS(Name) \
118  void do_apply(const TripletModifier *sm) const { apply_generic(sm); }
119 
120 #endif /* IMPKERNEL_TRIPLET_MACROS_H */
Various general useful macros for IMP.
Macros to define containers of objects.