29 #ifndef CDPL_DESCR_BULKSIMILARITYCALCULATOR_HPP
30 #define CDPL_DESCR_BULKSIMILARITYCALCULATOR_HPP
39 #include <boost/iterator/indirect_iterator.hpp>
51 template <
typename DT = Util::BitSet,
typename SVT =
double>
60 typedef std::pair<std::size_t, SVT>
Result;
64 typedef std::vector<DescriptorPointer> DescriptorList;
65 typedef std::vector<Result> ResultList;
68 typedef boost::indirect_iterator<typename DescriptorList::const_iterator, DT>
70 typedef boost::indirect_iterator<typename DescriptorList::iterator, DT>
80 template <
typename SF>
82 simFunc(std::forward<SF>(sim_func)) {}
89 template <
typename SF>
127 DescriptorList descriptors;
137 template <
typename DT,
typename SVT>
144 template <
typename DT,
typename SVT>
145 template <
typename SF>
148 simFunc = std::forward<SF>(func);
151 template <
typename DT,
typename SVT>
158 template <
typename DT,
typename SVT>
162 return descriptors.begin();
165 template <
typename DT,
typename SVT>
169 return descriptors.end();
172 template <
typename DT,
typename SVT>
176 return descriptors.begin();
179 template <
typename DT,
typename SVT>
183 return descriptors.end();
186 template <
typename DT,
typename SVT>
189 return descriptors.size();
192 template <
typename DT,
typename SVT>
198 template <
typename DT,
typename SVT>
201 descriptors.emplace_back(descr_ptr);
204 template <
typename DT,
typename SVT>
207 for (
auto& dp : descriptors)
214 template <
typename DT,
typename SVT>
218 if (idx >= descriptors.size())
219 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
221 return *descriptors[idx];
224 template <
typename DT,
typename SVT>
227 if (idx >= descriptors.size())
228 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
230 descriptors.erase(descriptors.begin() + idx);
233 template <
typename DT,
typename SVT>
237 auto& b_it = it.base();
239 if ((b_it < descriptors.begin()) || (b_it >= descriptors.end()))
240 throw Base::RangeError(
"BulkSimilarityCalculator: descriptor iterator out of valid range");
242 return descriptors.erase(b_it);
245 template <
typename DT,
typename SVT>
249 results.reserve(descriptors.size());
251 for (std::size_t i = 0, num_descrs = descriptors.size(); i < num_descrs; i++)
252 results.emplace_back(i, simFunc(descr, *descriptors[i]));
258 std::sort(results.begin(), results.end(),
260 return (r1.second > r2.second);
263 std::sort(results.begin(), results.end(),
265 return (r1.second < r2.second);
269 template <
typename DT,
typename SVT>
273 return results.begin();
276 template <
typename DT,
typename SVT>
280 return results.end();
283 template <
typename DT,
typename SVT>
287 return results.begin();
290 template <
typename DT,
typename SVT>
294 return results.end();
297 template <
typename DT,
typename SVT>
301 if (idx >= results.size())
302 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
307 template <
typename DT,
typename SVT>
311 if (idx >= results.size())
312 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
314 return results[idx].second;
317 template <
typename DT,
typename SVT>
320 if (idx >= results.size())
321 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
323 return results[idx].first;
Definition of exception classes.
Definition of functor classes for the calculation of various similarity and distance measures.
Thrown to indicate that an index is out of range.
Definition: Base/Exceptions.hpp:152
Thrown to indicate that a value is out of range.
Definition: Base/Exceptions.hpp:114
Definition: BulkSimilarityCalculator.hpp:53
bool containsDescriptor(const Descriptor &descr) const
Definition: BulkSimilarityCalculator.hpp:205
std::shared_ptr< BulkSimilarityCalculator > SharedPointer
Definition: BulkSimilarityCalculator.hpp:61
DescriptorIterator getDescriptorsBegin()
Definition: BulkSimilarityCalculator.hpp:160
ConstResultIterator begin() const
Definition: BulkSimilarityCalculator.hpp:285
const SimilarityValue & getSimilarity(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:309
const SimilarityFunction & getSimilarityFunction() const
Definition: BulkSimilarityCalculator.hpp:139
void removeDescriptor(std::size_t idx)
Definition: BulkSimilarityCalculator.hpp:225
DT Descriptor
Definition: BulkSimilarityCalculator.hpp:56
std::function< SVT(const DT &, const DT &)> SimilarityFunction
Definition: BulkSimilarityCalculator.hpp:59
boost::indirect_iterator< typename DescriptorList::const_iterator, DT > ConstDescriptorIterator
Definition: BulkSimilarityCalculator.hpp:69
std::size_t getDescriptorIndex(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:318
const Result & getResult(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:299
std::pair< std::size_t, SVT > Result
Definition: BulkSimilarityCalculator.hpp:60
void setSimilarityFunction(SF &&func)
Definition: BulkSimilarityCalculator.hpp:146
std::shared_ptr< DT > DescriptorPointer
Definition: BulkSimilarityCalculator.hpp:57
const Descriptor & getDescriptor(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:216
ConstResultIterator getResultsBegin() const
Definition: BulkSimilarityCalculator.hpp:271
std::size_t getNumDescriptors() const
Definition: BulkSimilarityCalculator.hpp:187
BulkSimilarityCalculator & operator=(BulkSimilarityCalculator &&calc)=default
BulkSimilarityCalculator(const BulkSimilarityCalculator &calc)=default
DescriptorIterator getDescriptorsEnd()
Definition: BulkSimilarityCalculator.hpp:167
void addDescriptor(const Descriptor &descr)
Definition: BulkSimilarityCalculator.hpp:193
BulkSimilarityCalculator(SF &&sim_func)
Definition: BulkSimilarityCalculator.hpp:81
ResultList::const_iterator ConstResultIterator
Definition: BulkSimilarityCalculator.hpp:73
ConstResultIterator end() const
Definition: BulkSimilarityCalculator.hpp:292
BulkSimilarityCalculator & operator=(const BulkSimilarityCalculator &calc)=default
void clear()
Definition: BulkSimilarityCalculator.hpp:152
boost::indirect_iterator< typename DescriptorList::iterator, DT > DescriptorIterator
Definition: BulkSimilarityCalculator.hpp:71
ConstResultIterator getResultsEnd() const
Definition: BulkSimilarityCalculator.hpp:278
SVT SimilarityValue
Definition: BulkSimilarityCalculator.hpp:58
void calculate(const Descriptor &descr, bool sort=false, bool sort_desc=true)
Definition: BulkSimilarityCalculator.hpp:246
BulkSimilarityCalculator()=default
BulkSimilarityCalculator(BulkSimilarityCalculator &&calc)=default
Functor class for calculating Tanimoto Similarities [CITB] of bitsets and vectors.
Definition: SimilarityFunctors.hpp:45
The namespace of the Chemical Data Processing Library.