29 #ifndef CDPL_DESCR_BULKSIMILARITYCALCULATOR_HPP
30 #define CDPL_DESCR_BULKSIMILARITYCALCULATOR_HPP
39 #include <boost/iterator/indirect_iterator.hpp>
54 template <
typename DT = Util::BitSet,
typename SVT =
double>
63 typedef std::pair<std::size_t, SVT>
Result;
67 typedef std::vector<DescriptorPointer> DescriptorList;
68 typedef std::vector<Result> ResultList;
71 typedef boost::indirect_iterator<typename DescriptorList::const_iterator, DT>
73 typedef boost::indirect_iterator<typename DescriptorList::iterator, DT>
83 template <
typename SF>
85 simFunc(std::forward<SF>(sim_func)) {}
92 template <
typename SF>
130 DescriptorList descriptors;
140 template <
typename DT,
typename SVT>
147 template <
typename DT,
typename SVT>
148 template <
typename SF>
151 simFunc = std::forward<SF>(func);
154 template <
typename DT,
typename SVT>
161 template <
typename DT,
typename SVT>
165 return descriptors.begin();
168 template <
typename DT,
typename SVT>
172 return descriptors.end();
175 template <
typename DT,
typename SVT>
179 return descriptors.begin();
182 template <
typename DT,
typename SVT>
186 return descriptors.end();
189 template <
typename DT,
typename SVT>
192 return descriptors.size();
195 template <
typename DT,
typename SVT>
201 template <
typename DT,
typename SVT>
204 descriptors.emplace_back(descr_ptr);
207 template <
typename DT,
typename SVT>
210 for (
auto& dp : descriptors)
217 template <
typename DT,
typename SVT>
221 if (idx >= descriptors.size())
222 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
224 return *descriptors[idx];
227 template <
typename DT,
typename SVT>
230 if (idx >= descriptors.size())
231 throw Base::IndexError(
"BulkSimilarityCalculator: descriptor index out of bounds");
233 descriptors.erase(descriptors.begin() + idx);
236 template <
typename DT,
typename SVT>
240 auto& b_it = it.base();
242 if ((b_it < descriptors.begin()) || (b_it >= descriptors.end()))
243 throw Base::RangeError(
"BulkSimilarityCalculator: descriptor iterator out of valid range");
245 return descriptors.erase(b_it);
248 template <
typename DT,
typename SVT>
252 results.reserve(descriptors.size());
254 for (std::size_t i = 0, num_descrs = descriptors.size(); i < num_descrs; i++)
255 results.emplace_back(i, simFunc(descr, *descriptors[i]));
261 std::sort(results.begin(), results.end(),
263 return (r1.second > r2.second);
266 std::sort(results.begin(), results.end(),
268 return (r1.second < r2.second);
272 template <
typename DT,
typename SVT>
276 return results.begin();
279 template <
typename DT,
typename SVT>
283 return results.end();
286 template <
typename DT,
typename SVT>
290 return results.begin();
293 template <
typename DT,
typename SVT>
297 return results.end();
300 template <
typename DT,
typename SVT>
304 if (idx >= results.size())
305 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
310 template <
typename DT,
typename SVT>
314 if (idx >= results.size())
315 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
317 return results[idx].second;
320 template <
typename DT,
typename SVT>
323 if (idx >= results.size())
324 throw Base::IndexError(
"BulkSimilarityCalculator: result index out of bounds");
326 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:56
bool containsDescriptor(const Descriptor &descr) const
Definition: BulkSimilarityCalculator.hpp:208
std::shared_ptr< BulkSimilarityCalculator > SharedPointer
Definition: BulkSimilarityCalculator.hpp:64
DescriptorIterator getDescriptorsBegin()
Definition: BulkSimilarityCalculator.hpp:163
ConstResultIterator begin() const
Definition: BulkSimilarityCalculator.hpp:288
const SimilarityValue & getSimilarity(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:312
const SimilarityFunction & getSimilarityFunction() const
Definition: BulkSimilarityCalculator.hpp:142
void removeDescriptor(std::size_t idx)
Definition: BulkSimilarityCalculator.hpp:228
DT Descriptor
Definition: BulkSimilarityCalculator.hpp:59
std::function< SVT(const DT &, const DT &)> SimilarityFunction
Definition: BulkSimilarityCalculator.hpp:62
boost::indirect_iterator< typename DescriptorList::const_iterator, DT > ConstDescriptorIterator
Definition: BulkSimilarityCalculator.hpp:72
std::size_t getDescriptorIndex(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:321
const Result & getResult(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:302
std::pair< std::size_t, SVT > Result
Definition: BulkSimilarityCalculator.hpp:63
void setSimilarityFunction(SF &&func)
Definition: BulkSimilarityCalculator.hpp:149
std::shared_ptr< DT > DescriptorPointer
Definition: BulkSimilarityCalculator.hpp:60
const Descriptor & getDescriptor(std::size_t idx) const
Definition: BulkSimilarityCalculator.hpp:219
ConstResultIterator getResultsBegin() const
Definition: BulkSimilarityCalculator.hpp:274
std::size_t getNumDescriptors() const
Definition: BulkSimilarityCalculator.hpp:190
BulkSimilarityCalculator & operator=(BulkSimilarityCalculator &&calc)=default
BulkSimilarityCalculator(const BulkSimilarityCalculator &calc)=default
DescriptorIterator getDescriptorsEnd()
Definition: BulkSimilarityCalculator.hpp:170
void addDescriptor(const Descriptor &descr)
Definition: BulkSimilarityCalculator.hpp:196
BulkSimilarityCalculator(SF &&sim_func)
Definition: BulkSimilarityCalculator.hpp:84
ResultList::const_iterator ConstResultIterator
Definition: BulkSimilarityCalculator.hpp:76
ConstResultIterator end() const
Definition: BulkSimilarityCalculator.hpp:295
BulkSimilarityCalculator & operator=(const BulkSimilarityCalculator &calc)=default
void clear()
Definition: BulkSimilarityCalculator.hpp:155
boost::indirect_iterator< typename DescriptorList::iterator, DT > DescriptorIterator
Definition: BulkSimilarityCalculator.hpp:74
ConstResultIterator getResultsEnd() const
Definition: BulkSimilarityCalculator.hpp:281
SVT SimilarityValue
Definition: BulkSimilarityCalculator.hpp:61
void calculate(const Descriptor &descr, bool sort=false, bool sort_desc=true)
Definition: BulkSimilarityCalculator.hpp:249
BulkSimilarityCalculator()=default
BulkSimilarityCalculator(BulkSimilarityCalculator &&calc)=default
Functor class for calculating Tanimoto Similarities [CITB] of bitsets and vectors.
Definition: SimilarityFunctors.hpp:46
The namespace of the Chemical Data Processing Library.