/* $Revision$ $Author$ $Date$
 *
 * Copyright (c) 2006-2008 Rational Discovery LLC, Greg Landrum, and Julie Penzotti
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 *       copyright notice, this list of conditions and the following
 *       disclaimer in the documentation and/or other materials provided
 *       with the distribution.
 *     * Neither the name of Rational Discovery nor the names of its
 *       contributors may be used to endorse or promote products derived
 *       from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.openscience.cdk.config.fragments;

/**
 * A class representing the 79 E-state atom types in terms of SMARTS.
 * <p/>
 * These fragments were originally described in {@cdk.cite HALL1995} and were
 * converted into SMARTS forms by the <a href="http://www.rdkit.org">RDKit</a> project
 *
 * @cdk.module  standard
 * @author  Greg Landrum
 * @cdk.created 2008-07-22
 * @cdk.keyword estate
 * @cdk.keyword fragment
 */
public class EStateFragments {

    /**
     * The names of the fragments.
     * <p/>
     * See <a href="http://www.edusoft-lc.com/molconn/manuals/350/appV.html">
     * here</a> for the corresponding chemical groups
     */
    private static final String[] names = {
            "sLi", "ssBe", "ssssBe",
            "ssBH", "sssB", "ssssB",
            "sCH3", "dCH2", "ssCH2",
            "tCH", "dsCH", "aaCH",
            "sssCH", "ddC", "tsC",
            "dssC", "aasC", "aaaC",
            "ssssC", "sNH3", "sNH2",
            "ssNH2", "dNH", "ssNH",
            "aaNH", "tN", "sssNH",
            "dsN", "aaN", "sssN",
            "ddsN", "aasN", "ssssN",
            "sOH", "dO", "ssO",
            "aaO", "sF", "sSiH3",
            "ssSiH2", "sssSiH", "ssssSi",
            "sPH2", "ssPH", "sssP",
            "dsssP", "sssssP", "sSH",
            "dS", "ssS", "aaS",
            "dssS", "ddssS", "sCl",
            "sGeH3", "ssGeH2", "sssGeH",
            "ssssGe", "sAsH2", "ssAsH",
            "sssAs", "sssdAs", "sssssAs",
            "sSeH", "dSe", "ssSe",
            "aaSe", "dssSe", "ddssSe",
            "sBr", "sSnH3", "ssSnH2",
            "sssSnH", "ssssSn", "sI",
            "sPbH3", "ssPbH2", "sssPbH",
            "ssssPb",};

    /**
     * The SMARTS patterns.
     */
    private static final String[] smarts = {
            "[LiD1]-*", "[BeD2](-*)-*", "[BeD4](-*)(-*)(-*)-*",
            "[BD2H](-*)-*", "[BD3](-*)(-*)-*", "[BD4](-*)(-*)(-*)-*",
            "[CD1H3]-*", "[CD1H2]=*", "[CD2H2](-*)-*",
            "[CD1H]#*", "[CD2H](=*)-*", "[C,c;D2H](:*):*",
            "[CD3H](-*)(-*)-*", "[CD2H0](=*)=*", "[CD2H0](#*)-*",
            "[CD3H0](=*)(-*)-*", "[C,c;D3H0](:*)(:*)-*", "[C,c;D3H0](:*)(:*):*",
            "[CD4H0](-*)(-*)(-*)-*", "[ND1H3]-*", "[ND1H2]-*",
            "[ND2H2](-*)-*", "[ND1H]=*", "[ND2H](-*)-*",
            "[N,nD2H](:*):*", "[ND1H0]#*", "[ND3H](-*)(-*)-*",
            "[ND2H0](=*)-*", "[N,nD2H0](:*):*", "[ND3H0](-*)(-*)-*",
            "[ND3H0](~[OD1H0])(~[OD1H0])-,:*", "[N,nD3H0](:*)(:*)-,:*", "[ND4H0](-*)(-*)(-*)-*",
            "[OD1H]-*", "[OD1H0]=*", "[OD2H0](-*)-*",
            "[O,oD2H0](:*):*", "[FD1]-*", "[SiD1H3]-*",
            "[SiD2H2](-*)-*", "[SiD3H1](-*)(-*)-*", "[SiD4H0](-*)(-*)(-*)-*",
            "[PD1H2]-*", "[PD2H1](-*)-*", "[PD3H0](-*)(-*)-*",
            "[PD4H0](=*)(-*)(-*)-*", "[PD5H0](-*)(-*)(-*)(-*)-*", "[SD1H1]-*",
            "[SD1H0]=*", "[SD2H0](-*)-*", "[S,sD2H0](:*):*",
            "[SD3H0](=*)(-*)-*", "[SD4H0](~[OD1H0])(~[OD1H0])(-*)-*", "[ClD1]-*",
            "[GeD1H3](-*)", "[GeD2H2](-*)-*", "[GeD3H1](-*)(-*)-*",
            "[GeD4H0](-*)(-*)(-*)-*", "[AsD1H2]-*", "[AsD2H1](-*)-*",
            "[AsD3H0](-*)(-*)-*", "[AsD4H0](=*)(-*)(-*)-*", "[AsD5H0](-*)(-*)(-*)(-*)-*",
            "[SeD1H1]-*", "[SeD1H0]=*", "[SeD2H0](-*)-*",
            "[SeD2H0](:*):*", "[SeD3H0](=*)(-*)-*", "[SeD4H0](=*)(=*)(-*)-*",
            "[BrD1]-*", "[SnD1H3]-*", "[SnD2H2](-*)-*",
            "[SnD3H1](-*)(-*)-*", "[SnD4H0](-*)(-*)(-*)-*", "[ID1]-*",
            "[PbD1H3]-*", "[PbD2H2](-*)-*", "[PbD3H1](-*)(-*)-*",
            "[PbD4H0](-*)(-*)(-*)-*",};

    /**
     * Get the fragment names.
     *
     * @return a string array of the names
     */
    public static String[] getNames() {
        return names;
    }

    /**
     * Get the SMARTS patterns.
     *
     * @return a string array with the SMARTS patterns
     */
    public static String[] getSmarts() {
        return smarts;
    }
}
