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

ArgumentDescriptionModel 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

  1. 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
SourceForge.net Logo