mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
add support for a diversity picker to java wrapper
This commit is contained in:
@@ -17,6 +17,7 @@ if(WIN32)
|
||||
Optimizer
|
||||
MolAlign
|
||||
Alignment
|
||||
SimDivPickers
|
||||
RDGeometryLib RDGeneral )
|
||||
if(RDK_BUILD_INCHI_SUPPORT)
|
||||
set(RDKit_Wrapper_Libs RDInchiLib ${INCHI_LIBRARIES} ${RDKit_Wrapper_Libs})
|
||||
@@ -31,6 +32,7 @@ else()
|
||||
Optimizer_static
|
||||
MolAlign_static
|
||||
Alignment_static
|
||||
SimDivPickers_static
|
||||
RDGeometryLib_static RDGeneral_static )
|
||||
if(RDK_BUILD_INCHI_SUPPORT)
|
||||
set(RDKit_Wrapper_Libs RDInchiLib_static Inchi_static ${RDKit_Wrapper_Libs})
|
||||
|
||||
38
Code/JavaWrappers/DiversityPick.h
Normal file
38
Code/JavaWrappers/DiversityPick.h
Normal file
@@ -0,0 +1,38 @@
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <DataStructs/BitOps.h>
|
||||
#include <DataStructs/ExplicitBitVect.h>
|
||||
#include <SimDivPickers/MaxMinPicker.h>
|
||||
#include <RDBoost/Exceptions.h>
|
||||
|
||||
namespace {
|
||||
class taniFunctor {
|
||||
public:
|
||||
taniFunctor(const std::vector<ExplicitBitVect> &ebvs) : d_ebvs(ebvs) {}
|
||||
double operator()(unsigned int i,unsigned int j) {
|
||||
double res;
|
||||
std::pair<unsigned int ,unsigned int> idxPair(i,j);
|
||||
if(this->d_cache.count(idxPair)>0){
|
||||
res = this->d_cache[idxPair];
|
||||
} else {
|
||||
res=1.-TanimotoSimilarity(d_ebvs[i],d_ebvs[j]);
|
||||
this->d_cache[idxPair]=res;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
private:
|
||||
const std::vector<ExplicitBitVect> &d_ebvs;
|
||||
std::map<std::pair<unsigned int,unsigned int>,double> d_cache;
|
||||
};
|
||||
}
|
||||
|
||||
std::vector<int> pickUsingFingerprints(const std::vector<ExplicitBitVect> &ebvs,unsigned int nToPick
|
||||
){
|
||||
if(nToPick>=ebvs.size()) throw ValueErrorException("nToPick is larger than the vector size");
|
||||
std::vector<int> res;
|
||||
|
||||
RDPickers::MaxMinPicker picker;
|
||||
taniFunctor ftor(ebvs);
|
||||
res = picker.lazyPick(ftor,ebvs.size(),nToPick);
|
||||
return res;
|
||||
}
|
||||
11
Code/JavaWrappers/DiversityPick.i
Normal file
11
Code/JavaWrappers/DiversityPick.i
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
%{
|
||||
#include <DataStructs/BitOps.h>
|
||||
#include <DataStructs/ExplicitBitVect.h>
|
||||
#include "DiversityPick.h"
|
||||
%}
|
||||
|
||||
%template(EBV_Vect) std::vector< ExplicitBitVect >;
|
||||
|
||||
%include "DiversityPick.h";
|
||||
|
||||
@@ -252,3 +252,5 @@ typedef unsigned long long int uintmax_t;
|
||||
#ifdef BUILD_INCHI_SUPPORT
|
||||
%include "../Inchi.i"
|
||||
#endif
|
||||
|
||||
%include "../DiversityPick.i"
|
||||
|
||||
Reference in New Issue
Block a user