Fingerprint Types¶
A fingerprint is a bitvector. To reflect this the OEFingerPrint class derives from the OEBitVector class. The difference is that OEFingerPrint has a type that represents how the fingerprint is generated. Fingerprints may only be compared if they are generated in the same way. Therefore, the following restriction is introduced:
Warning
When two fingerprints are subjected to similarity calculation their type has to be identical.
Listing 1
shows how to create different fingerprint
objects (OEFingerPrint) and identify or
compare their types.
Listing 1: Fingerprint type
int main( )
{
OEFingerPrint fpA;
OEFingerPrint fpB;
if (!fpA)
std::cout << "uninitialized fingerprint" << std::endl;
OEGraphMol mol;
OESmilesToMol(mol, "c1ccccc1");
OEMakeFP(fpA, mol, OEFPType::Path);
OEMakeFP(fpB, mol, OEFPType::Lingo);
if (OEIsFPType(fpA, OEFPType::Lingo))
std::cout << "Lingo" << std::endl;
if (OEIsFPType(fpA, OEFPType::Path))
std::cout << "Path" << std::endl;
if (OEIsSameFPType(fpA, fpB))
std::cout << "same fingerprint types" << std::endl;
else
std::cout << "different fingerprint types" << std::endl;
return 0;
}
The output of Listing 1
is the following:
uninitialized fingerprint
Path
different fingerprint types
Two fingerprints are considered to be equivalent only if they have the same fingerprint type (OEFPTypeBase) and have identical bit-vectors (OEBitVector). The following code snippet shows how to compare two OEFingerPrint objects.
if (fpA == fpB)
std::cout << "same fingerprints" << std::endl;
else
std::cout << "different fingerprints" << std::endl;
The following code snippet shows how to initialize a
OEFingerPrint object by
using the type of another fingerprint.
The type of a fingerprint is accessed by the
OEFingerPrint::GetFPTypeBase
method.
OEFingerPrint fpA;
OEMakePathFP(fpA, mol);
OEFingerPrint fpB;
OEMakeFP(fpB, mol, fpA.GetFPTypeBase());
Fingerprint parameters¶
The User-defined Fingerprint chapter gives examples of how user defined fingerprints can be generated by defining, for example, the atom and bond properties that will be encoded into the fingerprints.
In order to ensure that only equivalent fingerprints can be compared,
the fingerprint type stores the parameters being used in the
generation process.
The OEFPTypeBase::GetFPTypeString
method returns
the string representation of the fingerprint type that includes
information about the parameters being used.
OEFingerPrint fpA;
OEMakeFP(fpA, mol, OEFPType::Path);
std::cout << fpA.GetFPTypeBase()->GetFPTypeString() << std::endl;
The output of the preceding snippet is the following:
Path,ver=2.0.0,size=4096,bonds=0-5,atype=AtmNum|Arom|Chiral|FCharge|HvyDeg|Hyb|EqHalo,
btype=Order|Chiral
Note
The returned string does not include newline characters, the string was broken into two separate lines here only for better readability.
The following Listing 2
shows how to extract
the parameters of a fingerprint from a string representation by
using the OEFPTypeParams class.
Listing 2: Fingerprint parameters
int main( )
{
const OEFPTypeBase* fptype = OEGetFPType(OEFPType::Path);
OEFPTypeParams prms(fptype->GetFPTypeString());
cout << "version = " << OEGetFingerPrintVersionString(prms.GetVersion()) << endl;
cout << "number of bits = " << prms.GetNumBits() << endl;
cout << "min bonds = " << prms.GetMinDistance() << endl;
cout << "max bonds = " << prms.GetMaxDistance() << endl;
cout << "atom types = " <<OEGetFPAtomType(prms.GetAtomTypes()) << endl;
cout << "bond types = " << OEGetFPBondType(prms.GetBondTypes()) << endl;
return 0;
}
The output of Listing 2
is the following:
version = 2.0.0
number of bits = 4096
min bonds = 0
max bonds = 5
atom types = AtmNum|Arom|Chiral|FCharge|HvyDeg|Hyb|EqHalo
bond types = Order|Chiral
See also
User-defined Fingerprint chapter
OEIsValidFPTypeString
functionOEGetFPType
functionOEFPAtomType
namespaceOEGetFPAtomType
functionOEFPBondType
namespaceOEGetFPBondType
function
Fingerprint version number¶
Each fingerprint type additionally has a version number. Version
numbers are introduced in order to keep track of changes in the
fingerprint generation algorithm itself.
The OEFPTypeBase::GetFPVersionString
method
returns the string representation of the fingerprint version.
OEFingerPrint fpB;
OEMakeFP(fpB, mol, OEFPType::Circular);
std::cout << fpB.GetFPTypeBase()->GetFPVersionString() << std::endl;
The output of the preceding snippet is the following:
2.0.0
Warning
The version number of the fingerprints will not be changed with each release. It will be incremented only if modifications or bug fixes to the corresponding algorithm would result in generating a different bit-vector for the same molecules.
Fingerprints with an old version number will be still readable and comparable with each other but not with fingerprints which have different version number.