/* $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 MM2BasedAtomTypePattern {
private List<Pattern> atomTypePatterns = new Vector<Pattern>();
/**
*Constructor for the MM2BasedAtomTypePattern object
*/
MM2BasedAtomTypePattern() {
this.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("[CSP]-[0-4][-]?+;[A-Za-z+-]{0,6}[(].*+"));
//Csp3
atomTypePatterns.add(Pattern.compile("[CS]-[0-3];[H]{0,2}+[A-Za-z]*+=[A-Z]{1,2}+.*+"));
//Csp2
atomTypePatterns.add(Pattern.compile("C-[0-3];=O.*+"));
//C carbonyl
atomTypePatterns.add(Pattern.compile("C-[1-2][-]?+;[H]{0,1}+%.*+"));
//csp
atomTypePatterns.add(Pattern.compile("H-[0-1];[C].*+"));
//H
atomTypePatterns.add(Pattern.compile("[OS]-[0-2][-]?+;[A-Za-z]{1,4}+[+]?+[(].*+"));
//O Ether,Alcohol
atomTypePatterns.add(Pattern.compile("O-[1-2][+]?+;[H]{0,1}+=[SPC].[^O]++.*+"));
//=0 Carbonyl
atomTypePatterns.add(Pattern.compile("N-[0-3][+-]?+;[A-Z &&[^=%]]{1,3}+.*+"));
//nsp3
atomTypePatterns.add(Pattern.compile("N-[1-3][-+]?+;=?+[ON]?+[+]?+[CH]*+.(=O)?+.*+"));
//nsp2amide
atomTypePatterns.add(Pattern.compile("N-[1-2][+]?+;%.*+"));
//nsp (10)
atomTypePatterns.add(Pattern.compile("F.*+"));
//F
atomTypePatterns.add(Pattern.compile("Cl.*+"));
//Cl
atomTypePatterns.add(Pattern.compile("Br.*+"));
//Br
atomTypePatterns.add(Pattern.compile("I.*+"));
//I
atomTypePatterns.add(Pattern.compile("S-[1-2][-]?+;[HCSON]{1,2}+[(].*+"));
//S Sulfide
atomTypePatterns.add(Pattern.compile("S-3+;.?+[A-Za-z]++.*+"));
//S+Sulfonium
atomTypePatterns.add(Pattern.compile("S-[1-2][+]?+;=[OCNP][A-Z]++.*+"));
//S=0
atomTypePatterns.add(Pattern.compile("S-4;=O=O[A-Za-z]++.*+"));
//So2
atomTypePatterns.add(Pattern.compile("Si.*+"));
//Silane
atomTypePatterns.add(Pattern.compile("LP.*+"));
//Lonepair (20)
atomTypePatterns.add(Pattern.compile("H-1;O[+-]?+.[PSCN]{0,2}+/.*+"));
//H- OH
atomTypePatterns.add(Pattern.compile("C-3;CCC..?+&?+[A-Za-z]?+,?+.?+&?+,?+.?+&?+.*+"));
//C Cyclopropane
atomTypePatterns.add(Pattern.compile("H-1;[NP][+]?+[(][H]{0,2}+=?+[A-Z]{0,2}+/.*+"));
//H- NH amine
atomTypePatterns.add(Pattern.compile("H-1;O[+]?+.=?+C/=?+[OCSP]{1,2}+/.*+"));
//H- COOH
atomTypePatterns.add(Pattern.compile("P-[0-3];[A-Za-z]{1,3}[(].*+"));
//>P
atomTypePatterns.add(Pattern.compile("B-[0-3];[A-Za-z]{1,2}.*+"));
//>B
atomTypePatterns.add(Pattern.compile("B-4;[A-Za-z]{1,4}.*+"));
//>B<
atomTypePatterns.add(Pattern.compile("SPECIAL DEFINITON "));
//H- Amide/Enol
atomTypePatterns.add(Pattern.compile("NOT Implemented"));
//C* Carbonradical
atomTypePatterns.add(Pattern.compile("C-[0-9][+];.*+"));
//C+ (30)
atomTypePatterns.add(Pattern.compile("Ge.*+"));
//Ge
atomTypePatterns.add(Pattern.compile("Sn.*+"));
//Sn
atomTypePatterns.add(Pattern.compile("Pb.*+"));
//Pb
atomTypePatterns.add(Pattern.compile("Se.*+"));
//Se
atomTypePatterns.add(Pattern.compile("Te.*+"));
//Te
atomTypePatterns.add(Pattern.compile("D-1;.*+"));
//D
atomTypePatterns.add(Pattern.compile("N-2;=CC..*+"));
//-N= azo,Pyridin
atomTypePatterns.add(Pattern.compile("C-2;=CC..?+[A-Za-z]?+,?+&?+,?+C?+&?+.*+"));
//Csp2 Cyclopropene
atomTypePatterns.add(Pattern.compile("N-4[+]?+;.*+"));
//nsp3 ammonium
atomTypePatterns.add(Pattern.compile("N-[2-3];H?+CC.[^(=O)].*+"));
//nsp2pyrrole (40)
atomTypePatterns.add(Pattern.compile("O-2;CC.=C.*+&.*+&.*+"));
//osp2furan
atomTypePatterns.add(Pattern.compile("S-2;CC.*+"));
//s sp2 thiophene
atomTypePatterns.add(Pattern.compile("N-[2-3][+]?+;=N.*+C?+O?+[-]?+.*+"));
//-N=N-O
atomTypePatterns.add(Pattern.compile("H-1;S.*+"));
//H- S hiol
atomTypePatterns.add(Pattern.compile("N-2[+];=?+%?+[NC][-=]{0,2}+[NC][-]?+.*+"));
//Azide Center n
atomTypePatterns.add(Pattern.compile("N-3[+];=O[A-Z]-?+[A-Z]-?+.*+"));
//n no2
atomTypePatterns.add(Pattern.compile("O-1-?+;=?+[CS][(][=0]?+[OCSNH]*+/.*+"));
//0 carboxylate
atomTypePatterns.add(Pattern.compile("H-1;N[+].[A-Z]{0,3}+/.*+"));
//h ammonium
atomTypePatterns.add(Pattern.compile("O-2;CC.H?+,?+H?+,?+&,&.*+"));
//Epoxy
atomTypePatterns.add(Pattern.compile("C-2;=CC.*+"));
//C Benzene (50)
atomTypePatterns.add(Pattern.compile("He.*+"));
//He
atomTypePatterns.add(Pattern.compile("Ne.*+"));
//Ne
atomTypePatterns.add(Pattern.compile("Ar.*+"));
//Ar
atomTypePatterns.add(Pattern.compile("Kr.*+"));
//Kr
atomTypePatterns.add(Pattern.compile("Xe.*+"));
//Xe
atomTypePatterns.add(Pattern.compile("NotImplemented"));
atomTypePatterns.add(Pattern.compile("NotImplemented"));
atomTypePatterns.add(Pattern.compile("NotImplemented"));
atomTypePatterns.add(Pattern.compile("Mg.*+"));
//Mg
atomTypePatterns.add(Pattern.compile("P-[2-4];.*"));
//P (60)
atomTypePatterns.add(Pattern.compile("Fe.*+"));
//Fe 2
atomTypePatterns.add(Pattern.compile("Fe.*+"));
//Fe 3
atomTypePatterns.add(Pattern.compile("Ni.*+"));
//Ni 2
atomTypePatterns.add(Pattern.compile("Ni.*+"));
//Ni 3
atomTypePatterns.add(Pattern.compile("Co.*+"));
//Co 2
atomTypePatterns.add(Pattern.compile("Co.*+"));
//Co 3
atomTypePatterns.add(Pattern.compile("NotImplemented"));
atomTypePatterns.add(Pattern.compile("NotImplemented"));
atomTypePatterns.add(Pattern.compile("O-1[-]?+;=?+N.*+"));
//Amineoxide
atomTypePatterns.add(Pattern.compile("O-3[+];[H]{0,3}+[C]{0,3}+[(].*+"));
//Ketoniumoxygen (70)
atomTypePatterns.add(Pattern.compile("C-1NotImplemented"));
//Ketoniumcarbon
atomTypePatterns.add(Pattern.compile("N-2;=C[^CO].*+"));
//N =N-Imine,Oxime
atomTypePatterns.add(Pattern.compile("N-3[+];[H]{0,2}+=?+[C]{0,3}+[(].*+"));
//N+ =N+Pyridinium
atomTypePatterns.add(Pattern.compile("N-[2-3][+];=C[CO]{2}+.?+[(].*+"));
//N+ =N+Imminium
atomTypePatterns.add(Pattern.compile("N-[2-3][+]?+;=CO.*+"));
//N-0H Oxime
atomTypePatterns.add(Pattern.compile("H-1;N[(]{1}+[CH]{2,2}+/[H]{0,3}+[,]?+=OC.*+"));
//H- Amide
atomTypePatterns.add(Pattern.compile("H-1;O.C/=CC/.*+"));
//H- AEnol (77)
atomTypePatterns.add(Pattern.compile("N-[1-3];[CH]{1,3}.{1}+[A-Z]{0,3}+[,]?+=OC.*+"));
//amid
}
}