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>
311 DescriptorList descriptors;
321 template <
typename DT,
typename SVT>
328 template <
typename DT,
typename SVT>
329 template <
typename SF>
332 simFunc = std::forward<SF>(func);
335 template <
typename DT,
typename SVT>
342 template <
typename DT,
typename SVT>
346 return descriptors.begin();
349 template <
typename DT,
typename SVT>
353 return descriptors.end();
356 template <
typename DT,
typename SVT>
360 return descriptors.begin();
363 template <
typename DT,
typename SVT>
367 return descriptors.end();
370 template <
typename DT,
typename SVT>
373 return descriptors.size();
376 template <
typename DT,
typename SVT>
382 template <
typename DT,
typename SVT>
385 descriptors.emplace_back(descr_ptr);
388 template <
typename DT,
typename SVT>
391 for (
auto& dp : descriptors)
398 template <
typename DT,
typename SVT>
402 if (idx >= descriptors.size())
403 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
405 return *descriptors[idx];
408 template <
typename DT,
typename SVT>
411 if (idx >= descriptors.size())
412 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
414 descriptors.erase(descriptors.begin() + idx);
417 template <
typename DT,
typename SVT>
421 auto& b_it = it.base();
423 if ((b_it < descriptors.begin()) || (b_it >= descriptors.end()))
424 throw Base::RangeError(
"BulkSimilarityCalculator: descriptor iterator out of valid range");
426 return descriptors.erase(b_it);
429 template <
typename DT,
typename SVT>
433 results.reserve(descriptors.size());
435 for (std::size_t i = 0, num_descrs = descriptors.size(); i < num_descrs; i++)
436 results.emplace_back(i, simFunc(descr, *descriptors[i]));
442 std::sort(results.begin(), results.end(),
444 return (r1.second > r2.second);
447 std::sort(results.begin(), results.end(),
449 return (r1.second < r2.second);
453 template <
typename DT,
typename SVT>
457 return results.begin();
460 template <
typename DT,
typename SVT>
464 return results.end();
467 template <
typename DT,
typename SVT>
471 return results.begin();
474 template <
typename DT,
typename SVT>
478 return results.end();
481 template <
typename DT,
typename SVT>
485 if (idx >= results.size())
486 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
491 template <
typename DT,
typename SVT>
495 if (idx >= results.size())
496 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
498 return results[idx].second;
501 template <
typename DT,
typename SVT>
504 if (idx >= results.size())
505 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
507 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:389
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:344
ConstResultIterator begin() const
Returns a constant iterator pointing to the first result (range-based for support).
Definition: BulkSimilarityCalculator.hpp:469
const SimilarityValue & getSimilarity(std::size_t idx) const
Returns the similarity value of the result at the given index.
Definition: BulkSimilarityCalculator.hpp:493
const SimilarityFunction & getSimilarityFunction() const
Returns the currently configured similarity function.
Definition: BulkSimilarityCalculator.hpp:323
void removeDescriptor(std::size_t idx)
Removes the descriptor at index idx.
Definition: BulkSimilarityCalculator.hpp:409
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:502
const Result & getResult(std::size_t idx) const
Returns the result at the given index.
Definition: BulkSimilarityCalculator.hpp:483
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:330
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:400
ConstResultIterator getResultsBegin() const
Returns a constant iterator pointing to the first result of the last calculate() call.
Definition: BulkSimilarityCalculator.hpp:455
std::size_t getNumDescriptors() const
Returns the number of stored descriptors.
Definition: BulkSimilarityCalculator.hpp:371
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:351
void addDescriptor(const Descriptor &descr)
Adds a copy of descr to the stored descriptor list.
Definition: BulkSimilarityCalculator.hpp:377
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:476
BulkSimilarityCalculator & operator=(const BulkSimilarityCalculator &calc)=default
Copy assignment operator.
void clear()
Removes all stored descriptors and calculation results.
Definition: BulkSimilarityCalculator.hpp:336
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:462
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:430
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.