diff --git a/modules/mol/alg/pymod/wrap_mol_alg.cc b/modules/mol/alg/pymod/wrap_mol_alg.cc index a5db8de3560a56b1f31bead07cfc70b947850b79..4f1f03d4ef8424beb299d419c577cce61eebb0a8 100644 --- a/modules/mol/alg/pymod/wrap_mol_alg.cc +++ b/modules/mol/alg/pymod/wrap_mol_alg.cc @@ -35,8 +35,8 @@ namespace { Real (*ldt_a)(const mol::EntityView&, const mol::EntityView& ref, Real, Real)=&mol::alg::LocalDistTest; Real (*ldt_b)(const seq::AlignmentHandle&,Real, Real, int, int)=&mol::alg::LocalDistTest; -mol::EntityView (*fc_a)(const mol::EntityView&, Real)=&mol::alg::FilterClashes; -mol::EntityView (*fc_b)(const mol::EntityHandle&, Real)=&mol::alg::FilterClashes; +mol::EntityView (*fc_a)(const mol::EntityView&, Real,bool)=&mol::alg::FilterClashes; +mol::EntityView (*fc_b)(const mol::EntityHandle&, Real, bool)=&mol::alg::FilterClashes; } BOOST_PYTHON_MODULE(_mol_alg) @@ -48,8 +48,8 @@ BOOST_PYTHON_MODULE(_mol_alg) def("LocalDistTest", ldt_a); def("LocalDistTest", ldt_b, (arg("ref_index")=0, arg("mdl_index")=1)); - def("FilterClashes", fc_a, (arg("ent"), arg("tolerance")=0.1)); - def("FilterClashes", fc_b, (arg("ent"), arg("tolerance")=0.1)); + def("FilterClashes", fc_a, (arg("ent"), arg("tolerance")=0.1, arg("always_remove_bb")=false)); + def("FilterClashes", fc_b, (arg("ent"), arg("tolerance")=0.1, arg("always_remove_bb")=false)); def("SuperposeFrames", &ost::mol::alg::SuperposeFrames, (arg("source"), arg("sel")=ost::mol::EntityView(), arg("begin")=0, arg("end")=-1, arg("ref")=-1)); diff --git a/modules/mol/alg/src/filter_clashes.cc b/modules/mol/alg/src/filter_clashes.cc index 12c539b3ecdd76b7022bed31141675060fa0dd85..7a176cba2841155aa0311f3c5c00c505f62b22c8 100644 --- a/modules/mol/alg/src/filter_clashes.cc +++ b/modules/mol/alg/src/filter_clashes.cc @@ -69,7 +69,8 @@ Real GetThreshold(const String& ele1, const String& ele2) { } -EntityView FilterClashes(const EntityView& ent, Real tolerance) +EntityView FilterClashes(const EntityView& ent, Real tolerance, + bool always_remove_bb) { EntityView filtered=ent.CreateEmptyView(); ResidueViewList residues=ent.GetResidueList(); @@ -106,6 +107,10 @@ EntityView FilterClashes(const EntityView& ent, Real tolerance) Real threshold=GetThreshold(ele1, ele2)-tolerance; if (d<threshold*threshold) { remove_sc=true; + if (always_remove_bb==true) { + remove_bb=true; + continue; + } String name=atom.GetName(); if (name=="CA" || name=="N" || name=="O" || name=="C") { remove_bb=true; @@ -134,9 +139,10 @@ EntityView FilterClashes(const EntityView& ent, Real tolerance) } -EntityView FilterClashes(const EntityHandle& ent, Real tolerance) +EntityView FilterClashes(const EntityHandle& ent, Real tolerance, + bool always_remove_bb) { - return FilterClashes(ent.CreateFullView(), tolerance); + return FilterClashes(ent.CreateFullView(), tolerance, always_remove_bb); } diff --git a/modules/mol/alg/src/filter_clashes.hh b/modules/mol/alg/src/filter_clashes.hh index 87fd770311435ec4115311c342aa2bec7fd4309f..043510d9817b5c2260748ad4b3bda3478e2adfab 100644 --- a/modules/mol/alg/src/filter_clashes.hh +++ b/modules/mol/alg/src/filter_clashes.hh @@ -26,10 +26,12 @@ namespace ost { namespace mol { namespace alg { EntityView DLLEXPORT_OST_MOL_ALG FilterClashes(const EntityView& ent, - Real tolerance=0.1); + Real tolerance=0.1, + bool always_remove_bb=false); EntityView DLLEXPORT_OST_MOL_ALG FilterClashes(const EntityHandle& ent, - Real tolerance=0.1); + Real tolerance=0.1, + bool always_remove_bb=false); }}}