コード例 #1
0
ファイル: AvalonTools.cpp プロジェクト: rdkit/rdkit
void reaccsToFingerprint(struct reaccs_molecule_t *molPtr, ExplicitBitVect &res,
                         unsigned int bitFlags = 32767U, bool isQuery = false,
                         bool resetVect = true, unsigned int nBytes = 64) {
  PRECONDITION(molPtr, "bad molecule");
  PRECONDITION(res.getNumBits() >= nBytes * 8U, "res too small");
  if (resetVect) res.clearBits();

  char *fingerprint = getFp(molPtr, bitFlags, isQuery, nBytes);

  for (unsigned int i = 0; i < nBytes; ++i) {
    char byte = fingerprint[i];
    if (byte) {
      char mask = 1;
      for (int j = 0; j < 8; ++j) {
        if (byte & mask) {
          res.setBit(i * 8 + j);
        }
        mask = mask << 1;
      }
    }
  }
  MyFree(fingerprint);
};