// TODO if a sub molecule is to be returned, the isTopLevel field isn't correctly set when creating the molecule.
// TODO Maybe get the top-level molecule and return the subMolecule?
private Molecule reconstructMolecule(Molecule parentMolecule, Long pid, Long mid) throws GraphException {
Triple[] roots = iteratorAsTriples(readableIndex.findTriplesForMid(pid, mid));
Map<BlankNode, Triple> rootTripleMap = getBNodeToRootMap(parentMolecule);
Molecule molecule = new MoleculeImpl(moleculeComparator, roots);
molecule = createSubMolecules(mid, molecule);
if (null == parentMolecule) {
return molecule;
} else {
Triple linkingTriple = findLinkingTriple(parentMolecule, roots, rootTripleMap, molecule);