home
about
news
download
doc
source
systems
tests
bugs
contact
IMP Reference Guide
2.12.0
The Integrative Modeling Platform
IMP Manual
Reference Guide
Tutorial Index
Modules
Classes
Examples
include
IMP
version 2.12.0
triplet_macros.h
Go to the documentation of this file.
1
// Autogenerated by ../../../../tmp/nightly-build-5371/imp-2.12.0/tools/build/make_containers.py
2
// from ../../../../tmp/nightly-build-5371/imp-2.12.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-2019 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 */
object_macros.h
Various general useful macros for IMP.
container_macros.h
Macros to define containers of objects.