void testSDMemoryCorruption() { std::string rdbase = getenv("RDBASE"); std::string fname = rdbase + "/Data/NCI/first_200.props.sdf"; SDMolSupplier sdsup(fname,true); std::string ofile = rdbase + "/Code/GraphMol/FileParsers/test_data/outNCI_first_200.props.sdf"; std::ostream *os=new std::ofstream(ofile.c_str()); //std::ostream *os=new std::stringstream(); SDWriter *writer = new SDWriter(os,false); STR_VECT names; #if 1 ROMol *m1=sdsup.next(); MolOps::sanitizeMol(*(RWMol *)m1); #else ROMol *m1=SmilesToMol("C1CC1"); TEST_ASSERT(m1); #endif sdsup.reset(); int nDone=0; while (!sdsup.atEnd()) { //std::cerr<<nDone<<std::endl; ROMol *mol = sdsup.next(); //std::cerr<<"m:"<<mol<<std::endl; TEST_ASSERT(mol); std::string mname; mol->getProp("_Name", mname); names.push_back(mname); //std::cerr<<" w"<<std::endl; writer->write(*mol); //std::cerr<<" ok"<<std::endl; delete mol; nDone++; } CHECK_INVARIANT(nDone == 200, ""); writer->flush(); CHECK_INVARIANT(writer->numMols() == 200, ""); delete writer; #if 1 // now read in the file we just finished writing SDMolSupplier reader(ofile); int i = 0; while (!reader.atEnd()) { ROMol *mol = reader.next(); std::string mname; mol->getProp("_Name", mname); CHECK_INVARIANT(mname == names[i], ""); delete mol; i++; } #endif }
void testSDWriter() { std::string rdbase = getenv("RDBASE"); std::string fname = rdbase + "/Code/GraphMol/FileParsers/test_data/NCI_aids_few.sdf"; SDMolSupplier sdsup(fname); std::string ofile = rdbase + "/Code/GraphMol/FileParsers/test_data/outNCI_few.sdf"; SDWriter *writer = new SDWriter(ofile); STR_VECT names; while (!sdsup.atEnd()) { ROMol *mol = sdsup.next(); std::string mname; mol->getProp("_Name", mname); names.push_back(mname); writer->write(*mol); delete mol; } writer->flush(); CHECK_INVARIANT(writer->numMols() == 16, ""); // make sure we can close() the writer and delete it: writer->close(); delete writer; // now read in the file we just finished writing SDMolSupplier reader(ofile); int i = 0; while (!reader.atEnd()) { ROMol *mol = reader.next(); std::string mname; mol->getProp("_Name", mname); CHECK_INVARIANT(mname == names[i], ""); delete mol; i++; } // now read in a file with aromatic information on the bonds std::string infile = rdbase + "/Code/GraphMol/FileParsers/test_data/outNCI_arom.sdf"; SDMolSupplier nreader(infile); i = 0; while (!nreader.atEnd()) { ROMol *mol = nreader.next(); std::string mname; mol->getProp("_Name", mname); CHECK_INVARIANT(mname == names[i], ""); i++; delete mol; } }
void testSDWriterStrm() { std::string rdbase = getenv("RDBASE"); { std::string fname = rdbase + "/Code/GraphMol/FileParsers/test_data/NCI_aids_few.sdf"; SDMolSupplier sdsup(fname); std::string ofile = rdbase + "/Code/GraphMol/FileParsers/test_data/outNCI_few.sdf"; std::ofstream *oStream=new std::ofstream(ofile.c_str()); SDWriter *writer = new SDWriter(oStream); STR_VECT names; while (!sdsup.atEnd()) { ROMol *mol = sdsup.next(); std::string mname; mol->getProp("_Name", mname); names.push_back(mname); writer->write(*mol); delete mol; } writer->flush(); CHECK_INVARIANT(writer->numMols() == 16, ""); delete writer; // now read in the file we just finished writing SDMolSupplier reader(ofile); int i = 0; while (!reader.atEnd()) { ROMol *mol = reader.next(); std::string mname; mol->getProp("_Name", mname); CHECK_INVARIANT(mname == names[i], ""); delete mol; i++; } } { // now read in a file with aromatic information on the bonds std::string infile = rdbase + "/Code/GraphMol/FileParsers/test_data/outNCI_arom.sdf"; SDMolSupplier nreader(infile); unsigned int i = 0; while (!nreader.atEnd()) { ROMol *mol = nreader.next(); TEST_ASSERT(mol); ++i; delete mol; } TEST_ASSERT(i==16); } }
void SetSDWriterProps(SDWriter &writer, python::object props) { // convert the python list to a STR_VECT STR_VECT propNames; PySequenceHolder<std::string> seq(props); for (unsigned int i = 0; i < seq.size(); i++) { propNames.push_back(seq[i]); } writer.setProps(propNames); }
void testGitHubIssue62() { BOOST_LOG(rdErrorLog) << "-------------------------------------" << std::endl; BOOST_LOG(rdErrorLog) << " Testing GitHubIssue62." << std::endl; std::string pathName=getenv("RDBASE"); pathName += "/Code/GraphMol/ForceFieldHelpers/UFF/test_data"; { double energyValues[] = { 38.687, 174.698, 337.986, 115.248, 2.482, 1.918, 10.165, 98.469, 39.078, 267.236, 15.747, 202.121, 205.539, 20.044, 218.986, 79.627 }; SmilesMolSupplier smiSupplier(pathName + "/Issue62.smi"); SDWriter *sdfWriter = new SDWriter(pathName + "/Issue62.sdf"); for (unsigned int i = 0; i < smiSupplier.length(); ++i) { ROMol *mol = MolOps::addHs(*(smiSupplier[i])); TEST_ASSERT(mol); std::string molName = ""; if (mol->hasProp(common_properties::_Name)) { mol->getProp(common_properties::_Name, molName); } DGeomHelpers::EmbedMolecule(*mol); ForceFields::ForceField *field = UFF::constructForceField(*mol); TEST_ASSERT(field); field->initialize(); int needMore = field->minimize(200, 1.e-6, 1.e-3); TEST_ASSERT(!needMore); sdfWriter->write(*mol); double e = field->calcEnergy(); BOOST_LOG(rdErrorLog) << molName << " " << e << std::endl; TEST_ASSERT(fabs(e - energyValues[i]) < 1.); } sdfWriter->close(); BOOST_LOG(rdErrorLog) << " done" << std::endl; } }
void WriteMolToSD(SDWriter &writer, ROMol &mol, int confId) { writer.write(mol, confId); }