// // Writing molecules example5.cpp #include #include #include #include #include #include #include #include #include #include #include #include int main( int argc , char **argv ) { std::string file_root = getenv( "RDBASE" ); file_root += "/Docs/Book"; std::string sdf_file = file_root + "/data/5ht3ligs.sdf"; bool takeOwnership = true; RDKit::SDMolSupplier mol_supplier( sdf_file , takeOwnership ); std::vector mols; while( !mol_supplier.atEnd() ) { RDKit::ROMOL_SPTR mol( mol_supplier.next() ); if( mol ) { mols.push_back( mol ); } } std::string pdb_file = file_root + "/data/5ht3ligs.pdb"; RDKit::PDBWriter pdb_writer( pdb_file ); for( std::size_t i = 0 , is = mols.size() ; i < is ; ++i ) { pdb_writer.write( *mols[i] ); } std::ostringstream oss; // takeOwnership must be false for this, as we don't want the SDWriter trying // to delete the std::ostringstream. takeOwnership = false; boost::shared_ptr sdf_writer( new RDKit::SDWriter( &oss , takeOwnership ) ); for( std::vector::iterator it = mols.begin() ; it != mols.end() ; ++it ) { sdf_writer->write( *(*it) ); } std::cout << oss.str() << std::endl; }