diff --git a/modules/mol/alg/src/lddt.cc b/modules/mol/alg/src/lddt.cc index 11e328e4deb40c00117dd666337af25a57112fc3..dcde44f0f8111a01094e26da90ca84d0deb54731 100644 --- a/modules/mol/alg/src/lddt.cc +++ b/modules/mol/alg/src/lddt.cc @@ -311,39 +311,20 @@ int main (int argc, char **argv) // if the reference file is a comma-separated list of files, switches to multi- // reference mode GlobalRDMap glob_dist_list; - String ref_file=files.back(); + String ref_file=files.back(); ost::StringRef ref_file_sr(ref_file.c_str(),ref_file.length()); std::vector<StringRef> ref_file_split_sr=ref_file_sr.split(','); - if (ref_file_split_sr.size()==1) { - std::cout << "Multi-reference mode: Off" << std::endl; - String ref_filename = ref_file_split_sr[0].str(); + for (std::vector<StringRef>::const_iterator ref_file_split_sr_it = ref_file_split_sr.begin(); + ref_file_split_sr_it != ref_file_split_sr.end();++ref_file_split_sr_it) { + String ref_filename = ref_file_split_sr_it->str(); EntityHandle ref=load(ref_filename, profile); if (!ref) { exit(-1); - } - EntityView refview=ref.GetChainList()[0].Select("peptide=true"); - ref_list.push_back(refview); - glob_dist_list = CreateDistanceList(refview,radius); - } else { - std::cout << "Multi-reference mode: On" << std::endl; - for (std::vector<StringRef>::const_iterator ref_file_split_sr_it = ref_file_split_sr.begin(); - ref_file_split_sr_it != ref_file_split_sr.end();++ref_file_split_sr_it) { - String ref_filename = ref_file_split_sr_it->str(); - EntityHandle ref=load(ref_filename, profile); - if (!ref) { - exit(-1); - } - if (! ref_list.empty()) { - if (ref_list[0].GetChainList()[0].GetName()!=ref.GetChainList()[0].GetName()) { - std::cout << "ERROR: First chains in the reference structures have different names" << std::endl; - exit(-1); - } - } - EntityView refview=ref.GetChainList()[0].Select("peptide=true"); - ref_list.push_back(ref.CreateFullView()); - } - glob_dist_list = CreateDistanceListFromMultipleReferences (ref_list,cutoffs,sequence_separation,radius); - } + } + ref_list.push_back(ref.CreateFullView()); + } + CleanlDDTReferences(ref_list); + glob_dist_list = PreparelDDTGlobalRDMap(ref_list,cutoffs,sequence_separation,radius); files.pop_back(); // prints out parameters used in the lddt calculation diff --git a/modules/mol/alg/src/local_dist_diff_test.cc b/modules/mol/alg/src/local_dist_diff_test.cc index aad66e7a639e265256fe5511a628203f2e57df53..b6e0ecc046cca187cedc3473657a7de62e7c0a31 100644 --- a/modules/mol/alg/src/local_dist_diff_test.cc +++ b/modules/mol/alg/src/local_dist_diff_test.cc @@ -536,6 +536,36 @@ Real LDDTHA(EntityView& v, const GlobalRDMap& global_dist_list, int sequence_sep return static_cast<Real>(total_ov.first)/(static_cast<Real>(total_ov.second) ? static_cast<Real>(total_ov.second) : 1); } + +void CleanlDDTReferences(std::vector<EntityView>& ref_list){ + for (int i=0;i<ref_list.size();i++) { + if (ref_list[0].GetChainList()[0].GetName()!=ref_list[i].GetChainList()[0].GetName()) { + std::cout << "ERROR: First chains in the reference structures have different names" << std::endl; + exit(-1); + } + ref_list[i] = ref_list[i].GetChainList()[0].Select("peptide=true"); + } +} + +GlobalRDMap PreparelDDTGlobalRDMap(const std::vector<EntityView>& ref_list, + std::vector<Real>& cutoff_list, + int sequence_separation, + Real max_dist){ + GlobalRDMap glob_dist_list; + if (ref_list.size()==1) { + std::cout << "Multi-reference mode: Off" << std::endl; + glob_dist_list = CreateDistanceList(ref_list[0], max_dist); + } else { + std::cout << "Multi-reference mode: On" << std::endl; + glob_dist_list = CreateDistanceListFromMultipleReferences(ref_list, + cutoff_list, + sequence_separation, + max_dist); + } + + return glob_dist_list; +} + // debugging code /* Real OldStyleLDDTHA(EntityView& v, const GlobalRDMap& global_dist_list) diff --git a/modules/mol/alg/src/local_dist_diff_test.hh b/modules/mol/alg/src/local_dist_diff_test.hh index 9dd2f230617ac1b0b795ec6a7e467a80c1485655..9eb5829fe6d9790b0030beab56067666469fbca7 100644 --- a/modules/mol/alg/src/local_dist_diff_test.hh +++ b/modules/mol/alg/src/local_dist_diff_test.hh @@ -135,6 +135,15 @@ void DLLEXPORT_OST_MOL_ALG PrintResidueRDMap(const ResidueRDMap& res_dist_list); // circular dependencies bool DLLEXPORT_OST_MOL_ALG IsStandardResidue(String rn); +void DLLEXPORT_OST_MOL_ALG CleanlDDTReferences(std::vector<EntityView>& ref_list); + +// Prepare GlobalRDMap from reference list +GlobalRDMap DLLEXPORT_OST_MOL_ALG PreparelDDTGlobalRDMap( + const std::vector<EntityView>& ref_list, + std::vector<Real>& cutoff_list, + int sequence_separation, + Real max_dist); + }}} #endif