That simplifies my earlier code to:
hmdbIndex =
molTable.createSDFIndex(
"/WikiPathways/hmdb.sdf"
);
props = new java.util.HashSet();
props.add("HMDB_ID");
molTable.parseProperties(hmdbIndex, props);
idIndex = new java.util.HashMap();
molCount = hmdbIndex.getNumberOfMolecules();
for (i=0; i<molCount; i++) {
hmdbID = hmdbIndex.getPropertyFor(i, "HMDB_ID")
idIndex.put(hmdbID, i);
}
The next step in my use case is process some input (WikiPathways GPML files to be precise), detect what HMDB identifier is used, extract the SD file entry for that identifier and append it to a new SD file (using a new ui.append() method):
hmdbCounter = idIndex.get(idStr)
sdEntry = hmdbIndex.getRecord(hmdbCounter)
sdEntry = sdEntry.substring(0, sdEntry.indexOf("M END"))
ui.append("/WikiPathways/db.sdf", sdEntry);
ui.append("/WikiPathways/db.sdf", "M END\n");
ui.append("/WikiPathways/db.sdf", "> <WPM>\n");
ui.append("/WikiPathways/db.sdf", "WPM" + (Integer.toString(wpmId)).substring(1) + "\n");
ui.append("/WikiPathways/db.sdf", "\n");
ui.append("/WikiPathways/db.sdf", "\$\$\$\$\n");
This code actually does a bit more than copying the SD file entry: it also removes all previous SD fields and replace this with a new, internal identifier. Using that identifier, I track some metadata on this metabolite.
Now, there are a million ways of implementing this workflow. If you really want to know, I chose this one because HMDB identifiers is a more prominent ID used in WikiPathways, and for this one, as well as ChEBI, I can use a SD file. For ChemSpider and PubChem identifiers, however, I plan to use the matching Bioclipse client code to pull in MDL molfiles. Bioclipse has functionality for all these needs available as extensions.

No comments:
Post a Comment