diff --git a/modules/db/pymod/export_linear_db.cc b/modules/db/pymod/export_linear_db.cc index 6ee2d2f0191be3b4a78a3652d0edf3da2ca33483..2908bdb8c6eea57c988bd11c9605b2825ab0891b 100644 --- a/modules/db/pymod/export_linear_db.cc +++ b/modules/db/pymod/export_linear_db.cc @@ -166,23 +166,32 @@ struct DisCoDataContainers { LinearPositionContainerPtr position_container; }; +// helper struct to wrap output -void WrapExtractTemplateDataDisCo(const String& entry_name, const String& chain_name, - const ost::seq::AlignmentHandle& aln, - DisCoDataContainers& data_containers, - boost::python::list& residue_numbers, - geom::Vec3List& positions) { +struct ExtractedDisCoData{ + std::vector<int> residue_numbers; + geom::Vec3List ca_positions; +}; +typedef boost::shared_ptr<ExtractedDisCoData> ExtractedDisCoDataPtr; +list WrapExtractedDisCoDataGetResNums(ExtractedDisCoDataPtr ptr) { + list residue_numbers; + VecToList(ptr->residue_numbers, residue_numbers); + return residue_numbers; +} - std::vector<int> v_residue_numbers; +ExtractedDisCoDataPtr WrapExtractTemplateDataDisCo(const String& entry_name, + const String& chain_name, + const ost::seq::AlignmentHandle& aln, + DisCoDataContainers& data_containers) { + ExtractedDisCoDataPtr ptr(new ExtractedDisCoData); ost::db::ExtractTemplateDataDisCo(entry_name, chain_name, aln, data_containers.indexer, data_containers.seqres_container, data_containers.atomseq_container, data_containers.position_container, - v_residue_numbers, - positions); - residue_numbers = boost::python::list(); - VecToList(v_residue_numbers, residue_numbers); + ptr->residue_numbers, + ptr->ca_positions); + return ptr; } @@ -217,19 +226,27 @@ struct GMQEDataContainers { LinearPositionContainerPtr cb_position_container; }; +// helper struct to wrap output +struct ExtractedGMQEData{ + std::vector<int> residue_numbers; + String dssp; + geom::Vec3List n_positions; + geom::Vec3List ca_positions; + geom::Vec3List c_positions; + geom::Vec3List cb_positions; +}; +typedef boost::shared_ptr<ExtractedGMQEData> ExtractedGMQEDataPtr; +list WrapExtractedGMQEDataGetResNums(ExtractedGMQEDataPtr ptr) { + list residue_numbers; + VecToList(ptr->residue_numbers, residue_numbers); + return residue_numbers; +} -void WrapExtractTemplateDataGMQE(const String& entry_name, - const String& chain_name, - const ost::seq::AlignmentHandle& aln, - GMQEDataContainers& data_containers, - boost::python::list& residue_numbers, - String& dssp, - geom::Vec3List& n_positions, - geom::Vec3List& ca_positions, - geom::Vec3List& c_positions, - geom::Vec3List& cb_positions) { - - std::vector<int> v_residue_numbers; +ExtractedGMQEDataPtr WrapExtractTemplateDataGMQE(const String& entry_name, + const String& chain_name, + const ost::seq::AlignmentHandle& aln, + GMQEDataContainers& data_containers) { + ExtractedGMQEDataPtr ptr(new ExtractedGMQEData); ost::db::ExtractTemplateDataGMQE(entry_name, chain_name, aln, data_containers.indexer, data_containers.seqres_container, @@ -239,9 +256,10 @@ void WrapExtractTemplateDataGMQE(const String& entry_name, data_containers.ca_position_container, data_containers.c_position_container, data_containers.cb_position_container, - v_residue_numbers, dssp, n_positions, - ca_positions, c_positions, cb_positions); - VecToList(v_residue_numbers, residue_numbers); + ptr->residue_numbers, ptr->dssp, + ptr->n_positions, ptr->ca_positions, + ptr->c_positions, ptr->cb_positions); + return ptr; } } @@ -309,15 +327,18 @@ void export_linear_db() { .def_readonly("indexer", &DisCoDataContainers::indexer) .def_readonly("seqres_container", &DisCoDataContainers::seqres_container) .def_readonly("atomseq_container", &DisCoDataContainers::atomseq_container) - .def_readonly("position_container", &DisCoDataContainers::position_container) + .def_readonly("ca_position_container", &DisCoDataContainers::position_container) + ; + + class_<ExtractedDisCoData, ExtractedDisCoDataPtr>("ExtractedDisCoData", no_init) + .add_property("residue_numbers", &WrapExtractedDisCoDataGetResNums) + .def_readonly("ca_positions", &ExtractedDisCoData::ca_positions) ; def("ExtractTemplateDataDisCo", &WrapExtractTemplateDataDisCo, (arg("entry_name"), arg("chain_name"), arg("aln"), - arg("data_containers"), - arg("residue_numbers"), - arg("positions"))); + arg("data_containers"))); class_<GMQEDataContainers>("GMQEDataContainers", init<const String&, const String&, @@ -337,16 +358,18 @@ void export_linear_db() { .def_readonly("cb_position_container", &GMQEDataContainers::cb_position_container) ; + class_<ExtractedGMQEData, ExtractedGMQEDataPtr>("ExtractedGMQEData", no_init) + .add_property("residue_numbers", &WrapExtractedGMQEDataGetResNums) + .def_readonly("dssp", &ExtractedGMQEData::dssp) + .def_readonly("n_positions", &ExtractedGMQEData::n_positions) + .def_readonly("ca_positions", &ExtractedGMQEData::ca_positions) + .def_readonly("c_positions", &ExtractedGMQEData::c_positions) + .def_readonly("cb_positions", &ExtractedGMQEData::cb_positions) + ; + def("ExtractTemplateDataGMQE", &WrapExtractTemplateDataGMQE, (arg("entry_name"), arg("chain_name"), arg("aln"), - arg("data_containers"), - arg("residue_numbers"), - arg("dssp"), - arg("n_positions"), - arg("ca_positions"), - arg("c_positions"), - arg("cb_positions"))); - + arg("data_containers"))); }