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.
}