Exporting data to a file is easily done via the built-in class
MolExporter.
This supports output to several different formats, including mol, sdf, smiles, png, jpeg
, etc.
This example will discuss the most common usage, the SD file format.
The exporter itself simply writes the information, such as a molecule and associated properties. In the case of RDfile/SDfile,
the associated properties must be built into the molecule first. This is done by constructing a map with setProperty
,
as shown below. In this example, a new exporter is created. The scriptlet then cycles through a list of IDs, gets the
molecule from a structures table, and sets the property "REGID" with the value from the table. It then writes the molecule to
the open file and closes the file when finished. The scriptlet should work unchanged against the PubChem demo data.
import chemaxon.formats.MolExporter import com.im.commons.progress.* def parent = dataTree.rootVertex.entity // assumes you have reference to the data tree def molFld = parent.fields.items.find { it.name == 'Structure' } // find the structure field def dbregidFld = parent.fields.items.find { it.name == 'DB regid' } // find the structure field MolExporter exporter = new MolExporter('C:/tmp/save_file_name.sdf', 'sdf') try { def rs = parent.schema.dataProvider.getDefaultResultSet(dataTree, false, DFEnvironmentRO.DEV_NULL) def rootVS = rs.getVertexState(dataTree.rootVertex) List ids = rootVS.getSelectedRowsIds() // get the selected IDs ids.each { id -> def getData = rootVS.getData([id], DFEnvironmentRO.DEV_NULL) def mol = getData[id][molFld.id] // get the moelcule def expMol = mol.native.cloneMolecule() // clone the molecule to prevent modifying the original def regid = getData[id][dbregidFld.id] // get the reg id expMol.setProperty('REGID', regid) // set the extra property exporter.write(expMol) } } finally { exporter.flush() exporter.close() // IMPORTANT: close the exporter so that the file is closed. }
Versions: This script has been tested on IJC version 6.0