cgal/PDB/src/CGALPDB/Monomer_data.cpp

893 lines
38 KiB
C++

/* Copyright 2004
Stanford University
This file is part of the DSR PDB Library.
The DSR PDB Library 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.
The DSR PDB Library 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 the DSR PDB Library; see the file LICENSE.LGPL. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA. */
#include <CGAL/PDB/Monomer.h>
#include <CGAL/PDB/internal/Monomer_data.h>
#include <cassert>
CGAL_PDB_BEGIN_NAMESPACE
namespace Monomer_data {
bool amino_acid_initialized_=false;
typedef std::vector<std::vector<Monomer::Atom_key> > Clean_atom_fallbacks;
std::vector<Amino_acid_data > amino_acid_data_;
//! The per atom data associating string names with labels and atom types
/*! To add a new atom or a different string refering to the same
atom add a line to this array.
*/
Atom_data atom_name_data_[]= {
{" N ",Monomer::AL_N, Atom::N},
{" H ",Monomer::AL_H, Atom::H},
{"1H ",Monomer::AL_1H, Atom::H},{" H1 ",Monomer::AL_1H, Atom::H},
{"2H ",Monomer::AL_2H, Atom::H},{" H2 ",Monomer::AL_2H, Atom::H},
{"3H ",Monomer::AL_3H, Atom::H},{" H3 ",Monomer::AL_3H, Atom::H},
{" C ",Monomer::AL_C, Atom::C},
{" O ",Monomer::AL_O, Atom::O},
{" OXT",Monomer::AL_OXT, Atom::O},
{" CH3",Monomer::AL_CH3, Atom::C},
{" CA ",Monomer::AL_CA, Atom::C},
{" HA ",Monomer::AL_HA, Atom::H},
{"1HA ",Monomer::AL_1HA, Atom::H},{" HA1",Monomer::AL_1HA, Atom::H},
{"2HA ",Monomer::AL_2HA, Atom::H},{" HA2",Monomer::AL_2HA, Atom::H},
{" CB ",Monomer::AL_CB, Atom::C},
{" HB ",Monomer::AL_HB, Atom::H},
{"1HB ",Monomer::AL_1HB, Atom::H}, {" HB1",Monomer::AL_1HB, Atom::H},
{"2HB ", Monomer::AL_2HB, Atom::H}, {" HB2", Monomer::AL_2HB, Atom::H},
{"3HB ", Monomer::AL_3HB, Atom::H}, {" HB3", Monomer::AL_3HB, Atom::H},
{" CG ",Monomer::AL_CG, Atom::C},
{" CG1",Monomer::AL_CG1, Atom::C},
{" CG2",Monomer::AL_CG2, Atom::C},
{" HG ",Monomer::AL_HG, Atom::H},
{"1HG ", Monomer::AL_1HG, Atom::H}, {" HG1", Monomer::AL_1HG, Atom::H},
{"2HG ", Monomer::AL_2HG, Atom::H}, {" HG2", Monomer::AL_2HG, Atom::H},
//{"HG1",Monomer::AL_HG1},
{"1HG1",Monomer::AL_1HG1, Atom::H},{"HG11",Monomer::AL_1HG1, Atom::H},
{"2HG1",Monomer::AL_2HG1, Atom::H},{"HG12",Monomer::AL_2HG1, Atom::H},
{"3HG1",Monomer::AL_3HG1, Atom::H},{"HG13",Monomer::AL_3HG1, Atom::H},
{"1HG2",Monomer::AL_1HG2, Atom::H},{"HG21",Monomer::AL_1HG2, Atom::H},
{"2HG2",Monomer::AL_2HG2, Atom::H},{"HG22",Monomer::AL_2HG2, Atom::H},
{"3HG2",Monomer::AL_3HG2, Atom::H},{"HG23",Monomer::AL_3HG2, Atom::H},
{" OG ",Monomer::AL_OG, Atom::O},
{" OG1",Monomer::AL_OG1, Atom::O},
{" SG ",Monomer::AL_SG, Atom::S},
{" CD ",Monomer::AL_CD, Atom::C},
{" CD1",Monomer::AL_CD1, Atom::C},
{" CD2",Monomer::AL_CD2, Atom::C},
//{"HD1",Monomer::AL_HD1},
//{"HD2",Monomer::AL_HD2},
{" HD ",Monomer::AL_HD, Atom::H},
{"1HD ",Monomer::AL_1HD, Atom::H},{" HD1",Monomer::AL_1HD, Atom::H},
{"2HD ",Monomer::AL_2HD, Atom::H},{" HD2",Monomer::AL_2HD, Atom::H},
{"3HD ",Monomer::AL_3HD, Atom::H},{" HD3",Monomer::AL_3HD, Atom::H},
{"1HD1",Monomer::AL_1HD1, Atom::H}, {"HD11",Monomer::AL_1HD1, Atom::H},
{"2HD1",Monomer::AL_2HD1, Atom::H},{"HD12",Monomer::AL_2HD1, Atom::H},
{"3HD1",Monomer::AL_3HD1, Atom::H},{"HD13",Monomer::AL_3HD1, Atom::H},
{"1HD2",Monomer::AL_1HD2, Atom::H},{"HD21",Monomer::AL_1HD2, Atom::H},
{"2HD2",Monomer::AL_2HD2, Atom::H},{"HD22",Monomer::AL_2HD2, Atom::H},
{"3HD2",Monomer::AL_3HD2, Atom::H},{"HD23",Monomer::AL_3HD2, Atom::H},
{" SD ",Monomer::AL_SD, Atom::S},
{" OD1",Monomer::AL_OD1, Atom::O},
{" OD2",Monomer::AL_OD2, Atom::O},
{" ND1",Monomer::AL_ND1, Atom::N},
{" ND2",Monomer::AL_ND2, Atom::N},
{" CE ",Monomer::AL_CE, Atom::C},
{" CE1",Monomer::AL_CE1, Atom::C},
{" CE2",Monomer::AL_CE2, Atom::C},
{" CE3",Monomer::AL_CE3, Atom::C},
{" HE ",Monomer::AL_HE, Atom::H},
{"1HE ",Monomer::AL_1HE, Atom::H},{" HE1",Monomer::AL_1HE, Atom::H},
{"2HE ",Monomer::AL_2HE, Atom::H},{" HE2",Monomer::AL_2HE, Atom::H},
{"3HE ",Monomer::AL_3HE, Atom::H},{" HE3",Monomer::AL_3HE, Atom::H},
//{"HE1",Monomer::AL_HE1},
//{"HE2",Monomer::AL_HE2},
//{"HE3",Monomer::AL_HE3},
{"1HE2",Monomer::AL_1HE2, Atom::H},{"HE21",Monomer::AL_1HE2, Atom::H},
{"2HE2",Monomer::AL_2HE2, Atom::H},{"HE22",Monomer::AL_2HE2, Atom::H},
{" OE1",Monomer::AL_OE1, Atom::O},
{" OE2",Monomer::AL_OE2, Atom::O},
{" NE ",Monomer::AL_NE, Atom::N},
{" NE1",Monomer::AL_NE1, Atom::N},
{" NE2",Monomer::AL_NE2, Atom::N},
{" CZ ",Monomer::AL_CZ, Atom::C},
{" CZ2",Monomer::AL_CZ2, Atom::C},
{" CZ3",Monomer::AL_CZ3, Atom::C},
{" NZ ",Monomer::AL_NZ, Atom::N},
{" HZ ",Monomer::AL_HZ, Atom::H},
{"1HZ ",Monomer::AL_1HZ, Atom::H},{" HZ1",Monomer::AL_1HZ, Atom::H},
{"2HZ ",Monomer::AL_2HZ, Atom::H},{" HZ2",Monomer::AL_2HZ, Atom::H},
{"3HZ ",Monomer::AL_3HZ, Atom::H},{" HZ3",Monomer::AL_3HZ, Atom::H},
//{"HZ1",Monomer::AL_HZ2},
//{"HZ2",Monomer::AL_HZ2},
//{"HZ3",Monomer::AL_HZ3},
{" CH2",Monomer::AL_CH2, Atom::C},
{" NH1",Monomer::AL_NH1, Atom::N},
{" NH2",Monomer::AL_NH2, Atom::N},
{" OH",Monomer::AL_OH, Atom::O},
{" HH",Monomer::AL_HH, Atom::H},
{"1HH1", Monomer::AL_1HH1, Atom::H}, {"HH11", Monomer::AL_1HH1, Atom::H},
{"2HH1", Monomer::AL_2HH1, Atom::H}, {"HH12", Monomer::AL_2HH1, Atom::H},
{" HH2",Monomer::AL_HH2, Atom::H},
{"1HH2", Monomer::AL_1HH2, Atom::H}, {"HH21", Monomer::AL_1HH2, Atom::H},
{"2HH2", Monomer::AL_2HH2, Atom::H}, {"HH22", Monomer::AL_2HH2, Atom::H},
{" HH ", Monomer::AL_1HH2, Atom::H},
{"HH31", Monomer::AL_1HH3, Atom::H},
{"HH32", Monomer::AL_2HH3, Atom::H},
{"HH33", Monomer::AL_3HH3, Atom::H},
{"P ", Monomer::AL_P, Atom::P},
{"O1P ", Monomer::AL_OP1, Atom::O},
{"O2P ", Monomer::AL_OP2, Atom::O},
{"O5* ", Monomer::AL_O5p, Atom::O},
{"C5* ", Monomer::AL_H5p, Atom::C},
{"H5**", Monomer::AL_H5pp, Atom::H},
{"C4* ", Monomer::AL_C4p, Atom::C},
{"H4* ", Monomer::AL_H4p, Atom::H},
{"O4* ", Monomer::AL_O4p, Atom::O},
{"C1* ", Monomer::AL_C1p, Atom::C},
{"H1* ", Monomer::AL_H1p, Atom::H},
{"C3* ", Monomer::AL_C3p, Atom::C},
{"H3* ", Monomer::AL_H3p, Atom::H},
{"O3* ", Monomer::AL_O3p, Atom::O},
{"C2* ", Monomer::AL_C2p, Atom::C},
{"H2* ", Monomer::AL_H2p, Atom::H},
{"H2**", Monomer::AL_H2pp, Atom::H},
{"O2* ", Monomer::AL_O2p, Atom::O},
{"HO2*", Monomer::AL_HO2p, Atom::O},
{"N9 ", Monomer::AL_N9, Atom::N},
{"C8 ", Monomer::AL_C8, Atom::C},
{"H8 ", Monomer::AL_H8, Atom::H},
{"N7 ", Monomer::AL_N7, Atom::N},
{"C5 ", Monomer::AL_C5, Atom::C},
{"C4 ", Monomer::AL_C4, Atom::C},
{"N3 ", Monomer::AL_N3, Atom::N},
{"C2 ", Monomer::AL_C2, Atom::C},
{"H2 ", Monomer::AL_H2, Atom::H},
{"N1 ", Monomer::AL_N1, Atom::N},
{"C6 ", Monomer::AL_C6, Atom::C},
{"N6 ", Monomer::AL_N6, Atom::N},
{"H61 ", Monomer::AL_H61, Atom::H},
{"H62 ", Monomer::AL_H62, Atom::H},
{"O6 ", Monomer::AL_O6, Atom::O},
{"H1 ", Monomer::AL_H1, Atom::H},
{"N2 ", Monomer::AL_N2, Atom::N},
{"H21 ", Monomer::AL_H21, Atom::H},
{"H22 ", Monomer::AL_H22, Atom::H},
{"H6 ", Monomer::AL_H6, Atom::H},
{"H5 ", Monomer::AL_H5, Atom::H},
{"O2 ", Monomer::AL_O2, Atom::O},
{"N4 ", Monomer::AL_N4, Atom::N},
{"H41 ", Monomer::AL_H41, Atom::H},
{"H42 ", Monomer::AL_H42,Atom::H},
{"H3 ", Monomer::AL_H3, Atom::H},
{"O4 ", Monomer::AL_O4, Atom::O},
{"C7 ", Monomer::AL_C7, Atom::C},
{"H71 ", Monomer::AL_H71, Atom::H},
{"H72 ", Monomer::AL_H72,Atom::H},
{"H73 ", Monomer::AL_H73,Atom::H},
{"UNKN", Monomer::AL_INVALID, Atom::INVALID}};
Atom_data clean_atom_name_data_[sizeof(atom_name_data_)
/sizeof(Atom_data)+1];
Atom_fallback_data atom_fallback_data_[]=
{{Monomer::AL_CD1, Monomer::AL_CD},
{Monomer::AL_1HA, Monomer::AL_HA},
{Monomer::AL_1HB, Monomer::AL_HB},
{Monomer::AL_1HD, Monomer::AL_HD},
{Monomer::AL_1HE, Monomer::AL_HE},
{Monomer::AL_1HZ, Monomer::AL_HZ},
//{Monomer::AL_1HH, Monomer::AL_HH},
{Monomer::AL_1HD1, Monomer::AL_1HD},
{Monomer::AL_2HD1, Monomer::AL_2HD},
{Monomer::AL_3HD1, Monomer::AL_3HD},
{Monomer::AL_INVALID, Monomer::AL_INVALID}};
Clean_atom_fallbacks clean_atom_fallbacks_;
#define BEGIN_RES(name) case name:{
#define BEGIN_ATOMS static Monomer::Atom_key cl[]=
#define END_ATOMS ; dat.atms_=cl;
#define BEGIN_BONDS static Monomer::Atom_key cbl[]=
#define END_BONDS ; for (int i=0; cbl[i] != Monomer::AL_INVALID; ++i) {\
bool found=false; \
for (int j=0; cl[j] != Monomer::AL_INVALID; ++j) { \
if (cl[j]==cbl[i]) found=true; \
}\
assert(found || cbl[i]== Monomer::AL_CA || cbl[i]== Monomer::AL_N ||cbl[i]== Monomer::AL_C1p); \
}; \
dat.bnds_=cbl;
#define BEGIN_EXTREMES static Monomer::Atom_key ext[]=
#define END_EXTREMES ; for (int i=0; ext[i] != Monomer::AL_INVALID; ++i) { bool found=false; for (int j=0; cl[j] != Monomer::AL_INVALID; ++j) if (cl[j]==ext[i]) found=true; assert(found);} dat.extr_=ext;
/*#define DEFINE_ATOMS(...) static Monomer::Atom_key cl[]={__VA_ARGS__}; dat.atms_=cl;
#define DEFINE_BONDS(...) static Monomer::Atom_key cbl[]={__VA_ARGS__}; for (int i=0; cbl[i] != Monomer::AL_INVALID; ++i) { bool found=false; for (int j=0; cl[j] != Monomer::AL_INVALID; ++j) if (cl[j]==cbl[i]) found=true; assert(found || cbl[i]== Monomer::AL_CA || cbl[i]== Monomer::AL_N);}; dat.bnds_=cbl;
#define DEFINE_EXTREMES(...) static Monomer::Atom_key ext[]={__VA_ARGS__}; for (int i=0; ext[i] != Monomer::AL_INVALID; ++i) { bool found=false; for (int j=0; cl[j] != Monomer::AL_INVALID; ++j) if (cl[j]==ext[i]) found=true; assert(found);} dat.extr_=ext; */
#define END_RES break;}
//! This function returns the per-residue atom and bond information.
/*!
To add an atom or bond to a residue add them to the appropriate list below.
*/
Monomer_init_data
get_residue_initialization_data(Monomer::Type rl){
//using class Monomer;
static Monomer::Atom_key end=Monomer::AL_INVALID;
Monomer_init_data dat;
dat.atms_=&end;
dat.bnds_=&end;
dat.extr_=&end;
switch(rl){
BEGIN_RES(Monomer::VAL);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_HB, Monomer::AL_CG1, Monomer::AL_CG2,
Monomer::AL_1HG1, Monomer::AL_2HG1, Monomer::AL_3HG1, Monomer::AL_1HG2,
Monomer::AL_2HG2, Monomer::AL_3HG2, Monomer::AL_INVALID }END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_HB, Monomer::AL_CB,
Monomer::AL_CG1, Monomer::AL_CB,
Monomer::AL_CG2, Monomer::AL_CB,
Monomer::AL_1HG1, Monomer::AL_CG1,
Monomer::AL_2HG1, Monomer::AL_CG1,
Monomer::AL_3HG1, Monomer::AL_CG1,
Monomer::AL_1HG2, Monomer::AL_CG2,
Monomer::AL_2HG2, Monomer::AL_CG2,
Monomer::AL_3HG2, Monomer::AL_CG2,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CG1, Monomer::AL_CG2, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::TYR);// was HD1, HD2, HE1, HE2
BEGIN_ATOMS{ Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_CD1, Monomer::AL_CD2, Monomer::AL_1HD, Monomer::AL_2HD, Monomer::AL_CE1,
Monomer::AL_CE2, Monomer::AL_1HE, Monomer::AL_2HE, Monomer::AL_CZ, Monomer::AL_OH, Monomer::AL_HH, Monomer::AL_INVALID } END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_CD1, Monomer::AL_CG,
Monomer::AL_CD2, Monomer::AL_CG,
// was HD1, HD2
Monomer::AL_1HD, Monomer::AL_CD1,
Monomer::AL_2HD, Monomer::AL_CD2,
Monomer::AL_CE1, Monomer::AL_CD1,
Monomer::AL_CE2, Monomer::AL_CD2,
// HE1,2
Monomer::AL_1HE, Monomer::AL_CE1,
Monomer::AL_2HE, Monomer::AL_CE2,
Monomer::AL_CZ, Monomer::AL_CE1,
Monomer::AL_CZ, Monomer::AL_CE2,
Monomer::AL_OH, Monomer::AL_CZ,
Monomer::AL_HH, Monomer::AL_OH,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CZ, Monomer::AL_INVALID}END_EXTREMES; // or Monomer::AL_OH
END_RES;
BEGIN_RES(Monomer::TRP);
// was HD1, HE1, HE3, HZ2, HZ3
BEGIN_ATOMS{ Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_CD1, Monomer::AL_CD2, Monomer::AL_HD, Monomer::AL_NE1, Monomer::AL_CE2,
Monomer::AL_CE3, Monomer::AL_1HE, Monomer::AL_3HE, Monomer::AL_CZ2, Monomer::AL_CZ3, Monomer::AL_2HZ, Monomer::AL_3HZ, Monomer::AL_CH2,
Monomer::AL_HH2,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_CD1, Monomer::AL_CG,
Monomer::AL_CD2, Monomer::AL_CG,
// was 1HD
Monomer::AL_HD, Monomer::AL_CD1,
Monomer::AL_NE1, Monomer::AL_CD1,
Monomer::AL_CE2, Monomer::AL_CG,
Monomer::AL_CD2, Monomer::AL_CE2,
Monomer::AL_CE3, Monomer::AL_CD2,
// was HE1,3
Monomer::AL_1HE, Monomer::AL_NE1,
Monomer::AL_3HE, Monomer::AL_CE3,
Monomer::AL_CZ2, Monomer::AL_CE2,
Monomer::AL_CZ3, Monomer::AL_CE3,
Monomer::AL_2HZ, Monomer::AL_CZ2,
Monomer::AL_3HZ, Monomer::AL_CZ3,
Monomer::AL_CH2, Monomer::AL_CZ2,
Monomer::AL_CH2, Monomer::AL_CZ3,
Monomer::AL_HH2, Monomer::AL_CH2,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CH2, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::THR);
// was HG1
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_HB, Monomer::AL_CG2, Monomer::AL_OG1, Monomer::AL_1HG2, Monomer::AL_2HG2, Monomer::AL_3HG2,
Monomer::AL_1HG,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_HB, Monomer::AL_CB,
Monomer::AL_CG2, Monomer::AL_CB,
Monomer::AL_OG1, Monomer::AL_CB,
Monomer::AL_1HG2, Monomer::AL_CG2,
Monomer::AL_2HG2, Monomer::AL_CG2,
Monomer::AL_3HG2, Monomer::AL_CG2,
// was HG1
Monomer::AL_1HG, Monomer::AL_OG1,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CG2, Monomer::AL_OG1, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::SER);
BEGIN_ATOMS{ Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_OG, Monomer::AL_HG,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_OG, Monomer::AL_CB,
Monomer::AL_HG, Monomer::AL_OG,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_OG, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::PRO);
BEGIN_ATOMS{ Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_1HG, Monomer::AL_2HG, Monomer::AL_CD, Monomer::AL_1HD, Monomer::AL_2HD,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_1HG, Monomer::AL_CG,
Monomer::AL_2HG, Monomer::AL_CG,
Monomer::AL_CD, Monomer::AL_CG,
Monomer::AL_1HD, Monomer::AL_CD,
Monomer::AL_2HD, Monomer::AL_CD,
Monomer::AL_CD, Monomer::AL_N,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CG, Monomer::AL_INVALID}END_EXTREMES; // maybe Monomer::AL_CG
END_RES;
BEGIN_RES(Monomer::PHE);
// was HD1, HD2, HE1,2
BEGIN_ATOMS{ Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_CD1, Monomer::AL_CD2, Monomer::AL_1HD, Monomer::AL_2HD, Monomer::AL_CE1,
Monomer::AL_CE2, Monomer::AL_1HE, Monomer::AL_2HE, Monomer::AL_CZ, Monomer::AL_HZ,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_CD1, Monomer::AL_CG,
Monomer::AL_CD2, Monomer::AL_CG,
// was HD1, HD2
Monomer::AL_1HD, Monomer::AL_CD1,
Monomer::AL_2HD, Monomer::AL_CD2,
Monomer::AL_CE1, Monomer::AL_CD1,
Monomer::AL_CE2, Monomer::AL_CD2,
// HE1,2
Monomer::AL_1HE, Monomer::AL_CE1,
Monomer::AL_2HE, Monomer::AL_CE2,
Monomer::AL_CZ, Monomer::AL_CE1,
Monomer::AL_CZ, Monomer::AL_CE2, Monomer::AL_HZ,
Monomer::AL_CZ,Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CZ, Monomer::AL_INVALID}END_EXTREMES; //
END_RES;
BEGIN_RES(Monomer::NH2);
BEGIN_ATOMS{Monomer::AL_N, Monomer::AL_1H, Monomer::AL_2H,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{ Monomer::AL_1H, Monomer::AL_N,
Monomer::AL_2H, Monomer::AL_N,
Monomer::AL_INVALID}END_BONDS;
END_RES;
BEGIN_RES(Monomer::MET);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_1HG, Monomer::AL_2HG,
Monomer::AL_SD, Monomer::AL_CE, Monomer::AL_1HE,
Monomer::AL_2HE, Monomer::AL_3HE,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_1HG, Monomer::AL_CG,
Monomer::AL_2HG, Monomer::AL_CG,
Monomer::AL_SD, Monomer::AL_CG,
Monomer::AL_CE, Monomer::AL_SD,
Monomer::AL_1HE, Monomer::AL_CE,
Monomer::AL_2HE, Monomer::AL_CE,
Monomer::AL_3HE, Monomer::AL_CE,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CE, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::LYS);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_1HG, Monomer::AL_2HG, Monomer::AL_CD, Monomer::AL_1HD, Monomer::AL_2HD,
Monomer::AL_CE, Monomer::AL_1HE, Monomer::AL_2HE, Monomer::AL_NZ, Monomer::AL_1HZ, Monomer::AL_2HZ, Monomer::AL_3HZ,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_1HG, Monomer::AL_CG,
Monomer::AL_2HG, Monomer::AL_CG,
Monomer::AL_CD, Monomer::AL_CG,
Monomer::AL_1HD,Monomer::AL_CD,
Monomer::AL_2HD, Monomer::AL_CD,
Monomer::AL_CE, Monomer::AL_CD,
Monomer::AL_1HE, Monomer::AL_CE,
Monomer::AL_2HE, Monomer::AL_CE,
Monomer::AL_NZ, Monomer::AL_CE,
Monomer::AL_1HZ, Monomer::AL_NZ,
Monomer::AL_2HZ, Monomer::AL_NZ,
Monomer::AL_3HZ, Monomer::AL_NZ,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_NZ, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::LEU);
BEGIN_ATOMS{ Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_HG, Monomer::AL_CD1, Monomer::AL_CD2, Monomer::AL_1HD1, Monomer::AL_2HD1,
Monomer::AL_3HD1, Monomer::AL_1HD2, Monomer::AL_2HD2, Monomer::AL_3HD2,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{ Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_HG, Monomer::AL_CG,
Monomer::AL_CD1, Monomer::AL_CG,
Monomer::AL_CD2, Monomer::AL_CG,
Monomer::AL_1HD1, Monomer::AL_CD1,
Monomer::AL_2HD1, Monomer::AL_CD1,
Monomer::AL_3HD1, Monomer::AL_CD1,
Monomer::AL_1HD2, Monomer::AL_CD2,
Monomer::AL_2HD2, Monomer::AL_CD2,
Monomer::AL_3HD2, Monomer::AL_CD2,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CD1, Monomer::AL_CD2, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::ILE);
// was 1HD
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_HB, Monomer::AL_CG1, Monomer::AL_CG2, Monomer::AL_1HG1, Monomer::AL_2HG1, Monomer::AL_CD, Monomer::AL_1HD, Monomer::AL_2HD,
Monomer::AL_3HD, Monomer::AL_1HG2, Monomer::AL_2HG2, Monomer::AL_3HG2,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_HB, Monomer::AL_CB,
Monomer::AL_CG1, Monomer::AL_CB,
Monomer::AL_CG2, Monomer::AL_CB,
Monomer::AL_1HG1, Monomer::AL_CG1,
Monomer::AL_2HG1, Monomer::AL_CG1,
Monomer::AL_CD, Monomer::AL_CG1,
Monomer::AL_1HD, Monomer::AL_CD,
Monomer::AL_2HD, Monomer::AL_CD,
Monomer::AL_3HD, Monomer::AL_CD,
Monomer::AL_1HG2, Monomer::AL_CG2,
Monomer::AL_2HG2, Monomer::AL_CG2,
Monomer::AL_3HG2, Monomer::AL_CG2,
Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CD, Monomer::AL_INVALID}END_EXTREMES; // maybe add CG2
END_RES;
BEGIN_RES(Monomer::HIS);
// was HD1, HD2 HE1
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_ND1, Monomer::AL_CD2, Monomer::AL_1HD, Monomer::AL_2HD, Monomer::AL_CE1,
Monomer::AL_NE2, Monomer::AL_1HE,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_ND1, Monomer::AL_CG,
Monomer::AL_CD2, Monomer::AL_CG,
Monomer::AL_1HD, Monomer::AL_ND1,
Monomer::AL_2HD, Monomer::AL_CD2,
Monomer::AL_CE1, Monomer::AL_ND1,
Monomer::AL_CE1, Monomer::AL_NE2,
Monomer::AL_1HE, Monomer::AL_CE1,
Monomer::AL_NE2, Monomer::AL_CD2,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CE1, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::GLY);
BEGIN_ATOMS{Monomer::AL_2HA,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{Monomer::AL_2HA, Monomer::AL_CA,Monomer::AL_INVALID}END_BONDS;
BEGIN_EXTREMES{Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::GLU);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_1HG, Monomer::AL_2HG, Monomer::AL_CD, Monomer::AL_OE1, Monomer::AL_OE2,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_1HG, Monomer::AL_CG,
Monomer::AL_2HG, Monomer::AL_CG,
Monomer::AL_CD, Monomer::AL_CG,
Monomer::AL_OE1, Monomer::AL_CD,
Monomer::AL_OE2, Monomer::AL_CD,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CD, Monomer::AL_INVALID}END_EXTREMES; // maybe should be Monomer::AL_OE[12]
END_RES;
BEGIN_RES(Monomer::GLN);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_1HG, Monomer::AL_2HG, Monomer::AL_CD, Monomer::AL_OE1, Monomer::AL_NE2,
Monomer::AL_1HE2, Monomer::AL_2HE2,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_1HG, Monomer::AL_CG,
Monomer::AL_2HG, Monomer::AL_CG,
Monomer::AL_CD, Monomer::AL_CG,
Monomer::AL_OE1, Monomer::AL_CD,
Monomer::AL_NE2, Monomer::AL_CD,
Monomer::AL_1HE2, Monomer::AL_NE2,
Monomer::AL_2HE2, Monomer::AL_NE2,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CD, Monomer::AL_INVALID}END_EXTREMES; // or Monomer::AL_NE2, Monomer::AL_OE1
END_RES;
BEGIN_RES(Monomer::CYS);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_SG, Monomer::AL_HG,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_SG, Monomer::AL_CB,
Monomer::AL_HG, Monomer::AL_SG,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_SG, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::ASP);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_OD1, Monomer::AL_OD2,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_OD1, Monomer::AL_CG,
Monomer::AL_OD2, Monomer::AL_CG,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CG, Monomer::AL_INVALID}END_EXTREMES; // or Monomer::AL_OD[12]
END_RES;
BEGIN_RES(Monomer::ASN);
BEGIN_ATOMS{ Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_OD1, Monomer::AL_ND2, Monomer::AL_1HD2, Monomer::AL_2HD2,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{ Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_OD1, Monomer::AL_CG,
Monomer::AL_ND2, Monomer::AL_CG,
Monomer::AL_1HD2, Monomer::AL_ND2,
Monomer::AL_2HD2, Monomer::AL_ND2 ,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CG, Monomer::AL_INVALID}END_EXTREMES; // or Monomer::AL_OD1, Monomer::AL_ND1
END_RES;
BEGIN_RES(Monomer::ARG);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_CG, Monomer::AL_1HG, Monomer::AL_2HG, Monomer::AL_CD, Monomer::AL_1HD, Monomer::AL_2HD,
Monomer::AL_NE, Monomer::AL_HE, Monomer::AL_CZ, Monomer::AL_NH1, Monomer::AL_NH2, Monomer::AL_1HH1, Monomer::AL_2HH1, Monomer::AL_1HH2,
Monomer::AL_2HH2,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_CG, Monomer::AL_CB,
Monomer::AL_1HG, Monomer::AL_CG,
Monomer::AL_2HG, Monomer::AL_CG,
Monomer::AL_CD, Monomer::AL_CG,
Monomer::AL_1HD, Monomer::AL_CD,
Monomer::AL_2HD, Monomer::AL_CD,
Monomer::AL_NE, Monomer::AL_CD,
Monomer::AL_HE, Monomer::AL_NE,
Monomer::AL_CZ, Monomer::AL_NE,
Monomer::AL_NH1, Monomer::AL_CZ,
Monomer::AL_NH2, Monomer::AL_CZ,
Monomer::AL_1HH1, Monomer::AL_NH1,
Monomer::AL_2HH1, Monomer::AL_NH1,
Monomer::AL_1HH2, Monomer::AL_NH2,
Monomer::AL_2HH2, Monomer::AL_NH2,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CZ, Monomer::AL_INVALID}END_EXTREMES; // maybe Monomer::AL_NH2m Monomer::AL_NH1
END_RES;
BEGIN_RES(Monomer::ALA);
BEGIN_ATOMS{Monomer::AL_CB, Monomer::AL_1HB, Monomer::AL_2HB, Monomer::AL_3HB,Monomer::AL_INVALID} END_ATOMS;
BEGIN_BONDS{ Monomer::AL_CB, Monomer::AL_CA,
Monomer::AL_1HB, Monomer::AL_CB,
Monomer::AL_2HB, Monomer::AL_CB,
Monomer::AL_3HB, Monomer::AL_CB,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_CB, Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::ACE);
BEGIN_ATOMS{Monomer::AL_CH3, Monomer::AL_C, Monomer::AL_O, Monomer::AL_1HH3, Monomer::AL_2HH3, Monomer::AL_3HH3,Monomer::AL_INVALID}END_ATOMS;
BEGIN_BONDS{Monomer::AL_CH3, Monomer::AL_C,
Monomer::AL_O, Monomer::AL_C,
Monomer::AL_C, Monomer::AL_1HH3,
Monomer::AL_C, Monomer::AL_2HH3,
Monomer::AL_C, Monomer::AL_3HH3,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::ADE);
BEGIN_ATOMS{Monomer::AL_N9, Monomer::AL_C8, Monomer::AL_H8,
Monomer::AL_N7, Monomer::AL_C5, Monomer::AL_C4, Monomer::AL_N3,
Monomer::AL_C2, Monomer::AL_H2, Monomer::AL_N1, Monomer::AL_C6, Monomer::AL_N6,
Monomer::AL_H61, Monomer::AL_H62} END_ATOMS;
BEGIN_BONDS{Monomer::AL_N9, Monomer::AL_C1p,
Monomer::AL_N9, Monomer::AL_C8,
Monomer::AL_C8, Monomer::AL_H8,
Monomer::AL_C8, Monomer::AL_N7,
Monomer::AL_N7, Monomer::AL_C5,
Monomer::AL_C4, Monomer::AL_C5,
Monomer::AL_C4, Monomer::AL_N9,
Monomer::AL_C4, Monomer::AL_N3,
Monomer::AL_N3, Monomer::AL_C2,
Monomer::AL_H2, Monomer::AL_C2,
Monomer::AL_C2, Monomer::AL_N1,
Monomer::AL_N1, Monomer::AL_C6,
Monomer::AL_C6, Monomer::AL_N6,
Monomer::AL_N6, Monomer::AL_H61,
Monomer::AL_N6, Monomer::AL_H62,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::GUA);
BEGIN_ATOMS{Monomer::AL_N9, Monomer::AL_C8, Monomer::AL_H8,
Monomer::AL_N7, Monomer::AL_C5, Monomer::AL_C4, Monomer::AL_N3,
Monomer::AL_C2, Monomer::AL_H2, Monomer::AL_N1, Monomer::AL_C6,
Monomer::AL_O6, Monomer::AL_H1, Monomer::AL_N2,
Monomer::AL_H21, Monomer::AL_H22} END_ATOMS;
BEGIN_BONDS{Monomer::AL_N9, Monomer::AL_C1p,
Monomer::AL_N9, Monomer::AL_C8,
Monomer::AL_C8, Monomer::AL_H8,
Monomer::AL_C8, Monomer::AL_N7,
Monomer::AL_N7, Monomer::AL_C5,
Monomer::AL_C4, Monomer::AL_C5,
Monomer::AL_C4, Monomer::AL_N9,
Monomer::AL_C4, Monomer::AL_N3,
Monomer::AL_N3, Monomer::AL_C2,
Monomer::AL_C2, Monomer::AL_N1,
Monomer::AL_N1, Monomer::AL_C6,
Monomer::AL_C6, Monomer::AL_O6,
Monomer::AL_N1, Monomer::AL_H1,
Monomer::AL_N2, Monomer::AL_C2,
Monomer::AL_N2, Monomer::AL_H21,
Monomer::AL_N2, Monomer::AL_H22,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::CYT);
BEGIN_ATOMS{Monomer::AL_N1, Monomer::AL_C6, Monomer::AL_H6, Monomer::AL_C5, Monomer::AL_H5,
Monomer::AL_C4, Monomer::AL_N3, Monomer::AL_C2, Monomer::AL_O2,
Monomer::AL_N4, Monomer::AL_H41, Monomer::AL_H42} END_ATOMS;
BEGIN_BONDS{Monomer::AL_C1p, Monomer::AL_N1,
Monomer::AL_N1, Monomer::AL_C6,
Monomer::AL_C6, Monomer::AL_H6,
Monomer::AL_C6, Monomer::AL_C5,
Monomer::AL_C5, Monomer::AL_H5,
Monomer::AL_C5, Monomer::AL_C4,
Monomer::AL_C4, Monomer::AL_N3,
Monomer::AL_N3, Monomer::AL_C2,
Monomer::AL_C2, Monomer::AL_O2,
Monomer::AL_C2, Monomer::AL_N1,
Monomer::AL_C4, Monomer::AL_N4,
Monomer::AL_H41, Monomer::AL_N4,
Monomer::AL_N4, Monomer::AL_H42,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::URA);
BEGIN_ATOMS{Monomer::AL_N1, Monomer::AL_C6, Monomer::AL_H6, Monomer::AL_C5, Monomer::AL_H5,
Monomer::AL_C4, Monomer::AL_N3, Monomer::AL_C2, Monomer::AL_O2,
Monomer::AL_H3, Monomer::AL_O4} END_ATOMS;
BEGIN_BONDS{Monomer::AL_C1p, Monomer::AL_N1,
Monomer::AL_N1, Monomer::AL_C6,
Monomer::AL_C6, Monomer::AL_H6,
Monomer::AL_C6, Monomer::AL_C5,
Monomer::AL_C5, Monomer::AL_H5,
Monomer::AL_C5, Monomer::AL_C4,
Monomer::AL_C4, Monomer::AL_N3,
Monomer::AL_N3, Monomer::AL_C2,
Monomer::AL_C2, Monomer::AL_O2,
Monomer::AL_C2, Monomer::AL_N1,
Monomer::AL_C4, Monomer::AL_O4,
Monomer::AL_N3, Monomer::AL_H3,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_INVALID}END_EXTREMES;
END_RES;
BEGIN_RES(Monomer::THY);
BEGIN_ATOMS{Monomer::AL_N1, Monomer::AL_C6, Monomer::AL_H6, Monomer::AL_C5, Monomer::AL_C7,
Monomer::AL_H71, Monomer::AL_H72, Monomer::AL_H73,
Monomer::AL_C4, Monomer::AL_N3, Monomer::AL_C2, Monomer::AL_O2,
Monomer::AL_H3, Monomer::AL_O4} END_ATOMS;
BEGIN_BONDS{Monomer::AL_C1p, Monomer::AL_N1,
Monomer::AL_N1, Monomer::AL_C6,
Monomer::AL_C6, Monomer::AL_H6,
Monomer::AL_C6, Monomer::AL_C5,
Monomer::AL_C5, Monomer::AL_C7,
Monomer::AL_C7, Monomer::AL_H71,
Monomer::AL_C7, Monomer::AL_H72,
Monomer::AL_C7, Monomer::AL_H73,
Monomer::AL_C5, Monomer::AL_C4,
Monomer::AL_C4, Monomer::AL_N3,
Monomer::AL_N3, Monomer::AL_C2,
Monomer::AL_C2, Monomer::AL_O2,
Monomer::AL_C2, Monomer::AL_N1,
Monomer::AL_C4, Monomer::AL_O4,
Monomer::AL_N3, Monomer::AL_H3,
Monomer::AL_INVALID} END_BONDS;
BEGIN_EXTREMES{Monomer::AL_INVALID}END_EXTREMES;
END_RES;
default:
;
}
return dat;
//return std::pair<Monomer::Atom_key*, Monomer::Atom_key*>(als, bls);
}
void do_initialize() {
//if (amino_acid_initialized_) return;
assert(amino_acid_initialized_==false);
amino_acid_initialized_=true;
unsigned int i=0;
for (; atom_name_data_[i].l != Monomer::AL_INVALID; ++i){
clean_atom_name_data_[i].l= atom_name_data_[i].l;
clean_atom_name_data_[i].t= atom_name_data_[i].t;
sscanf(atom_name_data_[i].s, "%4s", clean_atom_name_data_[i].s);
}
clean_atom_name_data_[i].l= Monomer::AL_INVALID;
/*unsigned int max_atoms=0;
for (unsigned int i=0;atom_fallback_data_[i].l != Monomer::AL_INVALID; ++i){
max_atoms= (std::max)(max_atoms, static_cast<unsigned int>(atom_fallback_data_[i].l));
}*/
clean_atom_fallbacks_.resize(Monomer::AL_LAST_LABEL+1);
for (unsigned int i=0;atom_fallback_data_[i].l != Monomer::AL_INVALID; ++i){
clean_atom_fallbacks_[atom_fallback_data_[i].l].push_back(atom_fallback_data_[i].lr);
}
const unsigned int num_res= static_cast<int>(Monomer::INV)+1;
//Monomer::Type all_res[num_res];
/*for(unsigned int i=0; i< num_res; ++i) {
all_res[i]=Monomer::Type(i);
}*/
//sizeof(all_res)/sizeof(Monomer::Type);
amino_acid_data_.resize(num_res);
//http://www.bmrb.wisc.edu/referenc/nomenclature/
for (unsigned int i=0; i< num_res; ++i){
Monomer::Type cur_res=Monomer::Type(i);
amino_acid_data_[cur_res]= Amino_acid_data();
if (cur_res == Monomer::ADE || cur_res == Monomer::CYT
|| cur_res == Monomer::GUA || cur_res == Monomer::URA || cur_res == Monomer::THY){
Monomer::Atom_key bl[]={Monomer::AL_P, Monomer::AL_OP1, Monomer::AL_OP2,
Monomer::AL_O5p, Monomer::AL_C5p, Monomer::AL_H5p,
Monomer::AL_H5pp,
Monomer::AL_C4p, Monomer::AL_H4p, Monomer::AL_O4p,
Monomer::AL_C1p, Monomer::AL_H1p,
Monomer::AL_C3p, Monomer::AL_H3p, Monomer::AL_O3p,
Monomer::AL_C2p, Monomer::AL_H2p,
Monomer::AL_H2pp, Monomer::AL_O2p, Monomer::AL_HO2p};
for (unsigned int j=0; j< sizeof(bl)/sizeof(Monomer::Atom_key); ++j){
amino_acid_data_[cur_res].atoms.push_back(bl[j]);
}
Monomer::Atom_key bd[][2]={ {Monomer::AL_P, Monomer::AL_OP2}, {Monomer::AL_P, Monomer::AL_OP1},
{Monomer::AL_P, Monomer::AL_O5p}, {Monomer::AL_O5p, Monomer::AL_C5p},
{Monomer::AL_C5p, Monomer::AL_H5p}, {Monomer::AL_C5p, Monomer::AL_H5pp},
{Monomer::AL_C5p, Monomer::AL_C4p}, {Monomer::AL_C4p, Monomer::AL_H4p},
{Monomer::AL_C4p, Monomer::AL_C3p}, {Monomer::AL_C3p, Monomer::AL_H3p},
{Monomer::AL_C3p, Monomer::AL_O3p}, {Monomer::AL_C3p, Monomer::AL_C2p},
{Monomer::AL_C2p, Monomer::AL_H2pp}, {Monomer::AL_C2p, Monomer::AL_HO2p},
{Monomer::AL_C2p, Monomer::AL_C1p}, {Monomer::AL_C1p, Monomer::AL_H1p},
{Monomer::AL_C1p, Monomer::AL_O4p}, {Monomer::AL_O4p, Monomer::AL_C4p}};
for (unsigned int j=0; j< sizeof(bd)/sizeof(Possible_bond); ++j){
amino_acid_data_[cur_res].bonds.push_back(Possible_bond(bd[j][0], bd[j][1]));
}
} else if (cur_res != Monomer::ACE && cur_res != Monomer::NH2) {
// set up shared atoms
Monomer::Atom_key bl[]={ Monomer::AL_N, Monomer::AL_H,
Monomer::AL_1H, Monomer::AL_2H,
Monomer::AL_3H, Monomer::AL_CA,
Monomer::AL_HA, Monomer::AL_1HA,
Monomer::AL_C, Monomer::AL_O,
Monomer::AL_OXT};
for (unsigned int j=0; j< sizeof(bl)/sizeof(Monomer::Atom_key); ++j){
amino_acid_data_[cur_res].atoms.push_back(bl[j]);
}
// set up basic bonds
Monomer::Atom_key bd[][2]={ {Monomer::AL_N, Monomer::AL_H}, {Monomer::AL_N, Monomer::AL_1H},
{Monomer::AL_N, Monomer::AL_2H}, {Monomer::AL_N, Monomer::AL_3H},
{Monomer::AL_N, Monomer::AL_CA}, {Monomer::AL_CA, Monomer::AL_HA},
{Monomer::AL_CA, Monomer::AL_1HA}, {Monomer::AL_CA, Monomer::AL_C},
{Monomer::AL_C, Monomer::AL_O}, {Monomer::AL_O, Monomer::AL_OXT} };
for (unsigned int j=0; j< sizeof(bd)/sizeof(Possible_bond); ++j){
amino_acid_data_[cur_res].bonds.push_back(Possible_bond(bd[j][0], bd[j][1]));
}
}
/*
(Monomer::Monomer::AL_CB, Monomer::Monomer::AL_HB, Monomer::Monomer::AL_CG1, Monomer::Monomer::AL_CG2,
Monomer::Monomer::AL_1HG1, Monomer::Monomer::AL_2HG1, Monomer::Monomer::AL_3HG1, Monomer::Monomer::AL_1HG2,
Monomer::Monomer::AL_2HG2, Monomer::Monomer::AL_3HG2, Monomer::Monomer::AL_INVALID) ,
()
*/
Monomer_init_data data= get_residue_initialization_data(cur_res);
for (unsigned int j=0; data.atms_[j] != Monomer::AL_INVALID; ++j){
amino_acid_data_[cur_res].atoms.push_back(data.atms_[j]);
}
for (unsigned int j=0; data.bnds_[j] != Monomer::AL_INVALID; j+=2){
amino_acid_data_[cur_res].bonds.push_back(Possible_bond(data.bnds_[j], data.bnds_[j+1]));
}
for (unsigned int j=0; data.extr_[j] != Monomer::AL_INVALID; ++j){
amino_acid_data_[cur_res].extremes.push_back(data.extr_[j]);
}
if (false){
std::cout << "For residue " << Monomer::type_string(cur_res)
<< " there are " << amino_acid_data_[cur_res].atoms.size() << " atoms, "
<< amino_acid_data_[cur_res].bonds.size() << " bonds, and "
<< amino_acid_data_[cur_res].extremes.size() << " extremes." << std::endl;
assert(amino_acid_data_[cur_res].extremes.size() < 4);
}
}
}
Monomer::Atom_key fix_atom_label(Monomer::Type label, Monomer::Atom_key al) {
for (unsigned int i=0; i< amino_acid_data_[label].atoms.size(); ++i){
if (Monomer_data::amino_acid_data_[label].atoms[i] == al) return al;
}
//HERE
/*if (clean_atom_fallbacks_.find(al) == clean_atom_fallbacks_.end()){
dsrpdb_internal::error_logger.new_warning((std::string("No atom named ")+atom_key_string(al)
+" in residue "+ type_string(label_)).c_str());
return AL_INVALID;
}*/
for (unsigned int j=0; j< clean_atom_fallbacks_[al].size(); ++j){
for (unsigned int i=0; i< amino_acid_data_[label].atoms.size(); ++i){
if (amino_acid_data_[label].atoms[i] == clean_atom_fallbacks_[al][j])
return clean_atom_fallbacks_[al][j];
}
}
return Monomer::AL_INVALID;
}
}
CGAL_PDB_END_NAMESPACE