Skip to content
Snippets Groups Projects
Commit f45cbdda authored by Tobias Schmidt's avatar Tobias Schmidt
Browse files

fix BZDNG-200 (SDF writer now handles selections correctly)

parent 2f5dc713
Branches
Tags
No related merge requests found
......@@ -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
......
......@@ -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_;
......
......@@ -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();
......
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
$$$$
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment