double pickRandomDistMat(const BoundsMatrix &mmat, RDNumeric::SymmMatrix<double> &distMat, RDKit::double_source_type &rng) { // make sure the sizes match up unsigned int npt = mmat.numRows(); CHECK_INVARIANT(npt == distMat.numRows(), "Size mismatch"); double largestVal = -1.0; double *ddata = distMat.getData(); for (unsigned int i = 1; i < npt; i++) { unsigned int id = i * (i + 1) / 2; for (unsigned int j = 0; j < i; j++) { double ub = mmat.getUpperBound(i, j); double lb = mmat.getLowerBound(i, j); CHECK_INVARIANT(ub >= lb, ""); double rval = rng(); // std::cerr<<i<<"-"<<j<<": "<<rval<<std::endl; double d = lb + (rval) * (ub - lb); ddata[id + j] = d; if (d > largestVal) { largestVal = d; } } } return largestVal; }
double pickRandomDistMat(const BoundsMatrix &mmat, RDNumeric::SymmMatrix<double> &distMat, int seed) { // make sure the sizes match up unsigned int npt = mmat.numRows(); CHECK_INVARIANT(npt == distMat.numRows(), "Size mismatch"); RDKit::rng_type &generator = RDKit::getRandomGenerator(); if (seed > 0) { generator.seed(seed); } double largestVal=-1.0; double *ddata = distMat.getData(); for (unsigned int i = 1; i < npt; i++) { unsigned int id = i*(i+1)/2; for (unsigned int j = 0; j < i; j++) { double ub = mmat.getUpperBound(i,j); double lb = mmat.getLowerBound(i,j); CHECK_INVARIANT(ub >= lb, ""); double rval = RDKit::getRandomVal(); double d = lb + (rval)*(ub - lb); ddata[id+j] = d; if(d>largestVal){ largestVal=d; } } } return largestVal; }