/* $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+ } }