29 #ifndef CDPL_DESCR_BULKSIMILARITYCALCULATOR_HPP
30 #define CDPL_DESCR_BULKSIMILARITYCALCULATOR_HPP
39 #include <boost/iterator/indirect_iterator.hpp>
64 template <
typename DT = Util::BitSet,
typename SVT =
double>
92 typedef std::pair<std::size_t, SVT>
Result;
100 typedef std::vector<DescriptorPointer> DescriptorList;
101 typedef std::vector<Result> ResultList;
107 typedef boost::indirect_iterator<typename DescriptorList::const_iterator, DT>
113 typedef boost::indirect_iterator<typename DescriptorList::iterator, DT>
144 template <
typename SF>
146 simFunc(std::forward<SF>(sim_func)) {}
173 template <
typename SF>
312 DescriptorList descriptors;
322 template <
typename DT,
typename SVT>
329 template <
typename DT,
typename SVT>
330 template <
typename SF>
333 simFunc = std::forward<SF>(func);
336 template <
typename DT,
typename SVT>
343 template <
typename DT,
typename SVT>
347 return descriptors.begin();
350 template <
typename DT,
typename SVT>
354 return descriptors.end();
357 template <
typename DT,
typename SVT>
361 return descriptors.begin();
364 template <
typename DT,
typename SVT>
368 return descriptors.end();
371 template <
typename DT,
typename SVT>
374 return descriptors.size();
377 template <
typename DT,
typename SVT>
383 template <
typename DT,
typename SVT>
386 descriptors.emplace_back(descr_ptr);
389 template <
typename DT,
typename SVT>
392 for (
auto& dp : descriptors)
399 template <
typename DT,
typename SVT>
403 if (idx >= descriptors.size())
404 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
406 return *descriptors[idx];
409 template <
typename DT,
typename SVT>
412 if (idx >= descriptors.size())
413 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
415 descriptors.erase(descriptors.begin() + idx);
418 template <
typename DT,
typename SVT>
422 auto& b_it = it.base();
424 if ((b_it < descriptors.begin()) || (b_it >= descriptors.end()))
425 throw Base::RangeError(
"BulkSimilarityCalculator: descriptor iterator out of valid range");
427 return descriptors.erase(b_it);
430 template <
typename DT,
typename SVT>
434 results.reserve(descriptors.size());
436 for (std::size_t i = 0, num_descrs = descriptors.size(); i < num_descrs; i++)
437 results.emplace_back(i, simFunc(descr, *descriptors[i]));
443 std::sort(results.begin(), results.end(),
445 return (r1.second > r2.second);
448 std::sort(results.begin(), results.end(),
450 return (r1.second < r2.second);
454 template <
typename DT,
typename SVT>
458 return results.begin();
461 template <
typename DT,
typename SVT>
465 return results.end();
468 template <
typename DT,
typename SVT>
472 return results.begin();
475 template <
typename DT,
typename SVT>
479 return results.end();
482 template <
typename DT,
typename SVT>
486 if (idx >= results.size())
487 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
492 template <
typename DT,
typename SVT>
496 if (idx >= results.size())
497 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
499 return results[idx].second;
502 template <
typename DT,
typename SVT>
505 if (idx >= results.size())
506 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
508 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
Calculator that performs a bulk pairwise comparison of a single query descriptor against a stored set...
Definition: BulkSimilarityCalculator.hpp:66
bool containsDescriptor(const Descriptor &descr) const
Tells whether a descriptor that compares equal to descr is stored.
Definition: BulkSimilarityCalculator.hpp:390
std::shared_ptr< BulkSimilarityCalculator > SharedPointer
A reference-counted smart pointer [SHPTR] for dynamically allocated BulkSimilarityCalculator instance...
Definition: BulkSimilarityCalculator.hpp:97
DescriptorIterator getDescriptorsBegin()
Returns a mutable iterator pointing to the first stored descriptor.
Definition: BulkSimilarityCalculator.hpp:345
ConstResultIterator begin() const
Returns a constant iterator pointing to the first result (range-based for support).
Definition: BulkSimilarityCalculator.hpp:470
const SimilarityValue & getSimilarity(std::size_t idx) const
Returns the similarity value of the result at the given index.
Definition: BulkSimilarityCalculator.hpp:494
const SimilarityFunction & getSimilarityFunction() const
Returns the currently configured similarity function.
Definition: BulkSimilarityCalculator.hpp:324
void removeDescriptor(std::size_t idx)
Removes the descriptor at index idx.
Definition: BulkSimilarityCalculator.hpp:410
DT Descriptor
The descriptor type.
Definition: BulkSimilarityCalculator.hpp:72
std::function< SVT(const DT &, const DT &)> SimilarityFunction
Type of the generic functor used to compute the similarity of two descriptors.
Definition: BulkSimilarityCalculator.hpp:87
boost::indirect_iterator< typename DescriptorList::const_iterator, DT > ConstDescriptorIterator
A constant iterator over the stored target descriptors.
Definition: BulkSimilarityCalculator.hpp:108
std::size_t getDescriptorIndex(std::size_t idx) const
Returns the index of the target descriptor referenced by the result at the given result index.
Definition: BulkSimilarityCalculator.hpp:503
const Result & getResult(std::size_t idx) const
Returns the result at the given index.
Definition: BulkSimilarityCalculator.hpp:484
std::pair< std::size_t, SVT > Result
A single calculation result: (target descriptor index, similarity value).
Definition: BulkSimilarityCalculator.hpp:92
void setSimilarityFunction(SF &&func)
Sets the similarity function.
Definition: BulkSimilarityCalculator.hpp:331
std::shared_ptr< DT > DescriptorPointer
A smart pointer to a stored descriptor.
Definition: BulkSimilarityCalculator.hpp:77
const Descriptor & getDescriptor(std::size_t idx) const
Returns the stored descriptor at index idx.
Definition: BulkSimilarityCalculator.hpp:401
ConstResultIterator getResultsBegin() const
Returns a constant iterator pointing to the first result of the last calculate() call.
Definition: BulkSimilarityCalculator.hpp:456
std::size_t getNumDescriptors() const
Returns the number of stored descriptors.
Definition: BulkSimilarityCalculator.hpp:372
BulkSimilarityCalculator & operator=(BulkSimilarityCalculator &&calc)=default
Move assignment operator.
BulkSimilarityCalculator(const BulkSimilarityCalculator &calc)=default
Copy constructor.
DescriptorIterator getDescriptorsEnd()
Returns a mutable iterator pointing one past the last stored descriptor.
Definition: BulkSimilarityCalculator.hpp:352
void addDescriptor(const Descriptor &descr)
Adds a copy of descr to the stored descriptor list.
Definition: BulkSimilarityCalculator.hpp:378
BulkSimilarityCalculator(SF &&sim_func)
Constructs the BulkSimilarityCalculator instance with the given similarity function.
Definition: BulkSimilarityCalculator.hpp:145
ResultList::const_iterator ConstResultIterator
A constant iterator over the calculation results.
Definition: BulkSimilarityCalculator.hpp:119
ConstResultIterator end() const
Returns a constant iterator pointing one past the last result (range-based for support).
Definition: BulkSimilarityCalculator.hpp:477
BulkSimilarityCalculator & operator=(const BulkSimilarityCalculator &calc)=default
Copy assignment operator.
void clear()
Removes all stored descriptors and calculation results.
Definition: BulkSimilarityCalculator.hpp:337
boost::indirect_iterator< typename DescriptorList::iterator, DT > DescriptorIterator
A mutable iterator over the stored target descriptors.
Definition: BulkSimilarityCalculator.hpp:114
ConstResultIterator getResultsEnd() const
Returns a constant iterator pointing one past the last result of the last calculate() call.
Definition: BulkSimilarityCalculator.hpp:463
SVT SimilarityValue
The similarity-value type.
Definition: BulkSimilarityCalculator.hpp:82
void calculate(const Descriptor &descr, bool sort=false, bool sort_desc=true)
Computes the similarity between the query descr and every stored descriptor.
Definition: BulkSimilarityCalculator.hpp:431
BulkSimilarityCalculator()=default
Constructs the BulkSimilarityCalculator instance with the default similarity function (TanimotoSimila...
BulkSimilarityCalculator(BulkSimilarityCalculator &&calc)=default
Move constructor.
Functor class for calculating Tanimoto Similarities [CITB] of bitsets and vectors.
Definition: SimilarityFunctors.hpp:46
The namespace of the Chemical Data Processing Library.