Adds a functional group to a given atom in the current molecule.
Definition at line 118 of file MoleculeBuilder.java. References org::openscience::cdk::AtomContainer::add(), org::openscience::cdk::AtomContainer::addAtom(), addAtom(), org::openscience::cdk::AtomContainer::addBond(), currentMolecule, org::openscience::cdk::AtomContainer::getAtom(), org::openscience::cdk::AtomContainer::getBond(), org::openscience::cdk::AtomContainer::getFirstAtom(), org::openscience::cdk::AtomContainer::getLastAtom(), getMetalAtomicSymbol(), org::openscience::cdk::interfaces::IAtomType::setFormalCharge(), and org::openscience::cdk::interfaces::IBond::setOrder(). Referenced by buildFunGroups(). { //BOND MODIFICATION //Alkanes - Single bond if (funGroupToken == "an") { //Do nothing since all bonds are single by default. } //Alkenes - Double bond else if (funGroupToken == "en") { //If functional group hasn't had a location specified: if (addPos < 0) { //Set the first bond to an order of 2 (i.e. a double bond) currentMolecule.getBond(0).setOrder(2.0); } else { //Set the addPos'th bond to an order of 2 (i.e. a double bond) currentMolecule.getBond(addPos).setOrder(2.0); } } //Alkynes - Tripple bond else if (funGroupToken == "yn") { //If functional group hasn't had a location specified: if (addPos < 0) { //Set the first bond to an order of 3 (i.e. a tripple bond) currentMolecule.getBond(0).setOrder(3.0); } else { //Set the addPos'th bond to an order of 3 (i.e. a tripple bond) currentMolecule.getBond(addPos).setOrder(3.0); } } //FUNCTIONAL GROUP SUFFIXES //Ending "e" else if (funGroupToken == "e") { //Do nothing, since the "e" is found at the end of chain names //with a bond modifer but no functional groups. } //Alcohols else if (funGroupToken == "ol" || funGroupToken == "hydroxy") { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("O", endOfChain, 1.0, 1); } else { addAtom("O", currentMolecule.getAtom(addPos), 1.0, 1); } } //Aldehydes else if (funGroupToken == "al") { addAtom("O", endOfChain, 2.0, 0); } //Carboxylic acid else if (funGroupToken == "oic acid") { addAtom("O", endOfChain, 2.0, 0); addAtom("O", endOfChain, 1.0, 1); } //Carboxylic Acid Chloride else if (funGroupToken == "oyl chloride") { addAtom("O", endOfChain, 2.0, 0); addAtom("Cl", endOfChain, 1.0, 0); } //PREFIXES //Halogens //Chlorine else if (funGroupToken == "chloro") { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("Cl", currentMolecule.getFirstAtom(), 1.0, 0); } else { addAtom("Cl", currentMolecule.getAtom(addPos), 1.0, 0); } } //Fluorine else if (funGroupToken == "fluoro") { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("F", currentMolecule.getFirstAtom(), 1.0, 0); } else { addAtom("F", currentMolecule.getAtom(addPos), 1.0, 0); } } //Bromine else if (funGroupToken == "bromo") { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("Br", currentMolecule.getFirstAtom(), 1.0, 0); } else { addAtom("Br", currentMolecule.getAtom(addPos), 1.0, 0); } } //Iodine else if (funGroupToken == "iodo") { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("I", currentMolecule.getFirstAtom(), 1.0, 0); } else { addAtom("I", currentMolecule.getAtom(addPos), 1.0, 0); } } //Nitro else if (funGroupToken == "nitro") { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("N", currentMolecule.getFirstAtom(), 1.0, 0); } else { addAtom("N", currentMolecule.getAtom(addPos), 1.0, 0); } //Stuff which applied no matter where the N atom is: org.openscience.cdk.interfaces.IAtom nitrogenAtom = currentMolecule.getLastAtom(); nitrogenAtom.setFormalCharge(+1); addAtom("O", nitrogenAtom, 1.0, 0); currentMolecule.getLastAtom().setFormalCharge(-1); addAtom("O", nitrogenAtom, 2.0, 0); } //Oxo else if (funGroupToken == "oxo") { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("O", currentMolecule.getFirstAtom(), 2.0, 0); } else { addAtom("O", currentMolecule.getAtom(addPos), 2.0, 0); } } //Nitrile else if (funGroupToken == "nitrile" ) { addAtom("N", currentMolecule.getFirstAtom(), 3.0, 0); } //Benzene else if (funGroupToken == "phenyl" ) { Molecule benzene = MoleculeFactory.makeBenzene(); //Detect Aromacity in the benzene ring. try { HueckelAromaticityDetector.detectAromaticity(benzene); } catch (Exception exc) { // logger.debug("No atom detected"); } currentMolecule.add(benzene); Bond joiningBond; //If functional group hasn't had a location specified: if (addPos < 0) { joiningBond = new Bond(currentMolecule.getFirstAtom(), benzene.getFirstAtom()); } else { joiningBond = new Bond(currentMolecule.getAtom(addPos), benzene.getFirstAtom()); } currentMolecule.addBond(joiningBond); } else if (funGroupToken == "amino" ) { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("N", currentMolecule.getFirstAtom(), 1.0, 2); } else { addAtom("N", currentMolecule.getAtom(addPos), 1.0, 2); } } //ORGANO METALLICS ADDED AS PREFIXES else if (funGroupToken == "alumino" ) { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("Al", currentMolecule.getFirstAtom(), 1.0, 2); } else { addAtom("Al", currentMolecule.getAtom(addPos), 1.0, 2); } } else if (funGroupToken == "litho" ) { //If functional group hasn't had a location specified: if (addPos < 0) { addAtom("Li", currentMolecule.getFirstAtom(), 1.0, 2); } else { addAtom("Li", currentMolecule.getAtom(addPos), 1.0, 2); } } //PRIORITY SUBSTITUENTS //FUNCTIONAL GROUPS WHICH MAY HAVE THEIR OWN SUBSTITUENTS //Esters ("...oate") else if (funGroupToken == "oate") { addAtom("O", endOfChain, 2.0, 0); addAtom("O", endOfChain, 1.0, 0); //Set the end of the chain to be built on for unspecified substituents. endOfChain = currentMolecule.getLastAtom(); } //Amines else if (funGroupToken == "amine") { addAtom("N", endOfChain, 1.0, 1); //Set the end of the chain to be built on for unspecified substituents. endOfChain = currentMolecule.getLastAtom(); } //Amides else if (funGroupToken =="amide") { addAtom("O", endOfChain, 2.0, 0); addAtom("N", endOfChain, 1.0, 1); //Set the end of the chain to be built on for unspecified substituents. endOfChain = currentMolecule.getLastAtom(); } //Ketones else if (funGroupToken == "one") { addAtom("O", endOfChain, 2.0, 2); //End of chain doesn't change in this case } //Organometals else if (getMetalAtomicSymbol (funGroupToken) != null) { currentMolecule.addAtom (new Atom (getMetalAtomicSymbol (funGroupToken))); endOfChain = currentMolecule.getLastAtom(); } else { // logger.debug("Encountered unknown group: " + funGroupToken + " at " + addPos + // "\nThe parser thinks this is valid but the molecule builder has no logic for it"); } }
|