diff --git a/modules/io/src/mol/sdf_writer.cc b/modules/io/src/mol/sdf_writer.cc index 23f5d3ed4133a277865d7b6374fc468e2a15a5e9..c2db1ddb096925a67b02f542908c2a342010f2ef 100644 --- a/modules/io/src/mol/sdf_writer.cc +++ b/modules/io/src/mol/sdf_writer.cc @@ -29,7 +29,7 @@ using boost::format; namespace { - class SDFAtomWriter : public mol::EntityVisitor { + class SDFAtomWriter : public mol::EntityViewVisitor { public: SDFAtomWriter(std::ostream& ostream, std::map<long, int>& atom_indices) : ostr_(ostream), atom_indices_(atom_indices), counter_(0) { @@ -37,7 +37,7 @@ namespace { } private: public: - virtual bool VisitAtom(const mol::AtomHandle& atom) { + virtual bool VisitAtom(const mol::AtomView& atom) { atom_indices_[atom.GetHashCode()] = ++counter_; ostr_ << format("%10.4f") % atom.GetPos()[0] << format("%10.4f") % atom.GetPos()[1] @@ -53,22 +53,22 @@ namespace { int counter_; }; - class SDFBondWriter : public mol::EntityVisitor { + class SDFBondWriter : public mol::EntityViewVisitor { public: SDFBondWriter(std::ostream& ostream, std::map<long, int>& atom_indices) : ostr_(ostream), atom_indices_(atom_indices), counter_(0) { } private: public: - virtual bool VisitAtom(const mol::AtomHandle& atom) { + virtual bool VisitAtom(const mol::AtomView& atom) { counter_++; - mol::AtomHandleList atoms = atom.GetBondPartners(); - mol::AtomHandleList::iterator atom_iter = atoms.begin(); + mol::AtomViewList atoms = atom.GetBondPartners(); + mol::AtomViewList::iterator atom_iter = atoms.begin(); for(; atom_iter != atoms.end(); ++atom_iter) { int atom_index = atom_indices_.find((*atom_iter).GetHashCode())->second; if(atom_index > counter_) { int type = 1; - mol::BondHandle bond = atom.FindBondToAtom(*atom_iter); + mol::BondHandle bond = atom.GetHandle().FindBondToAtom(atom_iter->GetHandle()); if(bond.IsValid()) type = bond.GetBondOrder(); ostr_ << format("%3i") % counter_ << format("%3i") % atom_index @@ -105,11 +105,11 @@ void SDFWriter::Write(const mol::EntityView& ent) { } void SDFWriter::Write(const mol::EntityHandle& ent) { - mol::EntityHandle non_const_handle = ent; - non_const_handle.Apply(*this); + mol::EntityView non_const_view = ent.CreateFullView(); + non_const_view.Apply(*this); } -bool SDFWriter::VisitChain(const mol::ChainHandle& chain) { +bool SDFWriter::VisitChain(const mol::ChainView& chain) { // print end of molecule line if(counter_ != 0) { ostr_ << "$$$$" << std::endl; @@ -138,7 +138,7 @@ bool SDFWriter::VisitChain(const mol::ChainHandle& chain) { // write atom block SDFAtomWriter atom_writer(ostr_, atom_indices_); - mol::ChainHandle non_const_chain = chain; + mol::ChainView non_const_chain = chain; non_const_chain.Apply(atom_writer); // write bond block diff --git a/modules/io/src/mol/sdf_writer.hh b/modules/io/src/mol/sdf_writer.hh index 62a365d491f303f6e0a5a01add5ce3af1636deba..76538f808f611dd8edb1a5979b2f9ad9ced66359 100644 --- a/modules/io/src/mol/sdf_writer.hh +++ b/modules/io/src/mol/sdf_writer.hh @@ -38,7 +38,7 @@ namespace ost { namespace io { -class DLLEXPORT_OST_IO SDFWriter : public mol::EntityVisitor { +class DLLEXPORT_OST_IO SDFWriter : public mol::EntityViewVisitor { public: SDFWriter(std::ostream& ostream); SDFWriter(const String& filename); @@ -48,7 +48,7 @@ public: void Write(const mol::EntityHandle& ent); private: - virtual bool VisitChain(const mol::ChainHandle& chain); + virtual bool VisitChain(const mol::ChainView& chain); std::ofstream outfile_; std::ostream& ostr_; diff --git a/modules/io/tests/test_io_sdf.cc b/modules/io/tests/test_io_sdf.cc index 08ae8d80ccd475ed20d9c2c5dba3791609149ef7..f18f018bc48150ebb2776dea1f98d302db043ce5 100644 --- a/modules/io/tests/test_io_sdf.cc +++ b/modules/io/tests/test_io_sdf.cc @@ -151,6 +151,21 @@ BOOST_AUTO_TEST_CASE(write_sdf) "testfiles/sdf/compound-out.sdf")); } +BOOST_AUTO_TEST_CASE(write_sdf_view) +{ + // this scope is required to force the writer stream to be closed before + // opening the file again in compare_files. Avoids a race condition. + { + mol::EntityHandle eh = mol::CreateEntity(); + EntityIOSDFHandler sdfh; + sdfh.Import(eh,"testfiles/sdf/compound.sdf"); + mol::EntityView ev = eh.Select("(ele=C or ele=N) and aname!='1'"); + SaveEntity(ev, "testfiles/sdf/compound-view-out.sdf"); + } + BOOST_CHECK(compare_files("testfiles/sdf/compound-view.sdf", + "testfiles/sdf/compound-view-out.sdf")); +} + BOOST_AUTO_TEST_CASE(nonexisting_file) { mol::EntityHandle eh=mol::CreateEntity(); diff --git a/modules/io/tests/testfiles/sdf/compound-view.sdf b/modules/io/tests/testfiles/sdf/compound-view.sdf new file mode 100644 index 0000000000000000000000000000000000000000..0902b1232e979e69f500f1ff5c9c5a93fbf2994b --- /dev/null +++ b/modules/io/tests/testfiles/sdf/compound-view.sdf @@ -0,0 +1,440 @@ +Test Ligand + + + 21 23 0 0 0 0 999 V2000 + 33.9561 6.2475 23.4088 C 0 0 0 0 0 0 + 32.6324 6.6232 23.1367 C 0 0 0 0 0 0 + 34.5295 6.5843 24.6557 C 0 0 0 0 0 0 + 31.8762 7.3329 24.0856 C 0 0 0 0 0 0 + 33.7671 7.2733 25.6188 C 0 0 0 0 0 0 + 32.4286 7.6460 25.3459 C 0 0 0 0 0 0 + 31.5951 8.3119 26.3710 C 0 0 0 0 0 0 + 31.3314 7.9140 27.6484 C 0 0 0 0 0 0 + 31.8735 6.7525 28.4344 C 0 0 0 0 0 0 + 30.4351 8.7885 28.2094 N 0 0 0 0 0 0 + 31.7811 6.9129 29.7679 N 0 0 0 0 0 0 + 30.1110 9.7809 27.3482 N 0 0 0 0 0 0 + 32.3829 6.0325 30.7674 C 0 0 0 0 0 0 + 30.7767 9.4820 26.2306 C 0 0 0 0 0 0 + 31.3859 4.9676 31.2295 C 0 0 0 0 0 0 + 30.7144 10.3135 25.0185 C 0 0 0 0 0 0 + 31.9150 10.8059 24.4681 C 0 0 0 0 0 0 + 31.8995 11.6150 23.3143 C 0 0 0 0 0 0 + 30.6694 11.9024 22.6787 C 0 0 0 0 0 0 + 29.4673 11.4261 23.2329 C 0 0 0 0 0 0 + 29.4821 10.6385 24.4075 C 0 0 0 0 0 0 + 1 2 1 0 0 0 + 1 3 2 0 0 0 + 2 4 2 0 0 0 + 3 5 1 0 0 0 + 4 6 1 0 0 0 + 5 6 2 0 0 0 + 6 7 1 0 0 0 + 7 8 2 0 0 0 + 7 14 1 0 0 0 + 8 9 1 0 0 0 + 8 10 1 0 0 0 + 9 11 1 0 0 0 + 10 12 1 0 0 0 + 11 13 1 0 0 0 + 12 14 2 0 0 0 + 13 15 1 0 0 0 + 14 16 1 0 0 0 + 16 17 1 0 0 0 + 16 21 2 0 0 0 + 17 18 2 0 0 0 + 18 19 1 0 0 0 + 19 20 2 0 0 0 + 20 21 1 0 0 0 +M END +> <i_i_glide_confnum> +2 + +> <i_i_glide_lignum> +1 + +> <i_i_glide_posenum> +352 + +> <r_i_docking_score> +-8.84426 + +> <r_i_glide_ecoul> +-16.1644 + +> <r_i_glide_einternal> +6.78671 + +> <r_i_glide_emodel> +-96.9661 + +> <r_i_glide_energy> +-62.2146 + +> <r_i_glide_erotb> +0.517993 + +> <r_i_glide_esite> +-0.0291388 + +> <r_i_glide_evdw> +-46.0502 + +> <r_i_glide_gscore> +-8.84426 + +> <r_i_glide_hbond> +-0.960751 + +> <r_i_glide_ligand_efficiency> +-0.327565 + +> <r_i_glide_ligand_efficiency_ln> +-2.0588 + +> <r_i_glide_ligand_efficiency_sa> +-0.982695 + +> <r_i_glide_lipo> +-2.84534 + +> <r_i_glide_metal> +-0 + +> <r_i_glide_rewards> +-0.799851 + +> <r_i_glide_rmsd> +0.6819 + +$$$$ +Test Ligand + + + 21 23 0 0 0 0 999 V2000 + 34.1450 6.3862 23.4047 C 0 0 0 0 0 0 + 34.6745 6.7394 24.6654 C 0 0 0 0 0 0 + 32.7998 6.7274 23.0916 C 0 0 0 0 0 0 + 33.8742 7.4015 25.6120 C 0 0 0 0 0 0 + 32.0035 7.3913 24.0448 C 0 0 0 0 0 0 + 32.5275 7.7230 25.3191 C 0 0 0 0 0 0 + 31.6607 8.3431 26.3377 C 0 0 0 0 0 0 + 31.4133 7.9370 27.6169 C 0 0 0 0 0 0 + 31.9782 6.7689 28.3776 C 0 0 0 0 0 0 + 30.5206 8.8053 28.2099 N 0 0 0 0 0 0 + 32.0029 6.9625 29.7121 N 0 0 0 0 0 0 + 30.1677 9.8050 27.3570 N 0 0 0 0 0 0 + 32.5238 6.0208 30.6934 C 0 0 0 0 0 0 + 30.8244 9.5086 26.2225 C 0 0 0 0 0 0 + 31.3863 5.1079 31.1861 C 0 0 0 0 0 0 + 30.7465 10.3438 25.0101 C 0 0 0 0 0 0 + 31.9316 10.8558 24.4417 C 0 0 0 0 0 0 + 31.8920 11.6586 23.2829 C 0 0 0 0 0 0 + 30.6518 11.9231 22.6600 C 0 0 0 0 0 0 + 29.4612 11.4393 23.2345 C 0 0 0 0 0 0 + 29.4978 10.6576 24.4073 C 0 0 0 0 0 0 + 1 2 1 0 0 0 + 1 3 2 0 0 0 + 2 4 2 0 0 0 + 3 5 1 0 0 0 + 4 6 1 0 0 0 + 5 6 2 0 0 0 + 6 7 1 0 0 0 + 7 8 2 0 0 0 + 7 14 1 0 0 0 + 8 9 1 0 0 0 + 8 10 1 0 0 0 + 9 11 1 0 0 0 + 10 12 1 0 0 0 + 11 13 1 0 0 0 + 12 14 2 0 0 0 + 13 15 1 0 0 0 + 14 16 1 0 0 0 + 16 17 1 0 0 0 + 16 21 2 0 0 0 + 17 18 2 0 0 0 + 18 19 1 0 0 0 + 19 20 2 0 0 0 + 20 21 1 0 0 0 +M END +> <i_i_glide_confnum> +14 + +> <i_i_glide_lignum> +1 + +> <i_i_glide_posenum> +302 + +> <r_i_docking_score> +-8.79327 + +> <r_i_glide_ecoul> +-16.9687 + +> <r_i_glide_einternal> +5.76514 + +> <r_i_glide_emodel> +-98.4298 + +> <r_i_glide_energy> +-63.3874 + +> <r_i_glide_erotb> +0.517993 + +> <r_i_glide_esite> +-0.00975737 + +> <r_i_glide_evdw> +-46.4187 + +> <r_i_glide_gscore> +-8.79327 + +> <r_i_glide_hbond> +-0.966475 + +> <r_i_glide_ligand_efficiency> +-0.325677 + +> <r_i_glide_ligand_efficiency_ln> +-2.04693 + +> <r_i_glide_ligand_efficiency_sa> +-0.97703 + +> <r_i_glide_lipo> +-2.69167 + +> <r_i_glide_metal> +-0 + +> <r_i_glide_rewards> +-0.777126 + +> <r_i_glide_rmsd> +0.605551 + +$$$$ +Test Ligand + + + 21 23 0 0 0 0 999 V2000 + 34.2768 6.4601 23.4276 C 0 0 0 0 0 0 + 34.7199 6.6807 24.7535 C 0 0 0 0 0 0 + 32.9608 6.8443 23.0740 C 0 0 0 0 0 0 + 33.8637 7.2655 25.7079 C 0 0 0 0 0 0 + 32.1001 7.4207 24.0338 C 0 0 0 0 0 0 + 32.5448 7.6388 25.3572 C 0 0 0 0 0 0 + 31.6578 8.2493 26.3632 C 0 0 0 0 0 0 + 31.3829 7.8493 27.6381 C 0 0 0 0 0 0 + 31.8957 6.6637 28.4136 C 0 0 0 0 0 0 + 30.4903 8.7246 28.2064 N 0 0 0 0 0 0 + 31.7656 6.7961 29.7467 N 0 0 0 0 0 0 + 30.1647 9.7304 27.3526 N 0 0 0 0 0 0 + 32.1947 5.8187 30.7363 C 0 0 0 0 0 0 + 30.8430 9.4334 26.2330 C 0 0 0 0 0 0 + 33.6957 5.9781 31.0077 C 0 0 0 0 0 0 + 30.7874 10.2877 25.0301 C 0 0 0 0 0 0 + 31.9854 10.7833 24.4695 C 0 0 0 0 0 0 + 31.9583 11.6080 23.3306 C 0 0 0 0 0 0 + 30.7247 11.9044 22.7018 C 0 0 0 0 0 0 + 29.5221 11.4297 23.2588 C 0 0 0 0 0 0 + 29.5448 10.6400 24.4309 C 0 0 0 0 0 0 + 1 2 1 0 0 0 + 1 3 2 0 0 0 + 2 4 2 0 0 0 + 3 5 1 0 0 0 + 4 6 1 0 0 0 + 5 6 2 0 0 0 + 6 7 1 0 0 0 + 7 8 2 0 0 0 + 7 14 1 0 0 0 + 8 9 1 0 0 0 + 8 10 1 0 0 0 + 9 11 1 0 0 0 + 10 12 1 0 0 0 + 11 13 1 0 0 0 + 12 14 2 0 0 0 + 13 15 1 0 0 0 + 14 16 1 0 0 0 + 16 17 1 0 0 0 + 16 21 2 0 0 0 + 17 18 2 0 0 0 + 18 19 1 0 0 0 + 19 20 2 0 0 0 + 20 21 1 0 0 0 +M END +> <i_i_glide_confnum> +1 + +> <i_i_glide_lignum> +1 + +> <i_i_glide_posenum> +177 + +> <r_i_docking_score> +-8.70173 + +> <r_i_glide_ecoul> +-15.8862 + +> <r_i_glide_einternal> +1.84397 + +> <r_i_glide_emodel> +-99.0481 + +> <r_i_glide_energy> +-62.44 + +> <r_i_glide_erotb> +0.517993 + +> <r_i_glide_esite> +-0.0274759 + +> <r_i_glide_evdw> +-46.5538 + +> <r_i_glide_gscore> +-8.70173 + +> <r_i_glide_hbond> +-0.97397 + +> <r_i_glide_ligand_efficiency> +-0.322286 + +> <r_i_glide_ligand_efficiency_ln> +-2.02562 + +> <r_i_glide_ligand_efficiency_sa> +-0.966858 + +> <r_i_glide_lipo> +-2.74283 + +> <r_i_glide_metal> +-0 + +> <r_i_glide_rewards> +-0.764823 + +> <r_i_glide_rmsd> +0.543804 + +$$$$ +Test Ligand + + + 21 23 0 0 0 0 999 V2000 + 34.5144 6.6833 23.3611 C 0 0 0 0 0 0 + 33.1880 6.9515 22.9860 C 0 0 0 0 0 0 + 34.9381 7.0224 24.6610 C 0 0 0 0 0 0 + 32.2870 7.5460 23.8905 C 0 0 0 0 0 0 + 34.0422 7.6076 25.5720 C 0 0 0 0 0 0 + 32.7085 7.8735 25.1943 C 0 0 0 0 0 0 + 31.7655 8.4568 26.1623 C 0 0 0 0 0 0 + 31.4563 8.0176 27.4151 C 0 0 0 0 0 0 + 31.9612 6.8234 28.1735 C 0 0 0 0 0 0 + 30.4991 8.8399 27.9505 N 0 0 0 0 0 0 + 31.7656 6.8973 29.5011 N 0 0 0 0 0 0 + 30.1623 9.8254 27.0921 N 0 0 0 0 0 0 + 32.1790 5.9073 30.4826 C 0 0 0 0 0 0 + 30.8968 9.5864 26.0023 C 0 0 0 0 0 0 + 33.4739 6.3765 31.1528 C 0 0 0 0 0 0 + 30.8088 10.4312 24.8021 C 0 0 0 0 0 0 + 31.9800 11.0176 24.2785 C 0 0 0 0 0 0 + 31.9238 11.8291 23.1331 C 0 0 0 0 0 0 + 30.6968 12.0157 22.4634 C 0 0 0 0 0 0 + 29.5186 11.4761 23.0060 C 0 0 0 0 0 0 + 29.5649 10.7043 24.1795 C 0 0 0 0 0 0 + 1 2 1 0 0 0 + 1 3 2 0 0 0 + 2 4 2 0 0 0 + 3 5 1 0 0 0 + 4 6 1 0 0 0 + 5 6 2 0 0 0 + 6 7 1 0 0 0 + 7 8 2 0 0 0 + 7 14 1 0 0 0 + 8 9 1 0 0 0 + 8 10 1 0 0 0 + 9 11 1 0 0 0 + 10 12 1 0 0 0 + 11 13 1 0 0 0 + 12 14 2 0 0 0 + 13 15 1 0 0 0 + 14 16 1 0 0 0 + 16 17 1 0 0 0 + 16 21 2 0 0 0 + 17 18 2 0 0 0 + 18 19 1 0 0 0 + 19 20 2 0 0 0 + 20 21 1 0 0 0 +M END +> <i_i_glide_confnum> +9 + +> <i_i_glide_lignum> +1 + +> <i_i_glide_posenum> +294 + +> <r_i_docking_score> +-8.69162 + +> <r_i_glide_ecoul> +-14.7519 + +> <r_i_glide_einternal> +5.89466 + +> <r_i_glide_emodel> +-97.7232 + +> <r_i_glide_energy> +-63.1839 + +> <r_i_glide_erotb> +0.517993 + +> <r_i_glide_esite> +-0.0119369 + +> <r_i_glide_evdw> +-48.432 + +> <r_i_glide_gscore> +-8.69162 + +> <r_i_glide_hbond> +-0.870172 + +> <r_i_glide_ligand_efficiency> +-0.321912 + +> <r_i_glide_ligand_efficiency_ln> +-2.02327 + +> <r_i_glide_ligand_efficiency_sa> +-0.965735 + +> <r_i_glide_lipo> +-2.92829 + +> <r_i_glide_metal> +-0 + +> <r_i_glide_rewards> +-0.764823 + +> <r_i_glide_rmsd> +0.463026 + +$$$$