/* $RCSfile$
* $Author$
* $Date$
* $Revision$
*
* Copyright (C) 2005-2007 Christian Hoppe <chhoppe@users.sf.net>
*
* Contact: cdk-devel@lists.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
* All we ask is that proper credit is given for our work, which includes
* - but is not limited to - adding the above copyright notice to the beginning
* of your source code files, and to any copyright notice that you may distribute
* with programs based on this work.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
*/
package org.openscience.cdk.modeling.builder3d;
import java.util.List;
import java.util.Vector;
import java.util.regex.Pattern;
/**
* Class stores hose code patterns to identify mm2 force field atom types
*
* @author chhoppe
* @cdk.created 2004-09-07
* @cdk.module forcefield
* @cdk.githash
*/
public class MMFF94BasedAtomTypePattern {
private List<Pattern> atomTypePatterns = new Vector<Pattern>();
/**
*Constructor for the MM2BasedAtomTypePattern object
*/
MMFF94BasedAtomTypePattern() {
createPattern();
}
/**
* Gets the atomTypePatterns attribute of the MM2BasedAtomTypePattern object
*
* @return The atomTypePatterns as a vector
*/
public List<Pattern> getAtomTypePatterns() {
return atomTypePatterns;
}
/**
* Creates the atom type pattern
*/
private void createPattern() {
atomTypePatterns.add(Pattern.compile("C-[0-4][+]?+;[A-Za-z+-]{0,6}[(].*+"));
//Csp3
atomTypePatterns.add(Pattern.compile("[C]-[1-3];[H]{0,2}+[A-Za-z]*+=[C]{1}+.*+"));
//Csp2
atomTypePatterns.add(Pattern.compile("[CS]-[0-3];[H]{0,2}+[A-Za-z]*+=[NOPS]{1}+.*+"));
//Csp2 C=
atomTypePatterns.add(Pattern.compile("C-[0-2];[H]{0,1}+%.*+"));
//csp
atomTypePatterns.add(Pattern.compile("[CS]-[3][-]?+;[A-Za-z]{0,2}+=O=O[A-Za-z]{0,2}+[(].*+"));
//C(S)O2-M
atomTypePatterns.add(Pattern.compile("C-[2-3];[H]{0,1}+=N[+]?+N[+]?+C[(].*+"));
//CNN+ N+=C-N
atomTypePatterns.add(Pattern.compile("C-1[-]?+;%N[+]?+[(].*+"));
//c in isonitrile C%
atomTypePatterns.add(Pattern.compile("C-2;=N[+]?+N[(].*+"));
//imidazolium IM+
atomTypePatterns.add(Pattern.compile("C-[0-4];[A-Za-z+-]{1,6}[(].*+"));
//CR4R Csp3 in 4 member rings -> in configure atom type (20)
atomTypePatterns.add(Pattern.compile("C-[0-4];[A-Za-z+-]{1,6}[(].*+"));
//CR3R Csp3 in 3 member rings -> in configure atom type (10)
atomTypePatterns.add(Pattern.compile("[C]-[0-3];[H]{0,2}+[A-Za-z]*+=[A-Z]{1,2}+.*+"));
//CE4R Csp2 ->configure atom 4mRing
atomTypePatterns.add(Pattern.compile("[C]-[0-3];[H]{0,2}+[A-Za-z]*+=[A-Z]{1,2}+.*+"));
//Car Csp2 aromatic
atomTypePatterns.add(Pattern.compile("C-[2-3];[H]?+[C]{1}+[A-Z&&[^C]]{1}+[(].*+"));
//C5A atom configure alpha carbon 5 mem. hetero ring
atomTypePatterns.add(Pattern.compile("C-[2-3];[H]?+[C]{2,3}+[(][HC]{0,2}+[,]?+[A-Z&&[^C]]{1}+.*+"));
//C5B atom configure beta carbon 5 mem. hetero ring
atomTypePatterns.add(Pattern.compile("NO PATTERN"));
// C5 c or n in heteroaromtaic ring, not alpha or beta C5/N5 (15)
atomTypePatterns.add(Pattern.compile("H-[1];[C,Si][+]?+[(].*+"));
//HC
atomTypePatterns.add(Pattern.compile("H-[1];O[(].{2,}+.*+"));
//HO
atomTypePatterns.add(Pattern.compile("H-[0-1];[N][(].*+"));
//HN
atomTypePatterns.add(Pattern.compile("H-1;O[(]C/[H]{0,1}+=O.*+"));
//HO COOH-> configure Atom
atomTypePatterns.add(Pattern.compile("H-[0-1];N[(][H]{0,2}+=C.*+"));
//HN=C -> configure atom (20)
atomTypePatterns.add(Pattern.compile("H-[0-1];N[(][H]{0,2}+=[A-Z[^C]].*+"));
//HN2 HN=X -> configure atom
atomTypePatterns.add(Pattern.compile("H-[0-1];O[(]C/[H]?+=C.*+"));
//HOCC enol phenol
atomTypePatterns.add(Pattern.compile("H-[0-1];O[(]H[)]"));
//HOH
atomTypePatterns.add(Pattern.compile("H-[0-1];O[(][H]{0,2}+=?+S.*+"));
//HOS
atomTypePatterns.add(Pattern.compile("H-[0-1];[N][+][(].*+"));
//HN+
atomTypePatterns.add(Pattern.compile("H-[1];O[+][(][A-Za-z[^=]]{1,4}+.*+"));
//HO+
atomTypePatterns.add(Pattern.compile("H-[1];O[+][(].*+"));
//HO=+
atomTypePatterns.add(Pattern.compile("H-[1];[SP].*+"));
//H on S or P (28)
atomTypePatterns.add(Pattern.compile("O-[2];[HCSN]{1,2}+[+]?+[(].*+"));
//O Ether,Alcohol
atomTypePatterns.add(Pattern.compile("O-[1];=.*+"));
//0= (30)
atomTypePatterns.add(Pattern.compile("O-[1];=[A-Za-z[^C]]{1,2}+.*+"));
//O=X
atomTypePatterns.add(Pattern.compile("O-[1][-]?+;.*+"));
//OM O-
atomTypePatterns.add(Pattern.compile("O-[3][+];.*+"));
//O+
atomTypePatterns.add(Pattern.compile("O-[1-2][+];[A-Za-z]{0,2}+=.*+"));
//O=+
atomTypePatterns.add(Pattern.compile("O-[1-2];[H]{0,2}+.*"));
//O in water
atomTypePatterns.add(Pattern.compile("O-2;CC.=C.*+&.*+&.*+"));
//osp2furan (36)
atomTypePatterns.add(Pattern.compile("N-[0-3];[A-Za-z &&[^=%]]{1,3}+.*+"));
//N nsp3
atomTypePatterns.add(Pattern.compile("N-[1-3];[H]{0,2}+[A-Za-z]*+=[CN].*+"));
//N=C n imides
atomTypePatterns.add(Pattern.compile("N-[1-3];[H]{0,3}+[C]*+[(].*+=C.*+"));
//NC=C
atomTypePatterns.add(Pattern.compile("N-[1-2][+]?+;%.*+"));
//nsp (40)
atomTypePatterns.add(Pattern.compile("N-[2][+]?+;=[NC]=[NC][-]?+[(].*+"));
//n =N= C=N=N N=N=N)
atomTypePatterns.add(Pattern.compile("N-1[+-]?+;%?+=?+N[+]?+[(]=?+N[-]?+.*+"));
//NAZT terminal n in azido);
atomTypePatterns.add(Pattern.compile("N-4[+];.*+"));
//N+ nsp3 ammonium
atomTypePatterns.add(Pattern.compile("N-[2-3][+]?+;=[A-Z[^O]]{1,2}+O[-]?+[(].*+"));
//N2OX n aromatic n oxide sp2
atomTypePatterns.add(Pattern.compile("N-[1-3];[H]{0,2}+[O]{0,1}+[-]?+[A-Za-z[^O]]{0,2}+[O]{0,1}+[-]?+[(].*+"));
//N3OX aromatic n oxide sp3
atomTypePatterns.add(Pattern.compile("N-[1-3][+]?+;[H]{0,2}+[A-Za-z]{0,6}+[(].*+%C.*+%N.*+"));
//NC#N N->CN
atomTypePatterns.add(Pattern.compile("N-3[+];=OCO-.*+"));
//n no2
atomTypePatterns.add(Pattern.compile("N-2;[A-Z[^O]]{0,1}=O[A-Z[^O]]{0,1}[(].*+"));
//n N=O
atomTypePatterns.add(Pattern.compile("N-[1-3];[CH]{1,3}.{1}+[A-Z]{0,3}+[,]?+=OC.*+"));
//NC=0 amid
atomTypePatterns.add(Pattern.compile("N-1-2];[CH]{1}+=S[(].*+"));
//NSO (50)
atomTypePatterns.add(Pattern.compile("N-[1-3][+];[H]{0,2}+=[A-Za-z]{1,3}+[(].*+"));
//n N+=
atomTypePatterns.add(Pattern.compile("N-[0-3][+];[H]{0,2}+=C[(][A-Za-z[^=%N]]{0,7}[N]{1}+/.*+"));
//n NCN+
atomTypePatterns.add(Pattern.compile("N-[0-3][+];[H]{0,2}+=C[(][N]]{2}+/.*+"));
//n NGD+
atomTypePatterns.add(Pattern.compile("N-[1-2][+];[H]{0,1}+%[NC][-]?+[(].*+"));
//NR% n in isonitrile, diazo
atomTypePatterns.add(Pattern.compile("N-[1-2][-];[H]{0,1}+S[A-Z]{0,1}+[(][H]{0,4}+=?+O[-]?+.*+"));
//NM n deproonated sulfonamid
atomTypePatterns.add(Pattern.compile("N-[2][-];.*+"));
//N5M neg charged n
atomTypePatterns.add(Pattern.compile("N-[2-3];[H]{0,1}+[A-Za-z[^N]]{2,3}+[(].*+"));
//NPYD n aromatic 6
atomTypePatterns.add(Pattern.compile("N-[2-3];[H]{0,1}+[A-Za-z[^N]]{2,3}+[(].*+"));
//NPYL n aromtiac 5
atomTypePatterns.add(Pattern.compile("N-[2-3][+];[H]{0,1}+[A-Za-z[^NO]]{2,3}+[(].*+"));
//n npyd+ NCN+ Pyrimidinium
atomTypePatterns.add(Pattern.compile("N-[2-3][+]?+;[H]{0,1}+=?+[N,O,S]{0,1}+[+]?+=?+C[+]?+[N,O,S]{0,1}+[(].*+"));
//N5A n aromatic 5 CN=N (60)
atomTypePatterns.add(Pattern.compile("N-[2,3];[H]{0,1}+=CC[(][H]{0,3}+=?+[A-Z[^C]].*+"));
//N5B n aromatic 5 N=CN
atomTypePatterns.add(Pattern.compile("N-[3][+];[A-Z[^ON]]{2}+O[-]?+[(].*+"));
//NPOX n aromatic n oxide aromatic 6 ring -> configure
atomTypePatterns.add(Pattern.compile("N-[3][+];[A-Z[^ON]]{2}+O[-]?+[(].*+"));
//N5Ox
atomTypePatterns.add(Pattern.compile("NO PATTERN"));
//N5+
atomTypePatterns.add(Pattern.compile("N-[1-3];[H]{0,1}+[A-Za-z]++[(].*+"));
//N5 (65)
atomTypePatterns.add(Pattern.compile("S-[1-2];[HCNO]{1,2}+[+]?+[(].*+"));
//S thioether, mercaptane
atomTypePatterns.add(Pattern.compile("S-[1];[H]{0,2}+=C.*+"));
//terminal S=C
atomTypePatterns.add(Pattern.compile("S-[1-3];[H]{0,2}+=[ON].*+"));
//>SN
atomTypePatterns.add(Pattern.compile("S-[3-4];[H]{0,2}+=[OCN]=[OCN]=?+[OCN]{0,2}+[(].*+"));
//SO2
atomTypePatterns.add(Pattern.compile("S-[1-2][-]?+;[H]{0,1}+[A-Za-z]{0,2}+[(].*+"));
//temrinal SX (70)
atomTypePatterns.add(Pattern.compile("S-[3];=OO[-]?+[A-Za-z]{1,2}+[-]?+[(].*+"));
//S SO2 in negativly charged SO2R group
atomTypePatterns.add(Pattern.compile("S-[2];=[A-Za-z]{1,2}=O+[(].*+"));
//=SO
atomTypePatterns.add(Pattern.compile("S-[2];[H]{0,3}+=C.*+"));
//Stringin thiophen (73)
atomTypePatterns.add(Pattern.compile("P-[4];.*+"));
//P tetra ->configure Atom for P
atomTypePatterns.add(Pattern.compile("P-[0-3];.*+"));
//P tri -> configure atom for P=C
atomTypePatterns.add(Pattern.compile("P-[2];=C[A-Za-z]{1,2}+[(].*+"));
//P C=P-
atomTypePatterns.add(Pattern.compile("F-[0-7][+]?+;.*+"));
//F
atomTypePatterns.add(Pattern.compile("Cl-[0-7][+]?+;.*+"));
//Cl
atomTypePatterns.add(Pattern.compile("Br-[0-7][+]?+;.*+"));
//Br
atomTypePatterns.add(Pattern.compile("I.*+"));
//I
atomTypePatterns.add(Pattern.compile("Si.*+"));
//Silane
atomTypePatterns.add(Pattern.compile("Cl[4];.*+"));
//cl in perchlorat anion
atomTypePatterns.add(Pattern.compile("Fe2[+].*+"));
//Fe 2
atomTypePatterns.add(Pattern.compile("Fe3[+].*+"));
//Fe 3
atomTypePatterns.add(Pattern.compile("F-[0-2][-];.*+"));
//F
atomTypePatterns.add(Pattern.compile("Cl-[0-2][-];.*+"));
//Cl
atomTypePatterns.add(Pattern.compile("Br-[0-2][-];.*+"));
//Br
atomTypePatterns.add(Pattern.compile("Li-[0-2][+];.*+"));
//Li+
atomTypePatterns.add(Pattern.compile("Na[+];.*+"));
//Na+
atomTypePatterns.add(Pattern.compile("K[+];.*+"));
//K+
atomTypePatterns.add(Pattern.compile("Zn2[+];.*+"));
//Zn2+
atomTypePatterns.add(Pattern.compile("Ca2[+];.*+"));
//Ca2+
atomTypePatterns.add(Pattern.compile("Cu[+];.*+"));
//Cu1+
atomTypePatterns.add(Pattern.compile("Cu2[+];.*+"));
//Cu2+
atomTypePatterns.add(Pattern.compile("Mg2[+];.*+"));
//Mg2+
}
}