From 298a26abf3e8ca94a3972ee8a4e094439dab6c54 Mon Sep 17 00:00:00 2001
From: Valerio Mariani <valerio.mariani@unibas.ch>
Date: Fri, 23 Mar 2012 16:30:32 +0100
Subject: [PATCH] Workaround for circular dependency ost.mol.alg <-> ost.conop

---
 modules/mol/alg/pymod/wrap_mol_alg.cc  |  1 +
 modules/mol/alg/src/ldt.cc             |  2 +-
 modules/mol/alg/src/local_dist_test.cc | 32 ++++++++++++++++++++++++--
 modules/mol/alg/src/local_dist_test.hh |  2 ++
 4 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/modules/mol/alg/pymod/wrap_mol_alg.cc b/modules/mol/alg/pymod/wrap_mol_alg.cc
index fa04f27d2..fb68ece36 100644
--- a/modules/mol/alg/pymod/wrap_mol_alg.cc
+++ b/modules/mol/alg/pymod/wrap_mol_alg.cc
@@ -141,5 +141,6 @@ BOOST_PYTHON_MODULE(_ost_mol_alg)
   
   def("FillClashingDistances",&fill_clashing_distances_wrapper);
   def("FillStereoChemicalParams",&fill_stereochemical_params_wrapper);
+  def("IsStandardResidue",&mol::alg::IsStandardResidue);
   
 }
\ No newline at end of file
diff --git a/modules/mol/alg/src/ldt.cc b/modules/mol/alg/src/ldt.cc
index d11ce8f22..0b9610308 100644
--- a/modules/mol/alg/src/ldt.cc
+++ b/modules/mol/alg/src/ldt.cc
@@ -85,7 +85,7 @@ std::pair<int,int> compute_coverage (const EntityView& v,const GlobalDistanceLis
   {
     ResNum rnum = (*i)[0].GetFirstAtom().GetResNum();
     String rname = (*i)[0].GetFirstAtom().GetResidueName();
-    if (ost::conop::ResidueNameToOneLetterCode(rname)!='X') {
+    if (IsStandardResidue(rname)) {
       second++;
       if (vchain.FindResidue(rnum)) {
         first++;     
diff --git a/modules/mol/alg/src/local_dist_test.cc b/modules/mol/alg/src/local_dist_test.cc
index ed589a255..ecf9a61eb 100644
--- a/modules/mol/alg/src/local_dist_test.cc
+++ b/modules/mol/alg/src/local_dist_test.cc
@@ -1,6 +1,5 @@
 #include <ost/log.hh>
 #include <ost/mol/mol.hh>
-#include <ost/conop/amino_acids.hh>
 #include "local_dist_test.hh"
 #include <boost/concept_check.hpp>
 
@@ -235,6 +234,35 @@ std::pair<Real, Real> calc_overlap2(const seq::ConstSequenceHandle& ref_seq,
 
 }
 
+bool IsStandardResidue(String rn)
+{
+  String upper_rn=rn;
+  std::transform(rn.begin(),rn.end(),rn.begin(),toupper);
+  if (upper_rn == "ALA" ||    
+  upper_rn == "ARG" ||
+  upper_rn == "ASN" ||
+  upper_rn == "ASP" ||
+  upper_rn == "GLN" ||
+  upper_rn == "GLU" ||
+  upper_rn == "LYS" ||
+  upper_rn == "SER" ||
+  upper_rn == "CYS" ||      
+  upper_rn == "TYR" ||  
+  upper_rn == "TRP" || 
+  upper_rn == "THR" ||
+  upper_rn == "VAL" ||
+  upper_rn == "ILE" ||
+  upper_rn == "MET" ||
+  upper_rn == "LEU" ||  
+  upper_rn == "GLY" ||  
+  upper_rn == "PRO" ||  
+  upper_rn == "HIS" ||  
+  upper_rn == "PHE") {
+    return true;
+  }  
+  return false;
+}  
+
 bool UniqueAtomIdentifier::operator==(const UniqueAtomIdentifier& rhs) const
 {
   if (chain_ == rhs.GetChainName() && 
@@ -285,7 +313,7 @@ GlobalDistanceList CreateDistanceList(const EntityView& ref,Real max_dist)
  ResidueViewList ref_residues=ref.GetChainList()[0].GetResidueList();
  for (ResidueViewList::iterator i=ref_residues.begin(), e=ref_residues.end(); i!=e; ++i) {
    ResidueView rview = (*i);
-   if (ost::conop::ResidueNameToOneLetterCode(rview.GetName())!='X') {
+   if (IsStandardResidue(rview.GetName())) {
      ResidueDistanceList res_dist_list;
      AtomViewList ref_atoms=(*i).GetAtomList();
      AtomViewList within;
diff --git a/modules/mol/alg/src/local_dist_test.hh b/modules/mol/alg/src/local_dist_test.hh
index 8c757badd..74e0f4f29 100644
--- a/modules/mol/alg/src/local_dist_test.hh
+++ b/modules/mol/alg/src/local_dist_test.hh
@@ -85,6 +85,8 @@ Real DLLEXPORT_OST_MOL_ALG LocalDistTest(const ost::seq::AlignmentHandle& aln,
 Real DLLEXPORT_OST_MOL_ALG LDTHA(EntityView& v, const GlobalDistanceList& global_dist_list);
 
 GlobalDistanceList CreateDistanceList(const EntityView& ref,Real max_dist);
+bool IsStandardResidue(String rn);
+
 
 
 }}}
-- 
GitLab