00001
00002
00003
00004
00005
00006 #ifndef _RD_CORRMATGENERATOR_H_
00007 #define _RD_CORRMATGENERATOR_H_
00008
00009 #include <RDGeneral/types.h>
00010 #include <DataStructs/BitVects.h>
00011 #include <boost/dynamic_bitset.hpp>
00012
00013 namespace RDInfoTheory {
00014
00015
00016 class BitCorrMatGenerator {
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 public:
00033 BitCorrMatGenerator() {
00034 this->initGenerator();
00035 };
00036
00037 ~BitCorrMatGenerator() {
00038 if (dp_corrMat) {
00039 delete [] dp_corrMat;
00040 }
00041 }
00042
00043 void initGenerator() {
00044 dp_corrMat = 0;
00045 d_descs.resize(0);
00046 d_nExamples = 0;
00047 };
00048
00049
00050
00051
00052
00053
00054 void setBitIdList(const RDKit::INT_VECT &bitIdList) {
00055 d_descs = bitIdList;
00056 int i, nd = d_descs.size();
00057 int nelem = nd*(nd-1)/2;
00058 if (dp_corrMat != 0) {
00059 delete [] dp_corrMat;
00060 }
00061 dp_corrMat = new double[nd*(nd-1)/2];
00062 for (i = 0; i < nelem; i++) {
00063 dp_corrMat[i] = 0.0;
00064 }
00065 };
00066
00067
00068 int getNumExamples() const {
00069 return d_nExamples;
00070 };
00071
00072
00073 RDKit::INT_VECT getCorrBitList() const {
00074 return d_descs;
00075 };
00076
00077
00078 double *getCorrMat() {
00079 return dp_corrMat;
00080 };
00081
00082
00083
00084 void collectVotes(const BitVect &fp) {
00085 unsigned int nd = d_descs.size();
00086
00087 ExplicitBitVect ebv(nd);
00088 int bi;
00089 for (unsigned int i = 0; i < nd; i++) {
00090 bi = d_descs[i];
00091 if (fp[bi]) {
00092 ebv.SetBit(i);
00093 }
00094 }
00095 for (unsigned i = 1; i < nd; i++) {
00096 unsigned int itab = i*(i-1)/2;
00097 if (ebv[i]) {
00098 for (unsigned int j = 0; j < i; j++) {
00099 if ( ebv[j]) {
00100 dp_corrMat[itab + j] += 1;
00101 }
00102 }
00103 }
00104 }
00105 d_nExamples++;
00106 };
00107
00108 private:
00109 RDKit::INT_VECT d_descs;
00110 double *dp_corrMat;
00111 int d_nExamples;
00112 };
00113
00114 }
00115
00116 #endif
00117
00118