Chemical Descriptors Library: Topological Pharmacophores
|
Client Algorithms
|
|
Topological Pharmacophores
Pharmacophores provides yet another way to describe structural properties of
molecules. However, in this case, due to the pharmacophore abstraction,
information of the binding site of the target is implicitly expressed.
Pharmacophores gives information on the position of atomic properties relevant
to bind a molecule into the pocket of a protein.
Many pharmacophore abstractions exists out there. We use a simple abstraction of
the pharmacophore concept that gives some advantages for virtual library design.
This is the topological pharmacophores described in [Schneider, 1999].
The advantage of this abstraction is that no 3d information on the target is
needed, and that is flexible enough to allow 'scaffold hopping'. The
atomic properties considered are: h-donor, h-acceptor, partial charge,
and lipophilicity.
So, basically you will provide an active template molecule, and then you will
calculate distances on the pharmacophore matrix from that template to other
molecules which you got no clue of what activity they might have.
Usually, this distance information will be a criteria for bioisosteric similarity.
Prototype
template <class Molecule>
void assign_cats_matrix(Molecule& m);
Arguments
Argument | Description | Model of |
m |
The molecular type |
CDL molecule type containing cats_mol_props as a property |
Description
The molecule must contain the cats_mol_props between its molecule
properties. If the molecule does not provide this property, you will get a
compilation error when compiling the calling.
After the calling, the information will be stored in the cats matrix of
the molecule property.
Definition
// For the molecular property
#include <morpho/cdl/pharmacophore/cats/properties/cats_mol_prop.hpp>
// For the property accessors
#include <morpho/cdl/pharmacophore/cats/properties/cats_mol_props_selectors.hpp>
// For the calculation of the cats matrix
#include <morpho/cdl/pharmacophore/cats/cats.hpp>
Preconditions
The molecule must contain the cats_mol_props between its molecule
properties. Also, the distance_matrix property of the molecule must
have been initialized.
Complexity
Assuming the distance matrix is already assigned (as done by the default
constructor of the molecule), the complexity is linear applications
of the atom type predicate.
Example
Suppose you want to calculate the Tanimoto similarity of an active template
to your virtual drug:
Pay special attention to the construction of the molecular type.
//---cdl
#include <morpho/cdl/similarity/similarity.hpp>
#include <morpho/cdl/pharmacophore/cats/properties/cats_mol_props_selectors.hpp>
#include <morpho/cdl/pharmacophore/cats/cats>
//---std
#include <iostream>
int main() {
using namespace morpho::cdl;
typedef cats_mol_props<> cats_mol_prop_t;
typedef boost::property<mol_propsS, molecular_properties<>,
boost::property<cats_mol_propsS, cats_mol_prop_t> > plus_cats_props_t;
typedef molecule<double,plus_cats_props_t> cats_nail_t;
nail_juice<cats_nail_t> j1, j2;
get_juice_from_stream(std::cin,j1,0,smile_formatT());
get_juice_from_stream(std::cin,j2,1,smile_formatT());
cats_nail_t template(j1), no_clue(j2);
assign_cats_matrix(template);
assign_cats_matrix(no_clue);
// Now get the matrices :
MolProperty<cats_matrixS,cats_nail_t>::result_type&
cats_template = MolProperty<cats_matrixS,cats_nail_t>::get(template);
MolProperty<cats_matrixS,cats_nail_t>::result_type&
cats_no_clue = MolProperty<cats_matrixS,cats_nail_t>::get(template);
std::cout << "The taminoto distance of the CATS matrix between : ";
std::cout << get_can_smile(template) << " and " << get_can_smile(no_clue);
std::cout << " is : " << tanimoto(cats_template,cats_no_clue) << '\n';
std::cout << "And to show you the that the Tanimoto function fulfills the requirenment";
std::cout << " of a property function :\n";
std::cout << " ->same molecule : distance = " << tanimoto(cats_template,cats_template);
std::cout << " <- should be cero, otherwise call Mr. Tanimoto\n";
std::cout << " ->inversion prop : distance = " << tanimoto(cats_no_clue,cats_template) << '\n';
std::cout << " <- should equal the first distance, otherwise call Mr. Tanimoto\n";
return 0;
}
References
- Schneider, G., Neidhart, W., Giller, T., Schmid G., "'Scaffold-Hopping' by Topological Pharmacophore Search:
A Contribution to Virtual Screening". Communications of Angew. Chem. Int. Ed. 1999,38,No.19.
Copyright (c) Vladimir Josef Sykora & Morphochem AG 2003