RDKit
Open-source cheminformatics and machine learning.
MolHash.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // Copyright (C) 2014 Novartis Institutes for BioMedical Research
4 //
5 // @@ All Rights Reserved @@
6 // This file is part of the RDKit.
7 // The contents are covered by the terms of the BSD license
8 // which is included in the file license.txt, found at the root
9 // of the RDKit source tree.
10 //
11 #include <RDGeneral/export.h>
12 #pragma once
13 #include <map>
14 #include <vector>
15 #include <string>
16 #include <stdexcept>
17 #include <boost/cstdint.hpp>
18 #include "../RDKitBase.h"
19 
20 namespace RDKit {
21 namespace MolHash {
22 typedef boost::uint32_t HashCodeType;
23 
25  const ROMol &mol, const std::vector<unsigned> *atomsToUse = 0,
26  const std::vector<unsigned> *bondsToUse =
27  0, // ?? listed bonds between/to/from excluded atom(s) ??
28  const std::vector<boost::uint32_t> *atomCodes = 0,
29  const std::vector<boost::uint32_t> *bondCodes = 0);
30 
31 enum CodeFlags // bitwise flags to combine and compute atom/bond codes
32 { CF_NO_LABELS = 0x0000,
33  CF_ELEMENT = 0x0001,
34  CF_CHARGE = 0x0002,
35  CF_VALENCE = 0x0004,
36  CF_ISOTOPE = 0x0008,
38  CF_ATOM_AROMATIC = 0x0020,
39  CF_ATOM_ALL = 0x00FF,
41  0x0100, // ignore AROMATIZATION if corresponding flag is not specified
44  CF_BOND_ORDER | CF_BOND_AROMATIZATION, // exact type value with aromatic
46  0x0400, // include bond chirality information into bond code
47  CF_BOND_IN_RING = 0x0800,
48  CF_BOND_ALL = 0xFF00,
49  CF_ALL = 0xFFFF,
50 };
51 
53  const ROMol &mol, boost::uint64_t flags // CodeFlags constants combination
54  ,
55  std::vector<boost::uint32_t> *atomCodes // NULL is allowed
56  ,
57  std::vector<boost::uint32_t> *bondCodes); // NULL is allowed
58 
59 #pragma pack(push, 1)
61  boost::uint16_t Version;
62  boost::uint16_t Reserved;
63  boost::uint16_t NumAtoms;
64  boost::uint16_t NumBonds;
65  boost::uint32_t FormulaCRC32;
66  HashCodeType NonChiralAtomsHash;
67  HashCodeType NonChiralBondsHash;
68  HashCodeType ChiralAtomsHash;
69  HashCodeType ChiralBondsHash;
70  HashCodeType ChiralityHash;
71 
72  public:
73  HashSet() { memset(this, 0, sizeof(*this)); }
74 };
75 #pragma pack(pop)
76 
78  const std::vector<unsigned> *atomsToUse = 0,
79  const std::vector<unsigned> *bondsToUse = 0);
80 
82  const ROMol &mol, const std::vector<unsigned> *atomsToUse = 0,
83  const std::vector<unsigned> *bondsToUse = 0);
84 
85 RDKIT_MOLHASH_EXPORT std::string encode(const void *bin,
86  size_t size); // binary data to Base64 encoded string
87 }
88 }
RDKIT_MOLHASH_EXPORT void generateMoleculeHashSet(const ROMol &mol, HashSet &res, const std::vector< unsigned > *atomsToUse=0, const std::vector< unsigned > *bondsToUse=0)
HashCodeType NonChiralBondsHash
Definition: MolHash.h:67
HashCodeType ChiralBondsHash
Definition: MolHash.h:69
boost::uint16_t NumBonds
Definition: MolHash.h:64
boost::uint32_t FormulaCRC32
Definition: MolHash.h:65
HashCodeType ChiralityHash
Definition: MolHash.h:70
HashCodeType NonChiralAtomsHash
Definition: MolHash.h:66
RDKIT_MOLHASH_EXPORT std::string encode(const void *bin, size_t size)
boost::uint16_t Reserved
Definition: MolHash.h:62
RDKIT_MOLHASH_EXPORT HashCodeType generateMoleculeHashCode(const ROMol &mol, const std::vector< unsigned > *atomsToUse=0, const std::vector< unsigned > *bondsToUse=0, const std::vector< boost::uint32_t > *atomCodes=0, const std::vector< boost::uint32_t > *bondCodes=0)
HashCodeType ChiralAtomsHash
Definition: MolHash.h:68
Std stuff.
Definition: Atom.h:30
boost::uint16_t NumAtoms
Definition: MolHash.h:63
boost::uint32_t HashCodeType
Definition: MolHash.h:22
boost::uint16_t Version
Definition: MolHash.h:61
RDKIT_MOLHASH_EXPORT void fillAtomBondCodes(const ROMol &mol, boost::uint64_t flags, std::vector< boost::uint32_t > *atomCodes, std::vector< boost::uint32_t > *bondCodes)
#define RDKIT_MOLHASH_EXPORT
Definition: export.h:398