Client Algorithms |
Molecular Parsers
The properties that the formats contain are handled through the use of a pointer to a std::map<std::string, std::vector<std::string> > that maps the name of the property to a vector of strings that contains the values of each property.
template <class Stream, class Molecule> bool get_juice_from_stream(Stream& in, nail_juice<Molecule>& juice, size_t count, FORMAT_TAG, std::map<std::string, std::vector<std::string> >* props = NULL)
To write molecules :
template <class CT, class AP, class BP, class MP, class AT, class BT, class MT , class Format> print_nail<molecule<CT,AP,BP,MP,AT,BT,MT>, Format> write_nail(const molecule<CT,AP,BP,MP,AT,BT,MT>& nail, Format, const std::map<std::string, std::vector<std::string> >* props = NULL);
Tag | Description |
---|---|
sdf_formatT | MDL's MOL format |
smiles_formatT | Daylight's smile format |
Parameter | Description | Models |
---|---|---|
in | The stream that points to the molecular format | std::basic_istream |
juice | The juice where the information of the format is going to be stored | nail_juice |
count | Unsigned iteger to keep track of which molecule is being processed | std::size_t |
FORMAT_TAG | One of the constructed molecular format tags | sdf_formatT() or smiles_formatT() |
props | Where the external properties are going to be stored | non const pointer to std::map<std::string, std::vector<std::string> > |
For write_nail() :
Parameter | Description | Models |
---|---|---|
nail | The molecule that you are printing | molecule<> |
Format | The format in which you are printing | sdf_formatT() or smiles_formatT() |
props | The external properties of the molecule | const pointer to std::map<std::string, std::vector<std::string> > |
write_nail() returns a functor that provides operator() with
argument the reference to a stream. You sholdn't be concerned about this.
Just concerne that the stream to which you are streaming out provides
operator <<.
If a non NULL pointer is given, then the format is streamed out as
Daylight's TDT (Thor Data Tree) : smiles with properties.
// Get molecules as sdf format (with properties) and // write them as Daylight's tdt format (smiles with // properties) // --- cdl #include <morpho/cdl/molecule/molecule.hpp> #include <morpho/cdl/parsers/parsers.cpp> int main() { using namespace morpho::cdl; while( !std::cin.eof() ) { // first check that the stream has a valid sdf : std::basic_istream<char, std::char_traits<char> >::pos_type pos; pos=std::cin.tellg(); if ( !morpho::look_ahead(std::cin,4)) break; std::cin.seekg(pos); // declare the juice nail_juice<> j_from_sdf; // declare the object to contain the properties std::map<std::string, std::vector<std::string> > mol_sdf_properties; // now get the juice and the external properties : get_juice_from_stream(std::cin, j_from_sdf, 0, sdf_formatT(), &mol_sdf_properties); // construct the molecule : molecule<> mol(j_from_sdf); // Now write the molecule : // If we are streaming out the molecule as a smile, and we // provide a pointer to a property which is not NULL, then // the tdt format will be used : std::cout << write_nail(mol,sdf_formatT(),&mol_sdf_properties) << std::endl; // the stream should have now the smiles and properties in the tdt format } return 0; }