Converting implicit Hydrogens to explicit
The following methods are available in chemaxon.calculations.Hydrogenize class to convert implicit hydrogen atoms to explicit ones:
-
Hydrogenize.convertImplicitHToExplicit(MoleculeGraph molecule, MolAtom[] atoms, int f)
-
Hydrogenize.convertImplicitHToExplicit(MoleculeGraph molecule)
In the first method the coordinate refinement to avoid atom collisions can be skipped using the OMIT_POSTCLEAN option.
You can convert implicit Hydrogens to explicit ones without additional cleaning:
//import a simple chain
Molecule mol = MolImporter.importMol(
"methylhexene.mol"
);
Hydrogenize.convertImplicitHToExplicit(mol,
null
, MoleculeGraph.OMIT_POSTCLEAN);
|
|
|
original methylhexene molecule |
with OMIT_POSTCLEAN option |
without OMIT_POSTCLEAN option |
Working example to add explicit H to chiral centers only
/*
* Copyright (c) 1998-2014 ChemAxon Ltd. All Rights Reserved.
*/
import
java.io.IOException;
import
chemaxon.struc.Molecule;
import
chemaxon.struc.MolAtom;
import
chemaxon.formats.MolImporter;
import
chemaxon.struc.StereoConstants;
public
class
ExplicitHToChiralCenter {
/**
* Example to add Explicit H to Chiral centers only.
* @param args command line arguments
* @throws java.io.IOException
*
* @version 5.1 04/24/2008
* @since Marvin 5.1
* @author Andras Volford
*/
// ODD and EVEN parity values
static
int
ODD = StereoConstants.PARITY_ODD;
static
int
EVEN = StereoConstants.PARITY_EVEN;
public
static
void
main(String[] args)
throws
IOException {
if
(args.length <
1
) {
System.err.println("Usage: java ExplicitHToChiralCenter
filename");
System.exit(
0
);
}
// create importer for the file argument
String s = (String) args[
0
];
MolImporter molimp =
new
MolImporter(s);
// store the imported molecules in m
Molecule m =
new
Molecule();
while
(molimp.read(m)) {
// read molecules from the file
int
ac = m.getAtomCount();
// Atoms with odd or even parity
MolAtom[] t =
new
MolAtom[ac];
int
n =
0
;
for
(
int
i =
0
; i < ac; i++){
int
p = m.getParity(i);
boolean
add = p == ODD || p == EVEN;
// if the atom has ODD or EVEN parity
if
(add) {
t[n++] = m.getAtom(i);
}
}
// reduce atom array
MolAtom[] a =
new
MolAtom[n];
System.arraycopy(t,
0
, a,
0
, n);
// add explicit H
Hydrogenize.convertImplicitHToExplicit(m, a,
0
);
if
(m.getDim() !=
2
)
m.clean(
2
,
null
);
// write the result
System.out.print(m.toFormat(
"sdf"
));
}
}
}