use of org.openscience.cdk.isomorphism.matchers.smarts.AromaticSymbolAtom in project cdk by cdk.
the class SmartsQueryVisitor method visit.
public Object visit(ASTExplicitAtom node, Object data) {
IQueryAtom atom;
String symbol = node.getSymbol();
if ("*".equals(symbol)) {
atom = new AnyAtom(builder);
} else if ("A".equals(symbol)) {
atom = new AliphaticAtom(builder);
} else if ("a".equals(symbol)) {
atom = new AromaticAtom(builder);
} else if ("o".equals(symbol) || "n".equals(symbol) || "c".equals(symbol) || "s".equals(symbol) || "p".equals(symbol) || "as".equals(symbol) || "se".equals(symbol)) {
String atomSymbol = symbol.substring(0, 1).toUpperCase() + symbol.substring(1);
atom = new AromaticSymbolAtom(atomSymbol, builder);
} else if ("H".equals(symbol)) {
atom = new HydrogenAtom(builder);
atom.setSymbol(symbol.toUpperCase());
atom.setMassNumber(1);
} else if ("D".equals(symbol)) {
atom = new HydrogenAtom(builder);
atom.setSymbol(symbol.toUpperCase());
atom.setMassNumber(2);
} else if ("T".equals(symbol)) {
atom = new HydrogenAtom(builder);
atom.setSymbol(symbol.toUpperCase());
atom.setMassNumber(3);
} else {
atom = new AliphaticSymbolAtom(symbol, builder);
}
return atom;
}
use of org.openscience.cdk.isomorphism.matchers.smarts.AromaticSymbolAtom in project cdk by cdk.
the class SmartsQueryVisitor method handleRingClosure.
private void handleRingClosure(IQueryAtom atom, ASTRingIdentifier ringIdentifier) {
RingIdentifierAtom ringIdAtom = (RingIdentifierAtom) ringIdentifier.jjtAccept(this, atom);
// if there is already a RingIdentifierAtom, create a bond between
// them and add the bond to the query
int ringId = ringIdentifier.getRingId();
// ring digit > 9 - expand capacity
if (ringId >= ringAtoms.length)
ringAtoms = Arrays.copyOf(ringAtoms, 100);
// Ring Open
if (ringAtoms[ringId] == null) {
ringAtoms[ringId] = ringIdAtom;
if (neighbors.containsKey(atom)) {
neighbors.get(atom).add(ringIdAtom);
}
} else // Ring Close
{
IQueryBond ringBond;
// first check if the two bonds ma
if (ringAtoms[ringId].getRingBond() == null) {
if (ringIdAtom.getRingBond() == null) {
if (atom instanceof AromaticSymbolAtom && ringAtoms[ringId].getAtom() instanceof AromaticSymbolAtom) {
ringBond = new AromaticQueryBond(builder);
} else {
ringBond = new RingBond(builder);
}
} else {
ringBond = ringIdAtom.getRingBond();
}
} else {
// Here I assume the bond are always same. This should be checked by the parser already
ringBond = ringAtoms[ringId].getRingBond();
}
ringBond.setAtoms(new IAtom[] { ringAtoms[ringId].getAtom(), atom });
query.addBond(ringBond);
// placeholder reference
if (neighbors.containsKey(ringAtoms[ringId].getAtom())) {
List<IAtom> localNeighbors = neighbors.get(ringAtoms[ringId].getAtom());
localNeighbors.set(localNeighbors.indexOf(ringAtoms[ringId]), atom);
}
if (neighbors.containsKey(atom)) {
neighbors.get(atom).add(ringAtoms[ringId].getAtom());
}
ringAtoms[ringId] = null;
}
}
use of org.openscience.cdk.isomorphism.matchers.smarts.AromaticSymbolAtom in project cdk by cdk.
the class SmartsQueryVisitor method visit.
public Object visit(ASTElement node, Object data) {
String symbol = node.getSymbol();
SMARTSAtom atom;
if ("o".equals(symbol) || "n".equals(symbol) || "c".equals(symbol) || "s".equals(symbol) || "p".equals(symbol) || "as".equals(symbol) || "se".equals(symbol)) {
String atomSymbol = symbol.substring(0, 1).toUpperCase() + symbol.substring(1);
atom = new AromaticSymbolAtom(atomSymbol, builder);
} else {
atom = new AliphaticSymbolAtom(symbol, builder);
}
return atom;
}
Aggregations