From 05b93e859483b8aea0d2589ae9517d448ca2fe47 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 09:52:56 -0400 Subject: [PATCH 001/368] Recognize Y 4,6 linkage --- src/Exec_PrepareForLeap.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 038264c3c4..316a080214 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -56,6 +56,7 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag case 'Y': if (linkstr == "C1") linkcode = "0"; else if (linkstr == "C1O4") linkcode = "4"; + else if (linkstr == "C1O4O6") linkcode = "U"; break; default: mprintf("Warning: Unrecognized glycam residue char: %c\n", glycamChar); @@ -80,7 +81,7 @@ const mprintf("Warning: Could not identify sugar from residue name '%s'\n", *res.Name()); return 1; } - mprintf("\tSugar %s glycam name: %c\n", *res.Name(), resChar); + mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); // Try to identify the form /* The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the * opposite side of the OH on the anomeric carbon (C1 in Glycam), while @@ -185,7 +186,10 @@ const mprintf("\n"); std::string linkcode = LinkageCode(resChar, linkages); mprintf("\t Linkage code: %s\n", linkcode.c_str()); - if (linkcode.empty()) return 1; + if (linkcode.empty()) { + mprinterr("Error: Unrecognized sugar linkage.\n"); + return 1; + } // Remove bonds to non-sugar for (BondArray::const_iterator bnd = bondsToRemove.begin(); bnd != bondsToRemove.end(); ++bnd) From 6490c6d48a759510c2d3ff87373dda74b1f92d5b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 10:55:26 -0400 Subject: [PATCH 002/368] Add some sugar res names --- src/Exec_PrepareForLeap.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 316a080214..ceea2dc461 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -77,6 +77,10 @@ const char resChar = ' '; if (res.Name() == "NAG") { resChar = 'Y'; + } else if (res.Name() == "BMA" || res.Name() == "MAN") { + resChar = 'M'; + } else if (res.Name() == "FUC") { + resChar = 'F'; } else { mprintf("Warning: Could not identify sugar from residue name '%s'\n", *res.Name()); return 1; @@ -113,7 +117,7 @@ const C5idx = at; else if ( (*topIn)[at].Name() == "C1" ) { C1idx = at; - // Check substituent of C1 + // Check substituent of C1 (non ring atom, non hydrogen) for (Atom::bond_iterator bat = (*topIn)[at].bondbegin(); bat != (*topIn)[at].bondend(); ++bat) { From ec71d95fbb50eb84e669a9098bf92ccd08e39b56 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 11:45:27 -0400 Subject: [PATCH 003/368] First crack at determining D vs L --- src/Exec_PrepareForLeap.cpp | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ceea2dc461..2fce49254e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -7,6 +7,7 @@ #include "CpptrajFile.h" #include #include +#include // tolower // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const @@ -96,6 +97,10 @@ const int C5idx = -1; int C1idx = -1; int Cxidx = -1; // Non-H1, O5, C2 substituent of C1 + // Additional atoms for determining D vs L + int O5idx = -1; + int C4idx = -1; + int H5idx = -1; // Use a set to store linkages so they are in alphabetical order for easier identification std::set linkages; // Bonds to non sugars to be removed since these will confuse tleap @@ -115,6 +120,12 @@ const C6idx = at; else if ( (*topIn)[at].Name() == "C5" ) C5idx = at; + else if ( (*topIn)[at].Name() == "O5" ) + O5idx = at; + else if ( (*topIn)[at].Name() == "C4" ) + C4idx = at; + else if ( (*topIn)[at].Name() == "H5" ) + H5idx = at; else if ( (*topIn)[at].Name() == "C1" ) { C1idx = at; // Check substituent of C1 (non ring atom, non hydrogen) @@ -167,14 +178,18 @@ const } } // END loop over bonded atoms } // END loop over residue atoms - mprintf("\t C5= %i C6= %i C1= %i Cx= %i\n", C6idx, C5idx, C1idx, Cxidx); + mprintf("\t C5= %i C6= %i C1= %i Cx= %i O5= %i C4= %i H5= %i\n", C6idx, C5idx, C1idx, Cxidx, O5idx, C4idx, H5idx); if (C6idx == -1) { mprintf("Warning: C6 index not found.\n"); return 1; } if (C5idx == -1) { mprintf("Warning: C5 index not found.\n"); return 1; } if (C1idx == -1) { mprintf("Warning: C1 index not found.\n"); return 1; } if (Cxidx == -1) { mprintf("Warning: Cx index not found.\n"); return 1; } + if (O5idx == -1) { mprintf("Warning: O5 index not found.\n"); return 1; } + if (C4idx == -1) { mprintf("Warning: C4 index not found.\n"); return 1; } + if (H5idx == -1) { mprintf("Warning: H5 index not found.\n"); return 1; } + // Determine alpha/beta double torsion = Torsion( frameIn.XYZ(C6idx), frameIn.XYZ(C5idx), frameIn.XYZ(C1idx), frameIn.XYZ(Cxidx) ); - mprintf("\t Torsion= %f deg\n", torsion * Constants::RADDEG); + mprintf("\t alpha/beta Torsion= %f deg\n", torsion * Constants::RADDEG); if (torsion < Constants::PI && torsion > -Constants::PI) { mprintf("\t Beta form\n"); formStr = "B"; @@ -182,6 +197,21 @@ const mprintf("\t Alpha form\n"); formStr = "A"; } + // Determine D/L + // DEBUG + frameIn.printAtomCoord(O5idx); + frameIn.printAtomCoord(C4idx); + frameIn.printAtomCoord(C6idx); + frameIn.printAtomCoord(H5idx); + torsion = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C4idx), + frameIn.XYZ(C6idx), frameIn.XYZ(H5idx) ); + mprintf("\t D/L Torsion= %f deg\n", torsion * Constants::RADDEG); + if (torsion > 0) { + mprintf("\t D form\n"); + } else { + mprintf("\t L form\n"); + resChar = tolower( resChar ); + } // Determine linkage mprintf("\t Link atoms:"); for (std::set::const_iterator it = linkages.begin(); From ffbfbe69c24ce69464d72d243455ea4b0f76cfd2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 12:54:41 -0400 Subject: [PATCH 004/368] Add LeastSquaresPlaneVector class --- src/LeastSquaresPlaneVector.cpp | 122 ++++++++++++++++++++++++++++++++ src/LeastSquaresPlaneVector.h | 21 ++++++ 2 files changed, 143 insertions(+) create mode 100644 src/LeastSquaresPlaneVector.cpp create mode 100644 src/LeastSquaresPlaneVector.h diff --git a/src/LeastSquaresPlaneVector.cpp b/src/LeastSquaresPlaneVector.cpp new file mode 100644 index 0000000000..97571b6fca --- /dev/null +++ b/src/LeastSquaresPlaneVector.cpp @@ -0,0 +1,122 @@ +#include "LeastSquaresPlaneVector.h" +#include "Frame.h" +#include "AtomMask.h" +#include "Constants.h" +#include +#include //sort + +/** CONSTRUCTOR */ +LeastSquaresPlaneVector::LeastSquaresPlaneVector() +{} + +/** Reserve space for selected number of atoms. */ +void LeastSquaresPlaneVector::ReserveForNumAtoms(unsigned int nselected) { + vcorr_.reserve( nselected ); +} + +/** Solves a cubic equation: ax^3 + bx^2 + cx + d = 0 using "Cardan's formula" + * (see: Bronstein, S.131f) + */ +double LeastSquaresPlaneVector::solve_cubic_eq(double a, double b, double c, double d) { + const double one3 = 1.0 / 3.0; + const double one27 = 1.0 / 27.0; + double droot = 0; + + double r, s, t; + double p, q, rho, phi; + double D, u, v; + std::vector dtmp(3); + + /* Coeff. for normal form x^3 + rx^2 + sx + t = 0 */ + r = b / a; + s = c / a; + t = d / a; + + /* Coeff. for red. eq. y^3 + py + q = 0 with y = x + r/3 bzw. (x = y - r/3) */ + p = s - r * r * one3; + q = 2.0 * r * r * r * one27 - r * s * one3 + t; + + /* Dummy variables */ + rho = sqrt(-p * p * p * one27); + phi = acos(-q / (2.0 * rho)); + + /* Discriminante(?) */ + D = pow((p * one3),3) + q * q * 0.25; + + if(D > 0){ /* x real -> one real solution */ + u = pow(-q * 0.5 + sqrt(D), one3); + v = -p / u * one3; + droot = (u + v) - r * one3; + } else { // D <= 0 + /* three real solutions (d < 0) | one real solution + one real double solution or + one real triple solution (d = 0) */ + dtmp[0] = 2.0 * pow(rho, one3) * cos(phi * one3) - r * one3; + dtmp[1] = 2.0 * pow(rho, one3) * cos((phi + Constants::TWOPI ) * one3) - r * one3; + dtmp[2] = 2.0 * pow(rho, one3) * cos((phi + Constants::FOURPI) * one3) - r * one3; + + sort(dtmp.begin(), dtmp.end()); + + //qsort((void *) dtmp, (size_t) 3, sizeof(double), cmpdouble); + droot = dtmp[0]; + } + return droot; +} + +/** Calcs (least-squares best) plane through a series of points + * relative to their center of geom. (the latter has to be done outside this routine), + * returns (normalized) coeff. for plane eq. ax + by + cz = 0 + * following: Crystal Structure Analysis for Chem. and Biol., + * Glusker, Lewis, Rossi, S. 460ff + */ +Vec3 LeastSquaresPlaneVector::leastSquaresPlane(int n, const double* vcorr) { + double Xout, Yout, Zout; + if (n == 9) { // Special case, only 3 coords + double x1 = vcorr[3] - vcorr[0]; + double y1 = vcorr[4] - vcorr[1]; + double z1 = vcorr[5] - vcorr[2]; + double x2 = vcorr[6] - vcorr[3]; + double y2 = vcorr[7] - vcorr[4]; + double z2 = vcorr[8] - vcorr[5]; + + Xout = y1 * z2 - z1 * y2; + Yout = z1 * x2 - x1 * z2; + Zout = x1 * y2 - y1 * x2; + } else { // General case + // Calc Var. + double dSumXX = 0.0; + double dSumYY = 0.0; + double dSumZZ = 0.0; + double dSumXY = 0.0; + double dSumXZ = 0.0; + double dSumYZ = 0.0; + + for (int i = 0; i < n; i+=3) { + dSumXX += vcorr[i ] * vcorr[i ]; + dSumYY += vcorr[i+1] * vcorr[i+1]; + dSumZZ += vcorr[i+2] * vcorr[i+2]; + + dSumXY += vcorr[i ] * vcorr[i+1]; + dSumXZ += vcorr[i ] * vcorr[i+2]; + dSumYZ += vcorr[i+1] * vcorr[i+2]; + } + + // Calc coeff. for -l^3 + o * l^2 + p * l + q = 0 + double o = dSumXX + dSumYY + dSumZZ; + double p = pow(dSumXY,2) + pow(dSumXZ,2) + pow(dSumYZ,2) - + (dSumXX * dSumYY + dSumXX * dSumZZ + dSumYY * dSumZZ); + double q = dSumXX * dSumYY * dSumZZ + 2.0 * dSumXY * dSumXZ * dSumYZ - + (dSumXX * dSumYZ * dSumYZ + dSumYY * dSumXZ * dSumXZ + dSumZZ * dSumXY * dSumXY); + + // Solve cubic eq. + double root = solve_cubic_eq(-1.0, o, p, q); + + // Calc determinents + Xout = (dSumYY - root) * dSumXZ - dSumXY * dSumYZ; + Yout = (dSumXX - root) * dSumYZ - dSumXY * dSumXZ; + Zout = dSumXY * dSumXY - (dSumYY - root) * (dSumXX - root); + } + // Normalize + double dnorm = 1.0 / sqrt((Xout * Xout) + (Yout * Yout) + (Zout * Zout)); + return Vec3(Xout * dnorm, Yout * dnorm, Zout * dnorm); +} + diff --git a/src/LeastSquaresPlaneVector.h b/src/LeastSquaresPlaneVector.h new file mode 100644 index 0000000000..4591074936 --- /dev/null +++ b/src/LeastSquaresPlaneVector.h @@ -0,0 +1,21 @@ +#ifndef INC_LEASTSQUARESPLANEVECTOR_H +#define INC_LEASTSQUARESPLANEVECTOR_H +#include +#include "Vec3.h" +class Frame; +class AtomMask; +/// Calculate vector perpendicular to the plane passing through selected atoms. +class LeastSquaresPlaneVector { + public: + LeastSquaresPlaneVector(); + /// Reserve space for specified number of selected atoms. + void ReserveForNumAtoms(unsigned int); + /// \return vector perpendicular to the plane passing through selected atoms. + Vec3 CalcLSPvec(Frame const&, AtomMask const&); + private: + static inline double solve_cubic_eq(double, double, double, double); + static inline Vec3 leastSquaresPlane(int, const double*); + + std::vector vcorr_; +}; +#endif From e010b873c6793ebeb86e731ea48bd9e2f49aabd2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 13:01:21 -0400 Subject: [PATCH 005/368] Finish LeastSquaresPlaneVector --- src/LeastSquaresPlaneVector.cpp | 17 +++++++++++++++++ src/LeastSquaresPlaneVector.h | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/LeastSquaresPlaneVector.cpp b/src/LeastSquaresPlaneVector.cpp index 97571b6fca..41ed6a029e 100644 --- a/src/LeastSquaresPlaneVector.cpp +++ b/src/LeastSquaresPlaneVector.cpp @@ -120,3 +120,20 @@ Vec3 LeastSquaresPlaneVector::leastSquaresPlane(int n, const double* vcorr) { return Vec3(Xout * dnorm, Yout * dnorm, Zout * dnorm); } +/** \return vector perpendicular to the plane passing through selected atoms. */ +Vec3 LeastSquaresPlaneVector::CalcLSPvec(Frame const& currentFrame, AtomMask const& maskIn) +{ + CXYZ_ = currentFrame.VCenterOfMass(maskIn); + vcorr_.clear(); + for (AtomMask::const_iterator atom = maskIn.begin(); + atom != maskIn.end(); ++atom) + { + Vec3 XYZ = currentFrame.XYZ( *atom ); + XYZ -= CXYZ_; + vcorr_.push_back(XYZ[0]); + vcorr_.push_back(XYZ[1]); + vcorr_.push_back(XYZ[2]); + } + Vec3 VXYZ = leastSquaresPlane(vcorr_.size(), &vcorr_[0]); + return VXYZ; +} diff --git a/src/LeastSquaresPlaneVector.h b/src/LeastSquaresPlaneVector.h index 4591074936..64f980c939 100644 --- a/src/LeastSquaresPlaneVector.h +++ b/src/LeastSquaresPlaneVector.h @@ -12,10 +12,13 @@ class LeastSquaresPlaneVector { void ReserveForNumAtoms(unsigned int); /// \return vector perpendicular to the plane passing through selected atoms. Vec3 CalcLSPvec(Frame const&, AtomMask const&); + /// \return Coordinates of the center of atoms selected in last call of CalcLSPvec + Vec3 Center() const { return CXYZ_; } private: static inline double solve_cubic_eq(double, double, double, double); static inline Vec3 leastSquaresPlane(int, const double*); - std::vector vcorr_; + std::vector vcorr_; ///< Will hold XYZ coordinates of selected atoms. + Vec3 CXYZ_; ///< Will hold the coordinates of the center of selected atoms. }; #endif From df925f609b74027601455d167b78a48d425c7aff Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 13:02:06 -0400 Subject: [PATCH 006/368] Add to cpptrajfiles --- src/cpptrajdepend | 1 + src/cpptrajfiles | 1 + 2 files changed, 2 insertions(+) diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 1f49f9e3bc..5dd88f5c4a 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -325,6 +325,7 @@ Image_List_Pair.o : Image_List_Pair.cpp Atom.h AtomMask.h AtomType.h Box.h Const Image_List_Unit.o : Image_List_Unit.cpp Atom.h AtomMask.h AtomType.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h Image_List.h Image_List_Unit.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TypeNameHolder.h Unit.h Vec3.h InputTrajCommon.o : InputTrajCommon.cpp CpptrajStdio.h FileName.h InputTrajCommon.h TrajFrameCounter.h KDE.o : KDE.cpp AssociatedData.h Constants.h CpptrajFile.h CpptrajStdio.h DataSet.h DataSet_1D.h DataSet_double.h Dimension.h FileIO.h FileName.h HistBin.h KDE.h MetaData.h Parallel.h Range.h TextFormat.h +LeastSquaresPlaneVector.o : LeastSquaresPlaneVector.cpp Atom.h AtomMask.h Box.h Constants.h CoordinateInfo.h Frame.h LeastSquaresPlaneVector.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Unit.h Vec3.h MapAtom.o : MapAtom.cpp Atom.h MapAtom.h NameType.h SymbolExporting.h MaskArray.o : MaskArray.cpp Atom.h AtomMask.h AtomType.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h MaskArray.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TypeNameHolder.h Unit.h Vec3.h MaskToken.o : MaskToken.cpp ArgList.h Atom.h CpptrajStdio.h DistRoutines.h ImageOption.h MaskToken.h Molecule.h NameType.h Residue.h Segment.h StringRoutines.h SymbolExporting.h Unit.h diff --git a/src/cpptrajfiles b/src/cpptrajfiles index d2c4f63969..d77aeef048 100644 --- a/src/cpptrajfiles +++ b/src/cpptrajfiles @@ -324,6 +324,7 @@ COMMON_SOURCES= \ Image_List_Unit.cpp \ InputTrajCommon.cpp \ KDE.cpp \ + LeastSquaresPlaneVector.cpp \ MapAtom.cpp \ MaskArray.cpp \ MaskToken.cpp \ From 6d875f598da215ad7978f0ba28c3a2716d5d95c7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 13:54:20 -0400 Subject: [PATCH 007/368] Tighten up the alpha/beta determination. Determine the vector going through plane of the sugar, then compare the C5C6 and C1Cx vectors to that to see if they are pointing in the same direction or not. --- src/Exec_PrepareForLeap.cpp | 75 ++++++++++++++++++++++++++----------- src/cpptrajdepend | 2 +- 2 files changed, 54 insertions(+), 23 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2fce49254e..4cbdcbe4de 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -8,6 +8,7 @@ #include #include #include // tolower +#include "LeastSquaresPlaneVector.h" // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const @@ -53,15 +54,19 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag for (std::set::const_iterator it = linkages.begin(); it != linkages.end(); ++it) linkstr.append( it->Truncated() ); mprintf("\t linkstr= '%s'\n", linkstr.c_str()); - switch (glycamChar) { - case 'Y': +// switch (glycamChar) { +// case 'Y': if (linkstr == "C1") linkcode = "0"; else if (linkstr == "C1O4") linkcode = "4"; else if (linkstr == "C1O4O6") linkcode = "U"; - break; - default: - mprintf("Warning: Unrecognized glycam residue char: %c\n", glycamChar); - } + else if (linkstr == "C1O3O6") linkcode = "V"; +// break; +// case 'M': +// if (linkstr == "C1O3O6") linkcode = "V"; +// break; +// default: +// mprintf("Warning: Unrecognized glycam residue char: %c\n", glycamChar); +// } if (linkcode.empty()) mprintf("Warning: Could not determine link code.\n"); return linkcode; @@ -106,6 +111,7 @@ const // Bonds to non sugars to be removed since these will confuse tleap BondArray bondsToRemove; // Loop over sugar atoms + AtomMask sugarCycle; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { // Rename some common atoms TODO need to check glycam residue char? @@ -118,16 +124,23 @@ const // Identify atoms for torsion if ( (*topIn)[at].Name() == "C6" ) C6idx = at; - else if ( (*topIn)[at].Name() == "C5" ) + else if ( (*topIn)[at].Name() == "C5" ) { C5idx = at; - else if ( (*topIn)[at].Name() == "O5" ) + sugarCycle.AddAtom( at ); + } else if ( (*topIn)[at].Name() == "O5" ) { O5idx = at; - else if ( (*topIn)[at].Name() == "C4" ) + sugarCycle.AddAtom( at ); + } else if ( (*topIn)[at].Name() == "C4" ) { C4idx = at; - else if ( (*topIn)[at].Name() == "H5" ) + sugarCycle.AddAtom( at ); + } else if ( (*topIn)[at].Name() == "H5" ) H5idx = at; + else if ( (*topIn)[at].Name() == "C2" || + (*topIn)[at].Name() == "C3") + sugarCycle.AddAtom( at ); else if ( (*topIn)[at].Name() == "C1" ) { C1idx = at; + sugarCycle.AddAtom( at ); // Check substituent of C1 (non ring atom, non hydrogen) for (Atom::bond_iterator bat = (*topIn)[at].bondbegin(); bat != (*topIn)[at].bondend(); ++bat) @@ -178,7 +191,9 @@ const } } // END loop over bonded atoms } // END loop over residue atoms - mprintf("\t C5= %i C6= %i C1= %i Cx= %i O5= %i C4= %i H5= %i\n", C6idx, C5idx, C1idx, Cxidx, O5idx, C4idx, H5idx); + mprintf("\t C6= %i C5= %i C1= %i Cx= %i O5= %i C4= %i H5= %i\n", + C6idx+1, C5idx+1, C1idx+1, Cxidx+1, O5idx+1, C4idx+1, H5idx+1); + sugarCycle.PrintMaskAtoms("\t Sugar cycle:"); if (C6idx == -1) { mprintf("Warning: C6 index not found.\n"); return 1; } if (C5idx == -1) { mprintf("Warning: C5 index not found.\n"); return 1; } if (C1idx == -1) { mprintf("Warning: C1 index not found.\n"); return 1; } @@ -187,10 +202,22 @@ const if (C4idx == -1) { mprintf("Warning: C4 index not found.\n"); return 1; } if (H5idx == -1) { mprintf("Warning: H5 index not found.\n"); return 1; } // Determine alpha/beta - double torsion = Torsion( frameIn.XYZ(C6idx), frameIn.XYZ(C5idx), - frameIn.XYZ(C1idx), frameIn.XYZ(Cxidx) ); - mprintf("\t alpha/beta Torsion= %f deg\n", torsion * Constants::RADDEG); - if (torsion < Constants::PI && torsion > -Constants::PI) { + LeastSquaresPlaneVector LSPV; + LSPV.ReserveForNumAtoms( sugarCycle.Nselected() ); + Vec3 sugarVec = LSPV.CalcLSPvec(frameIn, sugarCycle); + Vec3 VC5C6 = Vec3(frameIn.XYZ(C6idx)) - Vec3(frameIn.XYZ(C5idx)); + VC5C6.Normalize(); + Vec3 VC1Cx = Vec3(frameIn.XYZ(Cxidx)) - Vec3(frameIn.XYZ(C1idx)); + VC1Cx.Normalize(); + sugarVec.Print("sugarVec"); + VC5C6.Print("C5C6"); + VC1Cx.Print("C1Cx"); + double theta1 = sugarVec.Angle( VC5C6 ); + double theta2 = sugarVec.Angle( VC1Cx ); + mprintf("\t Angle between C5C6 and sugar= %f between C1Cx and sugar= %f\n", theta1*Constants::RADDEG, theta2*Constants::RADDEG); + bool C5C6_oppDir_sugarVec = (theta1 > Constants::PIOVER2); + bool C1Cx_oppDir_sugarVec = (theta2 > Constants::PIOVER2); + if (C5C6_oppDir_sugarVec == C1Cx_oppDir_sugarVec) { mprintf("\t Beta form\n"); formStr = "B"; } else { @@ -198,19 +225,20 @@ const formStr = "A"; } // Determine D/L + bool isDform = true; // DEBUG - frameIn.printAtomCoord(O5idx); - frameIn.printAtomCoord(C4idx); - frameIn.printAtomCoord(C6idx); - frameIn.printAtomCoord(H5idx); - torsion = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C4idx), - frameIn.XYZ(C6idx), frameIn.XYZ(H5idx) ); + //frameIn.printAtomCoord(O5idx); + //frameIn.printAtomCoord(C4idx); + //frameIn.printAtomCoord(C6idx); + //frameIn.printAtomCoord(H5idx); + double torsion = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C4idx), + frameIn.XYZ(C6idx), frameIn.XYZ(H5idx) ); mprintf("\t D/L Torsion= %f deg\n", torsion * Constants::RADDEG); if (torsion > 0) { mprintf("\t D form\n"); } else { mprintf("\t L form\n"); - resChar = tolower( resChar ); + isDform = false; } // Determine linkage mprintf("\t Link atoms:"); @@ -224,6 +252,9 @@ const mprinterr("Error: Unrecognized sugar linkage.\n"); return 1; } + // Modify residue char to indicate D form if necessary + if (!isDform) + resChar = tolower( resChar ); // Remove bonds to non-sugar for (BondArray::const_iterator bnd = bondsToRemove.begin(); bnd != bondsToRemove.end(); ++bnd) diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 5dd88f5c4a..6eb5b6b189 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -279,7 +279,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h LeastSquaresPlaneVector.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From 23492638ac6681c9598c0a6f779a07e9b3fd1490 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 13:58:52 -0400 Subject: [PATCH 008/368] Recognize more residues and 2 linkage --- src/Exec_PrepareForLeap.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4cbdcbe4de..fae296b7dc 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -57,6 +57,7 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag // switch (glycamChar) { // case 'Y': if (linkstr == "C1") linkcode = "0"; + else if (linkstr == "C1O2") linkcode = "2"; else if (linkstr == "C1O4") linkcode = "4"; else if (linkstr == "C1O4O6") linkcode = "U"; else if (linkstr == "C1O3O6") linkcode = "V"; @@ -83,12 +84,14 @@ const char resChar = ' '; if (res.Name() == "NAG") { resChar = 'Y'; - } else if (res.Name() == "BMA" || res.Name() == "MAN") { - resChar = 'M'; } else if (res.Name() == "FUC") { resChar = 'F'; + } else if (res.Name() == "GAL") { + resChar = 'L'; + } else if (res.Name() == "BMA" || res.Name() == "MAN") { + resChar = 'M'; } else { - mprintf("Warning: Could not identify sugar from residue name '%s'\n", *res.Name()); + mprinterr("Error: Could not identify sugar from residue name '%s'\n", *res.Name()); return 1; } mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); From 24af28d6eaf1c1e621796142223569c33a69d1af Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 14:53:40 -0400 Subject: [PATCH 009/368] Also remove bonds between sugars since leap cannot handle branching --- src/Exec_PrepareForLeap.cpp | 17 +++++++++++++++-- src/Exec_PrepareForLeap.h | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index fae296b7dc..5e15a8f2f8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -76,7 +76,7 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology* topIn, Frame const& frameIn, CharMask const& cmask, - CpptrajFile* outfile) + CpptrajFile* outfile, std::set& sugarBondsToRemove) const { Residue& res = topIn->SetRes(rnum); @@ -190,6 +190,11 @@ const topIn->ResNameNumAtomNameNum(at).c_str(), topIn->ResNameNumAtomNameNum(*bat).c_str()); linkages.insert( (*topIn)[at].Name() ); + // Also remove inter-sugar bonds since leap cant handle branching + if (at < *bat) + sugarBondsToRemove.insert( BondType(at, *bat, -1) ); + else + sugarBondsToRemove.insert( BondType(*bat, at, -1) ); } } } // END loop over bonded atoms @@ -469,6 +474,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (sugarMask.MaskStringSet()) { + std::set sugarBondsToRemove; mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); if (coords.Top().SetupIntegerMask( sugarMask )) return CpptrajState::ERR; sugarMask.MaskInfo(); @@ -485,9 +491,16 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { //Residue const& Res = coords.Top().Res(*rnum); // See if we recognize this sugar. - if (IdentifySugar(*rnum, coords.TopPtr(), frameIn, cmask, outfile)) + if (IdentifySugar(*rnum, coords.TopPtr(), frameIn, cmask, outfile, sugarBondsToRemove)) return CpptrajState::ERR; } // END loop over sugar residues + // Remove bonds between sugars + for (std::set::const_iterator bnd = sugarBondsToRemove.begin(); + bnd != sugarBondsToRemove.end(); ++bnd) + { + LeapBond(bnd->A1(), bnd->A2(), *(coords.TopPtr()), outfile); + coords.TopPtr()->RemoveBond(bnd->A1(), bnd->A2()); + } } // Bonds to sugars have been removed, so regenerate molecule info coords.TopPtr()->DetermineMolecules(); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index a42a15290b..fcedb85dd3 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -1,6 +1,7 @@ #ifndef INC_EXEC_PREPAREFORLEAP_H #define INC_EXEC_PREPAREFORLEAP_H #include "Exec.h" +#include class CharMask; class CpptrajFile; /// Do common tasks to prepare a structure to be loaded into tleap @@ -12,7 +13,7 @@ class Exec_PrepareForLeap : public Exec { RetType Execute(CpptrajState&, ArgList&); private: void LeapBond(int,int,Topology const&, CpptrajFile*) const; - int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*) const; + int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; int FindTerByBonds(Topology*, CharMask const&) const; std::string leapunitname_; From 7646e467aebffe995f59e80904c82d35b2514268 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 15:01:46 -0400 Subject: [PATCH 010/368] Add other linkages --- src/Exec_PrepareForLeap.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 5e15a8f2f8..f562ceb234 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -58,9 +58,20 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag // case 'Y': if (linkstr == "C1") linkcode = "0"; else if (linkstr == "C1O2") linkcode = "2"; + else if (linkstr == "C1O3") linkcode = "3"; else if (linkstr == "C1O4") linkcode = "4"; - else if (linkstr == "C1O4O6") linkcode = "U"; + else if (linkstr == "C1O6") linkcode = "6"; + else if (linkstr == "C1O2O3") linkcode = "Z"; + else if (linkstr == "C1O2O4") linkcode = "Y"; + else if (linkstr == "C1O2O6") linkcode = "X"; + else if (linkstr == "C1O3O4") linkcode = "W"; else if (linkstr == "C1O3O6") linkcode = "V"; + else if (linkstr == "C1O4O6") linkcode = "U"; + else if (linkstr == "C1O2O3O4") linkcode = "T"; + else if (linkstr == "C1O2O3O6") linkcode = "S"; + else if (linkstr == "C1O2O4O6") linkcode = "R"; + else if (linkstr == "C1O3O4O6") linkcode = "Q"; + else if (linkstr == "C1O2O3O4O6") linkcode = "P"; // break; // case 'M': // if (linkstr == "C1O3O6") linkcode = "V"; From e68325bf60f6b662bdd884f494b156d4b8ea16dd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 15:42:50 -0400 Subject: [PATCH 011/368] Use c4-c5-c6-o5 torsion for D/L determination instead, pdbs lots of times do not have hydrogens --- src/Exec_PrepareForLeap.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f562ceb234..2069e87ea3 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -119,7 +119,6 @@ const // Additional atoms for determining D vs L int O5idx = -1; int C4idx = -1; - int H5idx = -1; // Use a set to store linkages so they are in alphabetical order for easier identification std::set linkages; // Bonds to non sugars to be removed since these will confuse tleap @@ -147,9 +146,7 @@ const } else if ( (*topIn)[at].Name() == "C4" ) { C4idx = at; sugarCycle.AddAtom( at ); - } else if ( (*topIn)[at].Name() == "H5" ) - H5idx = at; - else if ( (*topIn)[at].Name() == "C2" || + } else if ( (*topIn)[at].Name() == "C2" || (*topIn)[at].Name() == "C3") sugarCycle.AddAtom( at ); else if ( (*topIn)[at].Name() == "C1" ) { @@ -210,8 +207,8 @@ const } } // END loop over bonded atoms } // END loop over residue atoms - mprintf("\t C6= %i C5= %i C1= %i Cx= %i O5= %i C4= %i H5= %i\n", - C6idx+1, C5idx+1, C1idx+1, Cxidx+1, O5idx+1, C4idx+1, H5idx+1); + mprintf("\t C6= %i C5= %i C1= %i Cx= %i O5= %i C4= %i\n", + C6idx+1, C5idx+1, C1idx+1, Cxidx+1, O5idx+1, C4idx+1); sugarCycle.PrintMaskAtoms("\t Sugar cycle:"); if (C6idx == -1) { mprintf("Warning: C6 index not found.\n"); return 1; } if (C5idx == -1) { mprintf("Warning: C5 index not found.\n"); return 1; } @@ -219,7 +216,6 @@ const if (Cxidx == -1) { mprintf("Warning: Cx index not found.\n"); return 1; } if (O5idx == -1) { mprintf("Warning: O5 index not found.\n"); return 1; } if (C4idx == -1) { mprintf("Warning: C4 index not found.\n"); return 1; } - if (H5idx == -1) { mprintf("Warning: H5 index not found.\n"); return 1; } // Determine alpha/beta LeastSquaresPlaneVector LSPV; LSPV.ReserveForNumAtoms( sugarCycle.Nselected() ); @@ -249,9 +245,8 @@ const //frameIn.printAtomCoord(O5idx); //frameIn.printAtomCoord(C4idx); //frameIn.printAtomCoord(C6idx); - //frameIn.printAtomCoord(H5idx); - double torsion = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C4idx), - frameIn.XYZ(C6idx), frameIn.XYZ(H5idx) ); + double torsion = Torsion( frameIn.XYZ(C4idx), frameIn.XYZ(C5idx), + frameIn.XYZ(C6idx), frameIn.XYZ(O5idx) ); mprintf("\t D/L Torsion= %f deg\n", torsion * Constants::RADDEG); if (torsion > 0) { mprintf("\t D form\n"); From 277da65db410881a2cc2a6dd278327f69cdcefbb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 27 Jul 2021 16:18:54 -0400 Subject: [PATCH 012/368] Instead of least squares plane vector, just look at whether C5 and C1 substituents are both pointing "up" or "down" --- src/Exec_PrepareForLeap.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2069e87ea3..7723e640d2 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -116,6 +116,7 @@ const int C5idx = -1; int C1idx = -1; int Cxidx = -1; // Non-H1, O5, C2 substituent of C1 + int C2idx = -1; // Additional atoms for determining D vs L int O5idx = -1; int C4idx = -1; @@ -146,10 +147,12 @@ const } else if ( (*topIn)[at].Name() == "C4" ) { C4idx = at; sugarCycle.AddAtom( at ); - } else if ( (*topIn)[at].Name() == "C2" || - (*topIn)[at].Name() == "C3") + } else if ( (*topIn)[at].Name() == "C2") { + C2idx = at; sugarCycle.AddAtom( at ); - else if ( (*topIn)[at].Name() == "C1" ) { + } else if ( (*topIn)[at].Name() == "C3") { + sugarCycle.AddAtom( at ); + } else if ( (*topIn)[at].Name() == "C1" ) { C1idx = at; sugarCycle.AddAtom( at ); // Check substituent of C1 (non ring atom, non hydrogen) @@ -207,8 +210,8 @@ const } } // END loop over bonded atoms } // END loop over residue atoms - mprintf("\t C6= %i C5= %i C1= %i Cx= %i O5= %i C4= %i\n", - C6idx+1, C5idx+1, C1idx+1, Cxidx+1, O5idx+1, C4idx+1); + mprintf("\t C6= %i C5= %i C1= %i Cx= %i O5= %i C4= %i C2= %i\n", + C6idx+1, C5idx+1, C1idx+1, Cxidx+1, O5idx+1, C4idx+1, C2idx+1); sugarCycle.PrintMaskAtoms("\t Sugar cycle:"); if (C6idx == -1) { mprintf("Warning: C6 index not found.\n"); return 1; } if (C5idx == -1) { mprintf("Warning: C5 index not found.\n"); return 1; } @@ -216,8 +219,9 @@ const if (Cxidx == -1) { mprintf("Warning: Cx index not found.\n"); return 1; } if (O5idx == -1) { mprintf("Warning: O5 index not found.\n"); return 1; } if (C4idx == -1) { mprintf("Warning: C4 index not found.\n"); return 1; } + if (C2idx == -1) { mprintf("Warning: C2 index not found.\n"); return 1; } // Determine alpha/beta - LeastSquaresPlaneVector LSPV; +/* LeastSquaresPlaneVector LSPV; LSPV.ReserveForNumAtoms( sugarCycle.Nselected() ); Vec3 sugarVec = LSPV.CalcLSPvec(frameIn, sugarCycle); Vec3 VC5C6 = Vec3(frameIn.XYZ(C6idx)) - Vec3(frameIn.XYZ(C5idx)); @@ -232,7 +236,14 @@ const mprintf("\t Angle between C5C6 and sugar= %f between C1Cx and sugar= %f\n", theta1*Constants::RADDEG, theta2*Constants::RADDEG); bool C5C6_oppDir_sugarVec = (theta1 > Constants::PIOVER2); bool C1Cx_oppDir_sugarVec = (theta2 > Constants::PIOVER2); - if (C5C6_oppDir_sugarVec == C1Cx_oppDir_sugarVec) { + if (C5C6_oppDir_sugarVec == C1Cx_oppDir_sugarVec) {*/ + double t_c4c5o5c6 = Torsion( frameIn.XYZ(C4idx), frameIn.XYZ(C5idx), + frameIn.XYZ(O5idx), frameIn.XYZ(C6idx) ); + double t_o5c1c2cx = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C1idx), + frameIn.XYZ(C2idx), frameIn.XYZ(Cxidx) ); + bool c5up = (t_c4c5o5c6 > 0); + bool c1up = (t_o5c1c2cx > 0); + if (c1up == c5up) { mprintf("\t Beta form\n"); formStr = "B"; } else { From 96b7d888e5e5e3b6f5b11e461e3017c20053af74 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 09:09:01 -0400 Subject: [PATCH 013/368] Change indentation to make output more clear --- src/Exec_PrepareForLeap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7723e640d2..14ea9e9673 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -23,7 +23,7 @@ void Exec_PrepareForLeap::Help() const /// Used to change residue name to nameIn static inline void ChangeResName(Residue& res, NameType const& nameIn) { if (res.Name() != nameIn) { - mprintf("\tChanging residue %s to %s\n", *(res.Name()), *nameIn); + mprintf("\t Changing residue %s to %s\n", *(res.Name()), *nameIn); res.SetName( nameIn ); } } @@ -31,7 +31,7 @@ static inline void ChangeResName(Residue& res, NameType const& nameIn) { /// Used to change atom name to nameIn static inline void ChangeAtomName(Atom& atm, NameType const& nameIn) { if (atm.Name() != nameIn) { - mprintf("\tChanging atom %s to %s\n", *(atm.Name()), *nameIn); + mprintf("\t Changing atom %s to %s\n", *(atm.Name()), *nameIn); atm.SetName( nameIn ); } } @@ -178,7 +178,7 @@ const { if ((*topIn)[*bat].ResNum() != rnum) { if (!cmask.AtomInCharMask(*bat)) { - mprintf("\tSugar %s bonded to non-sugar %s\n", + mprintf("\t Sugar %s bonded to non-sugar %s\n", topIn->ResNameNumAtomNameNum(at).c_str(), topIn->ResNameNumAtomNameNum(*bat).c_str()); linkages.insert( (*topIn)[at].Name() ); @@ -197,7 +197,7 @@ const mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); } } else { - mprintf("\tSugar %s bonded to sugar %s\n", + mprintf("\t Sugar %s bonded to sugar %s\n", topIn->ResNameNumAtomNameNum(at).c_str(), topIn->ResNameNumAtomNameNum(*bat).c_str()); linkages.insert( (*topIn)[at].Name() ); @@ -472,7 +472,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // TODO imaging? double r2 = DIST2_NoImage(frameIn.XYZ(*at1), frameIn.XYZ(*at2)); if (r2 < cut2) { - mprintf("\tPotential disulfide: %s to %s (%g Ang.)\n", + mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", coords.Top().ResNameNumAtomNameNum(*at1).c_str(), coords.Top().ResNameNumAtomNameNum(*at2).c_str(), sqrt(r2)); isBonded = true; From 29863b4072dbd61a659e73d87ce179446718c34b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 09:12:10 -0400 Subject: [PATCH 014/368] Get rid of least squares plane vector code --- src/Exec_PrepareForLeap.cpp | 36 +++++++++++------------------------- src/cpptrajdepend | 2 +- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 14ea9e9673..e82d227c70 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -8,7 +8,6 @@ #include #include #include // tolower -#include "LeastSquaresPlaneVector.h" // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const @@ -125,7 +124,7 @@ const // Bonds to non sugars to be removed since these will confuse tleap BondArray bondsToRemove; // Loop over sugar atoms - AtomMask sugarCycle; + //AtomMask sugarCycle; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { // Rename some common atoms TODO need to check glycam residue char? @@ -140,21 +139,21 @@ const C6idx = at; else if ( (*topIn)[at].Name() == "C5" ) { C5idx = at; - sugarCycle.AddAtom( at ); + //sugarCycle.AddAtom( at ); } else if ( (*topIn)[at].Name() == "O5" ) { O5idx = at; - sugarCycle.AddAtom( at ); + //sugarCycle.AddAtom( at ); } else if ( (*topIn)[at].Name() == "C4" ) { C4idx = at; - sugarCycle.AddAtom( at ); + //sugarCycle.AddAtom( at ); } else if ( (*topIn)[at].Name() == "C2") { C2idx = at; - sugarCycle.AddAtom( at ); + //sugarCycle.AddAtom( at ); } else if ( (*topIn)[at].Name() == "C3") { - sugarCycle.AddAtom( at ); + //sugarCycle.AddAtom( at ); } else if ( (*topIn)[at].Name() == "C1" ) { C1idx = at; - sugarCycle.AddAtom( at ); + //sugarCycle.AddAtom( at ); // Check substituent of C1 (non ring atom, non hydrogen) for (Atom::bond_iterator bat = (*topIn)[at].bondbegin(); bat != (*topIn)[at].bondend(); ++bat) @@ -212,7 +211,7 @@ const } // END loop over residue atoms mprintf("\t C6= %i C5= %i C1= %i Cx= %i O5= %i C4= %i C2= %i\n", C6idx+1, C5idx+1, C1idx+1, Cxidx+1, O5idx+1, C4idx+1, C2idx+1); - sugarCycle.PrintMaskAtoms("\t Sugar cycle:"); + //sugarCycle.PrintMaskAtoms("\t Sugar cycle:"); if (C6idx == -1) { mprintf("Warning: C6 index not found.\n"); return 1; } if (C5idx == -1) { mprintf("Warning: C5 index not found.\n"); return 1; } if (C1idx == -1) { mprintf("Warning: C1 index not found.\n"); return 1; } @@ -221,22 +220,8 @@ const if (C4idx == -1) { mprintf("Warning: C4 index not found.\n"); return 1; } if (C2idx == -1) { mprintf("Warning: C2 index not found.\n"); return 1; } // Determine alpha/beta -/* LeastSquaresPlaneVector LSPV; - LSPV.ReserveForNumAtoms( sugarCycle.Nselected() ); - Vec3 sugarVec = LSPV.CalcLSPvec(frameIn, sugarCycle); - Vec3 VC5C6 = Vec3(frameIn.XYZ(C6idx)) - Vec3(frameIn.XYZ(C5idx)); - VC5C6.Normalize(); - Vec3 VC1Cx = Vec3(frameIn.XYZ(Cxidx)) - Vec3(frameIn.XYZ(C1idx)); - VC1Cx.Normalize(); - sugarVec.Print("sugarVec"); - VC5C6.Print("C5C6"); - VC1Cx.Print("C1Cx"); - double theta1 = sugarVec.Angle( VC5C6 ); - double theta2 = sugarVec.Angle( VC1Cx ); - mprintf("\t Angle between C5C6 and sugar= %f between C1Cx and sugar= %f\n", theta1*Constants::RADDEG, theta2*Constants::RADDEG); - bool C5C6_oppDir_sugarVec = (theta1 > Constants::PIOVER2); - bool C1Cx_oppDir_sugarVec = (theta2 > Constants::PIOVER2); - if (C5C6_oppDir_sugarVec == C1Cx_oppDir_sugarVec) {*/ + // Alpha - C1 and C5 substituents are on opposite sides. + // Beta - C1 and C5 substituents are on the same side. double t_c4c5o5c6 = Torsion( frameIn.XYZ(C4idx), frameIn.XYZ(C5idx), frameIn.XYZ(O5idx), frameIn.XYZ(C6idx) ); double t_o5c1c2cx = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C1idx), @@ -251,6 +236,7 @@ const formStr = "A"; } // Determine D/L + // Check the chirality around the C5 atom. bool isDform = true; // DEBUG //frameIn.printAtomCoord(O5idx); diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 6eb5b6b189..5dd88f5c4a 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -279,7 +279,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h LeastSquaresPlaneVector.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From a9bf1adcc9c635b790c5fbd0dd0f008f5eb2c992 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 10:23:25 -0400 Subject: [PATCH 015/368] Output leap input file name --- src/Exec_PrepareForLeap.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e82d227c70..82defe0a1b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -424,6 +424,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) CpptrajFile* outfile = State.DFL().AddCpptrajFile(argIn.GetStringKey("out"), "LEaP Input", DataFileList::TEXT, true); if (outfile == 0) return CpptrajState::ERR; + mprintf("\tLEaP input containing bonds for disulfides, sugars, etc\n" + "\t will be written to '%s'\n", outfile->Filename().full()); // Disulfide search double disulfidecut = argIn.getKeyDouble("disulfidecut", 2.5); From f3225de76d085a60a118df2df4fa5f5177be9758 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 10:23:38 -0400 Subject: [PATCH 016/368] Start tool for parsing glycam csv file --- .../converters/glycam.csv.to.dat/Makefile | 6 +++++ .../glycam.csv.to.dat/glycam.csv.to.dat.cpp | 26 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 devtools/converters/glycam.csv.to.dat/Makefile create mode 100644 devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp diff --git a/devtools/converters/glycam.csv.to.dat/Makefile b/devtools/converters/glycam.csv.to.dat/Makefile new file mode 100644 index 0000000000..831806dab6 --- /dev/null +++ b/devtools/converters/glycam.csv.to.dat/Makefile @@ -0,0 +1,6 @@ +include ../../../config.h + + +glycam.csv.to.dat: + $(CXX) -o glycam.csv.to.dat glycam.csv.to.dat.cpp + diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp new file mode 100644 index 0000000000..5e4ca50e2d --- /dev/null +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -0,0 +1,26 @@ +#include + +/** Convert CSV containing Abbreviation,Name,PDB,Glycam to + * DAT file containing #Name GLYCAM PDB + */ +int main(int argc, char** argv) { + if (argc < 2) { + fprintf(stderr,"Provide CSV file\n"); + return 1; + } + + FILE* infile = fopen( argv[1], "rb" ); + if (infile == 0) return 1; + + char buffer[1024]; + static const int num = 1023; + + char* line = 0; + while ( (line = fgets( buffer, num, infile )) != 0 ) + { + printf("%s", line); + } + fclose( infile ); + + return 0; +} From eaee6a542309db733d4cf67da3711145108782d7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 10:28:50 -0400 Subject: [PATCH 017/368] Start reading the file and using arglist --- devtools/converters/glycam.csv.to.dat/Makefile | 7 +++++-- .../glycam.csv.to.dat/glycam.csv.to.dat.cpp | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/Makefile b/devtools/converters/glycam.csv.to.dat/Makefile index 831806dab6..f720f431e5 100644 --- a/devtools/converters/glycam.csv.to.dat/Makefile +++ b/devtools/converters/glycam.csv.to.dat/Makefile @@ -1,6 +1,9 @@ include ../../../config.h +CPPTRAJ_SOURCE=../../../src/ArgList.cpp ../../../src/StringRoutines.cpp ../../../src/CpptrajStdio.cpp -glycam.csv.to.dat: - $(CXX) -o glycam.csv.to.dat glycam.csv.to.dat.cpp +glycam.csv.to.dat: glycam.csv.to.dat.cpp ../../../src/ArgList.h $(CPPTRAJ_SOURCE) + $(CXX) -o glycam.csv.to.dat glycam.csv.to.dat.cpp $(CPPTRAJ_SOURCE) +clean: + -/bin/rm glycam.csv.to.dat diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp index 5e4ca50e2d..7490c6c064 100644 --- a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -1,4 +1,5 @@ #include +#include "../../../src/ArgList.h" /** Convert CSV containing Abbreviation,Name,PDB,Glycam to * DAT file containing #Name GLYCAM PDB @@ -16,11 +17,21 @@ int main(int argc, char** argv) { static const int num = 1023; char* line = 0; + int lineNum = 1; + int err = 0; while ( (line = fgets( buffer, num, infile )) != 0 ) { - printf("%s", line); + //printf("%s", line); + ArgList argline(line, ","); + if (argline.Nargs() != 4) { + fprintf(stderr,"Error: Line %i has %i columns separated by commas, expected 4.\n", argline.Nargs()); + fprintf(stderr,"%s", line); + err = 1; + break; + } + lineNum++; } fclose( infile ); - return 0; + return err; } From daf59b0a411f84833a2dd575cd7684b381cda4c7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 10:43:40 -0400 Subject: [PATCH 018/368] Finish conversion program --- .../converters/glycam.csv.to.dat/Makefile | 2 +- .../glycam.csv.to.dat/glycam.csv.to.dat.cpp | 36 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/Makefile b/devtools/converters/glycam.csv.to.dat/Makefile index f720f431e5..f83efd6672 100644 --- a/devtools/converters/glycam.csv.to.dat/Makefile +++ b/devtools/converters/glycam.csv.to.dat/Makefile @@ -2,7 +2,7 @@ include ../../../config.h CPPTRAJ_SOURCE=../../../src/ArgList.cpp ../../../src/StringRoutines.cpp ../../../src/CpptrajStdio.cpp -glycam.csv.to.dat: glycam.csv.to.dat.cpp ../../../src/ArgList.h $(CPPTRAJ_SOURCE) +glycam.csv.to.dat: glycam.csv.to.dat.cpp ../../../src/ArgList.h ../../../src/StringRoutines.h $(CPPTRAJ_SOURCE) $(CXX) -o glycam.csv.to.dat glycam.csv.to.dat.cpp $(CPPTRAJ_SOURCE) clean: diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp index 7490c6c064..5e6795afac 100644 --- a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -1,5 +1,7 @@ #include +#include #include "../../../src/ArgList.h" +#include "../../../src/StringRoutines.h" /** Convert CSV containing Abbreviation,Name,PDB,Glycam to * DAT file containing #Name GLYCAM PDB @@ -11,7 +13,18 @@ int main(int argc, char** argv) { } FILE* infile = fopen( argv[1], "rb" ); - if (infile == 0) return 1; + if (infile == 0) { + fprintf(stderr,"Could not open input file.\n"); + return 1; + } + FILE* outfile = fopen( "../../../dat/Carbohydrate_PDB_Glycam_Names.txt", "wb"); + if (outfile == 0) { + fprintf(stderr,"Could not open output file.\n"); + return 1; + } + fprintf(outfile,"# This file contains the mapping from common PDB names to Glycam residue codes.\n"); + fprintf(outfile,"# Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB\n"); + fprintf(outfile,"# Last updated %s\n", TimeString().c_str()); char buffer[1024]; static const int num = 1023; @@ -22,13 +35,32 @@ int main(int argc, char** argv) { while ( (line = fgets( buffer, num, infile )) != 0 ) { //printf("%s", line); - ArgList argline(line, ","); + ArgList argline(line, ",\r\n"); if (argline.Nargs() != 4) { fprintf(stderr,"Error: Line %i has %i columns separated by commas, expected 4.\n", argline.Nargs()); fprintf(stderr,"%s", line); err = 1; break; } + if (argline[0] == "Abbreviation") continue; + // 0 1 2 3 + // infile: Abbreviation Name PDB Glycam + if (argline[2] == ".") { + printf("\"%s\" has no PDB name(s), skipping.\n", argline[1].c_str()); + } else if (argline[3] == ".") { + printf("\"%s\" has no Gycam name, skipping.\n", argline[1].c_str()); + } else { + // outfile: Name Glycam PDB(commas) + std::string name_with_commas = "\"" + argline[1] + "\""; + fprintf(outfile, "%-30s %3s ", name_with_commas.c_str(), argline[3].c_str()); + ArgList pdbnames(argline[2], " "); + for (int n = 0; n < pdbnames.Nargs(); n++) { + if (n > 0) + fprintf(outfile,","); + fprintf(outfile, "%s", pdbnames[n].c_str()); + } + fprintf(outfile,"\n"); + } lineNum++; } fclose( infile ); From 45ff2669c59dcf6eb5bb77203dfc5a0890548eca Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 10:44:02 -0400 Subject: [PATCH 019/368] Add dat file containing pdb residue to glycam char map --- dat/Carbohydrate_PDB_Glycam_Names.txt | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 dat/Carbohydrate_PDB_Glycam_Names.txt diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt new file mode 100644 index 0000000000..14a983a941 --- /dev/null +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -0,0 +1,31 @@ +# This file contains the mapping from common PDB names to Glycam residue codes. +# Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB +# Last updated 07/28/21 10:42:50 +"Glucose" G GLC,MAL,BGC +"N-Acetyl Glucosamine" Y NAG,4YS,SGN,BGLN,NDG +"Glucosamine" Y GCS +"Glucuronic Acid" Z GCU +"Quinovose" Q QUI +"Mannose" M MAN,BMA +"Rhamnose" H RAM +"Tyvelose" T TYV +"Arabinose" A ARA,AHR +"Galactose" L GAL,GLA +"N-Acetyl Galactosamine" V NGA +"Galacturonic Acid" O ADA +"Gulose" K GUL,GUP,GL0 +"Altrose" E ALT +"Allose" N ALL,WOO +"Talose" T TAL +"Iduronic Acid" U IDS +"Fucose" F FUC,FUL +"Lyxose" D LYX +"Abequose" A ABE +"Xylose" X XYL,XYS,LXC,XYP +"Ribose" R RIB +"Bacillosamine" B BAC +"Fructose" C FRU +"Tagatose" J TAG +"Sorbose" B SOR +"Psicose" P PSI +"N-Acetyl Neuraminic Acid" S SIA From dee36fdfadba2765b67d476dda4542c8fad93dcd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 10:56:42 -0400 Subject: [PATCH 020/368] Start logic to load pdb to glycam name map --- src/Exec_PrepareForLeap.cpp | 35 ++++++++++++++++++++++++++++++++++- src/Exec_PrepareForLeap.h | 9 +++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 82defe0a1b..33771c07d4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -5,7 +5,6 @@ #include "TorsionRoutines.h" #include "Constants.h" #include "CpptrajFile.h" -#include #include #include // tolower @@ -83,6 +82,40 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag return linkcode; } +/** Load reduced interal PDB to Glycam map. */ +void Exec_PrepareForLeap::SetGlycamPdbResMap() { + pdb_to_glycam_.insert( PairType("NAG", 'Y') ); +} + +/** Load PDB to Glycam residue map from file. */ +int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) +{ + std::string fname; + if (fnameIn.empty()) { + // Check CPPTRAJHOME + const char* env = getenv("CPPTRAJHOME"); + if (env != 0) { + fname.assign(env); + fname += "/dat/Carbohydrate_PDB_Glycam_Names.txt"; + } + mprintf("Info: Parameter file path from CPPTRAJHOME variable: '%s'\n", fname.c_str()); + } + if (fname.empty()) { + mprintf("Warning: No PDB->Glycam file specified and/or CPPTRAJHOME not set.\n" + "Warning: Using only basic PDB residue name recognition.\n"); + SetGlycamPdbResMap(); + return 0; + } + + CpptrajFile infile; + if (infile.OpenRead(fname)) { + mprinterr("Error: Could not open Glycam residue map file.\n"); + return 1; + } + + return 0; +} + /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology* topIn, Frame const& frameIn, CharMask const& cmask, diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index fcedb85dd3..0803b76308 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -2,6 +2,7 @@ #define INC_EXEC_PREPAREFORLEAP_H #include "Exec.h" #include +#include class CharMask; class CpptrajFile; /// Do common tasks to prepare a structure to be loaded into tleap @@ -12,10 +13,18 @@ class Exec_PrepareForLeap : public Exec { DispatchObject* Alloc() const { return (DispatchObject*)new Exec_PrepareForLeap(); } RetType Execute(CpptrajState&, ArgList&); private: + /// Set a reduced PDB res to glycam map when dat file not found. + void SetGlycamPdbResMap(); + /// Load PDB res to glycam map from dat file + int LoadGlycamPdbResMap(std::string const&); + void LeapBond(int,int,Topology const&, CpptrajFile*) const; int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; int FindTerByBonds(Topology*, CharMask const&) const; std::string leapunitname_; + typedef std::pair PairType; + typedef std::map MapType; + MapType pdb_to_glycam_; ///< Map PDB residue names to Glycam 1 char names }; #endif From bdf84c76c7d262ea9151b80311705ee491e452d8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 11:01:58 -0400 Subject: [PATCH 021/368] Test with the reduced name map --- src/Exec_PrepareForLeap.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 33771c07d4..eb70ddf51c 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -85,6 +85,10 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag /** Load reduced interal PDB to Glycam map. */ void Exec_PrepareForLeap::SetGlycamPdbResMap() { pdb_to_glycam_.insert( PairType("NAG", 'Y') ); + pdb_to_glycam_.insert( PairType("FUC", 'F') ); + pdb_to_glycam_.insert( PairType("GAL", 'L') ); + pdb_to_glycam_.insert( PairType("BMA", 'M') ); + pdb_to_glycam_.insert( PairType("MAN", 'M') ); } /** Load PDB to Glycam residue map from file. */ @@ -125,6 +129,14 @@ const Residue& res = topIn->SetRes(rnum); // Try to ID the base sugar type from the input name. char resChar = ' '; + + MapType::const_iterator pdb_glycam = pdb_to_glycam_.find( res.Name() ); + if ( pdb_glycam == pdb_to_glycam_.end() ) { + mprinterr("Error: Could not identify sugar from residue name '%s'\n", *res.Name()); + return 1; + } + resChar = pdb_glycam->second; +/* if (res.Name() == "NAG") { resChar = 'Y'; } else if (res.Name() == "FUC") { @@ -136,7 +148,7 @@ const } else { mprinterr("Error: Could not identify sugar from residue name '%s'\n", *res.Name()); return 1; - } + }*/ mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); // Try to identify the form /* The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the @@ -409,6 +421,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) Frame frameIn = coords.AllocateFrame(); coords.GetFrame(tgtframe, frameIn); + // Load PDB to glycam residue name map + SetGlycamPdbResMap(); // DEBUG + leapunitname_ = argIn.GetStringKey("leapunitname", "m"); mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); From 69470a42110a04686daf4bb6617bb20ffbc54d7f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 11:14:10 -0400 Subject: [PATCH 022/368] Finish map read and enable --- src/Exec_PrepareForLeap.cpp | 48 +++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index eb70ddf51c..dfc9426d38 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -13,7 +13,7 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] out \n" "\t[cysmask ] [disulfidecut ] [newcysname ]\n" - "\t[sugarmask ]\n" + "\t[sugarmask ] [resmapfile ]\n" "\t[leapunitname ]\n" ); } @@ -110,12 +110,35 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) SetGlycamPdbResMap(); return 0; } + mprintf("\tReading PDB residue name -> Glycam name map from '%s'\n", fname.c_str()); CpptrajFile infile; if (infile.OpenRead(fname)) { mprinterr("Error: Could not open Glycam residue map file.\n"); return 1; } + const char* ptr = 0; + while ( (ptr = infile.NextLine()) != 0 ) { + ArgList argline( ptr, " " ); + if (argline[0][0] != '#') { + if (argline.Nargs() != 3) { + mprinterr("Error: Expected only 3 data columns in '%s', got %i\n", + infile.Filename().full(), argline.Nargs()); + mprinterr("Error: %s\n", ptr); + return 1; + } + ArgList pdbnames( argline[2], "," ); + if (pdbnames.Nargs() < 1) { + mprinterr("Error: No pdb names found.\n"); + mprinterr("Error: %s\n", ptr); + return 1; + } + // TODO handle glycam res names with > 1 char + for (int n = 0; n < pdbnames.Nargs(); n++) + pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) ); + } + } // END loop over file + infile.CloseFile(); return 0; } @@ -136,19 +159,7 @@ const return 1; } resChar = pdb_glycam->second; -/* - if (res.Name() == "NAG") { - resChar = 'Y'; - } else if (res.Name() == "FUC") { - resChar = 'F'; - } else if (res.Name() == "GAL") { - resChar = 'L'; - } else if (res.Name() == "BMA" || res.Name() == "MAN") { - resChar = 'M'; - } else { - mprinterr("Error: Could not identify sugar from residue name '%s'\n", *res.Name()); - return 1; - }*/ + mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); // Try to identify the form /* The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the @@ -422,7 +433,14 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) coords.GetFrame(tgtframe, frameIn); // Load PDB to glycam residue name map - SetGlycamPdbResMap(); // DEBUG + if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { + mprinterr("Error: PDB to glycam name map load failed.\n"); + return CpptrajState::ERR; + } + // DEBUG - print residue name map + mprintf("\tResidue name map:\n"); + for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) + mprintf("\t %4s -> %c\n", *(mit->first), mit->second); leapunitname_ = argIn.GetStringKey("leapunitname", "m"); mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); From 6df88c46fc386f95bbcb044b451a5d2e6511286c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 11:14:21 -0400 Subject: [PATCH 023/368] Ensure pdb->glycam map data is installed --- src/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Makefile b/src/Makefile index 2ef782e335..d912f1cb46 100644 --- a/src/Makefile +++ b/src/Makefile @@ -36,6 +36,7 @@ install_dat: cp ../dat/BONDTYPE_CHECK.TAB $(CPPTRAJDAT)/ cp ../dat/Karplus.txt $(CPPTRAJDAT)/ cp ../dat/README $(CPPTRAJDAT)/ + cp ../dat/Carbohydrate_PDB_Glycam_Names.txt $(CPPTRAJDAT)/ # Static libraries --------------------- #$(CPPTRAJLIB)/libcpptraj.a: $(LIBCPPTRAJ_OBJECTS) $(FFT_TARGET) $(CUDA_TARGET) From 5925a86c41e7fba185dff298e63cba9c30363a61 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 11:20:13 -0400 Subject: [PATCH 024/368] Clear up output formatting, report torsions used to determine A/B --- src/Exec_PrepareForLeap.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index dfc9426d38..e0ce3d8d4a 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -282,6 +282,8 @@ const frameIn.XYZ(O5idx), frameIn.XYZ(C6idx) ); double t_o5c1c2cx = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C1idx), frameIn.XYZ(C2idx), frameIn.XYZ(Cxidx) ); + mprintf("\t A/B torsion of C5 substituent= %f deg\n", t_c4c5o5c6 * Constants::RADDEG); + mprintf("\t A/B torsion of C1 substituent= %f deg\n", t_o5c1c2cx * Constants::RADDEG); bool c5up = (t_c4c5o5c6 > 0); bool c1up = (t_o5c1c2cx > 0); if (c1up == c5up) { @@ -300,7 +302,7 @@ const //frameIn.printAtomCoord(C6idx); double torsion = Torsion( frameIn.XYZ(C4idx), frameIn.XYZ(C5idx), frameIn.XYZ(C6idx), frameIn.XYZ(O5idx) ); - mprintf("\t D/L Torsion= %f deg\n", torsion * Constants::RADDEG); + mprintf("\t D/L Torsion around C5= %f deg\n", torsion * Constants::RADDEG); if (torsion > 0) { mprintf("\t D form\n"); } else { From 4b20e21fb7b1f18f108bbeb5adf728a64b59988f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 11:29:53 -0400 Subject: [PATCH 025/368] Fix up help --- src/Exec_PrepareForLeap.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e0ce3d8d4a..94b839ee78 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -11,10 +11,11 @@ // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const { - mprintf("\tcrdset [frame <#>] out \n" - "\t[cysmask ] [disulfidecut ] [newcysname ]\n" - "\t[sugarmask ] [resmapfile ]\n" + mprintf("\tcrdset [frame <#>] [out ]\n" + "\t[cysmask ] [disulfidecut ] [newcysname ]\n" + "\t[sugarmask ] [resmapfile ]\n" "\t[leapunitname ]\n" + "\t[molmask ...] [determinemolmask ]\n" ); } @@ -238,7 +239,7 @@ const topIn->ResNameNumAtomNameNum(*bat).c_str()); linkages.insert( (*topIn)[at].Name() ); bondsToRemove.push_back( BondType(at, *bat, -1) ); - // Check if this is a recognized linkage TODO put in another file? + // Check if this is a recognized linkage to non-sugar TODO put in another file? Residue& pres = topIn->SetRes( (*topIn)[*bat].ResNum() ); if ( pres.Name() == "SER" ) { ChangeResName( pres, "OLS" ); @@ -603,7 +604,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } } - + + return CpptrajState::OK; } From 7795455d251172a5b9365d9a7f0a1f1cbe9bc000 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 11:34:25 -0400 Subject: [PATCH 026/368] Add help description --- src/Exec_PrepareForLeap.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 94b839ee78..b1b7dc94d4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -14,8 +14,17 @@ void Exec_PrepareForLeap::Help() const mprintf("\tcrdset [frame <#>] [out ]\n" "\t[cysmask ] [disulfidecut ] [newcysname ]\n" "\t[sugarmask ] [resmapfile ]\n" - "\t[leapunitname ]\n" + "\t[leapunitname ]\n" "\t[molmask ...] [determinemolmask ]\n" + " Prepare the structure in the given coords set for easier processing\n" + " with the LEaP program from AmberTools. Any existing/potential\n" + " disulfide bonds will be identified and the residue names changed\n" + " to (CYX by default), and if specified any sugars\n" + " recognized in the region will be identified and have\n" + " their names changed to Glycam names. Disulfides and sugars will\n" + " have any inter-residue bonds removed, and the appropriate LEaP\n" + " input to add the bonds back once the structure has been loaded\n" + " into LEaP will be written to .\n" ); } From 2cb9643d869fc84d23833cd1953c0cdedf9cc887 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 28 Jul 2021 11:41:30 -0400 Subject: [PATCH 027/368] Add pdbout keyword --- src/Exec_PrepareForLeap.cpp | 22 ++++++++++++++++++++-- src/cpptrajdepend | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b1b7dc94d4..43193446ea 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -5,6 +5,7 @@ #include "TorsionRoutines.h" #include "Constants.h" #include "CpptrajFile.h" +#include "Trajout_Single.h" #include #include // tolower @@ -14,7 +15,7 @@ void Exec_PrepareForLeap::Help() const mprintf("\tcrdset [frame <#>] [out ]\n" "\t[cysmask ] [disulfidecut ] [newcysname ]\n" "\t[sugarmask ] [resmapfile ]\n" - "\t[leapunitname ]\n" + "\t[leapunitname ] [pdbout ]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" " with the LEaP program from AmberTools. Any existing/potential\n" @@ -444,6 +445,10 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) Frame frameIn = coords.AllocateFrame(); coords.GetFrame(tgtframe, frameIn); + std::string pdbout = argIn.GetStringKey("pdbout"); + if (!pdbout.empty()) + mprintf("\tPDB will be written to %s\n", pdbout.c_str()); + // Load PDB to glycam residue name map if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { mprinterr("Error: PDB to glycam name map load failed.\n"); @@ -614,7 +619,20 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } - + if (!pdbout.empty()) { + Trajout_Single PDB; + if (PDB.InitTrajWrite( pdbout, "topresnum", State.DSL(), TrajectoryFile::PDBFILE)) { + mprinterr("Error: Could not initialize output PDB\n"); + return CpptrajState::ERR; + } + if (PDB.SetupTrajWrite(coords.TopPtr(), coords.CoordsInfo(), 1)) { + mprinterr("Error: Could not set up output PDB\n"); + return CpptrajState::ERR; + } + PDB.PrintInfo(1); + PDB.WriteSingle(0, frameIn); + PDB.EndTraj(); + } return CpptrajState::OK; } diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 5dd88f5c4a..70f1ef4870 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -279,7 +279,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From 896056f0c3205c12356b3a1a109daa753ce2505a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 08:44:01 -0400 Subject: [PATCH 028/368] Expand warning about missing Cx maybe due to incomplete bond info --- src/Exec_PrepareForLeap.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 43193446ea..7968219bc0 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -282,10 +282,18 @@ const if (C6idx == -1) { mprintf("Warning: C6 index not found.\n"); return 1; } if (C5idx == -1) { mprintf("Warning: C5 index not found.\n"); return 1; } if (C1idx == -1) { mprintf("Warning: C1 index not found.\n"); return 1; } - if (Cxidx == -1) { mprintf("Warning: Cx index not found.\n"); return 1; } if (O5idx == -1) { mprintf("Warning: O5 index not found.\n"); return 1; } if (C4idx == -1) { mprintf("Warning: C4 index not found.\n"); return 1; } if (C2idx == -1) { mprintf("Warning: C2 index not found.\n"); return 1; } + // If the Cx (C1 substituent, usually a different residue) index is + // not found this usually means missing inter-residue bond. + if (Cxidx == -1) { + mprintf("Warning: Cx index not found.\n" + "Warning: If '%s' is from a topology without complete bonding information\n" + "Warning: (e.g. a PDB file), try loading the topology with the\n" + "Warning: 'searchtype grid' keywords instead.\n", topIn->c_str()); + return 1; + } // Determine alpha/beta // Alpha - C1 and C5 substituents are on opposite sides. // Beta - C1 and C5 substituents are on the same side. From 75a22305bd692fee130c1baa7503a56c7aec0542 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 09:01:30 -0400 Subject: [PATCH 029/368] Ensure no alternate location IDs --- src/Exec_PrepareForLeap.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7968219bc0..5c7592d409 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -444,6 +444,30 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } DataSet_Coords& coords = static_cast( *((DataSet_Coords*)ds) ); + + // Check that coords has no issues + if (!coords.Top().AtomAltLoc().empty()) { + // Must have only 1 atom alternate location + char firstAltLoc = ' '; + for (std::vector::const_iterator altLocId = coords.Top().AtomAltLoc().begin(); + altLocId != coords.Top().AtomAltLoc().end(); + ++altLocId) + { + if (firstAltLoc == ' ') { + // Find first non-blank alternate location ID + if (*altLocId != ' ') + firstAltLoc = *altLocId; + } else if (*altLocId != ' ' && *altLocId != firstAltLoc) { + mprinterr("Error: '%s' has atoms with multiple alternate location IDs, which\n" + "Error: are not supported by LEaP. Use the 'keepaltloc '\n" + "Error: keyword for parm/trajin etc. to select which alternate\n" + "Error: atom locations to keep.\n", coords.legend()); + return CpptrajState::ERR; + } + } + mprintf("\t'%s' only contains atoms from alternate location ID '%c'\n", coords.legend(), firstAltLoc); + } + int tgtframe = argIn.getKeyInt("frame", 1) - 1; mprintf("\tUsing frame %i from COORDS set %s\n", tgtframe+1, coords.legend()); if (tgtframe < 0 || tgtframe >= (int)coords.Size()) { From d77f9c31ded801397da5a2323204813eef0911ed Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 09:16:30 -0400 Subject: [PATCH 030/368] If 'pdbout' has been specified, add loadpdb command to leap input --- src/Exec_PrepareForLeap.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 5c7592d409..845cd8e358 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -539,8 +539,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) CpptrajFile* outfile = State.DFL().AddCpptrajFile(argIn.GetStringKey("out"), "LEaP Input", DataFileList::TEXT, true); if (outfile == 0) return CpptrajState::ERR; - mprintf("\tLEaP input containing bonds for disulfides, sugars, etc\n" - "\t will be written to '%s'\n", outfile->Filename().full()); + mprintf("\tLEaP input containing 'loadpdb' and bond commands for disulfides,\n" + "\t sugars, etc will be written to '%s'\n", outfile->Filename().full()); + // Add the loadpdb command if we are writing a PDB file. + if (!pdbout.empty()) + outfile->Printf("%s = loadpdb %s\n", leapunitname_.c_str(), pdbout.c_str()); // Disulfide search double disulfidecut = argIn.getKeyDouble("disulfidecut", 2.5); From fda9edbcc089742737be6ff95197bea574dae19a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 11:46:54 -0400 Subject: [PATCH 031/368] Put disulfide search into its own routine --- src/Exec_PrepareForLeap.cpp | 109 +++++++++++++++++++++--------------- src/Exec_PrepareForLeap.h | 3 + 2 files changed, 66 insertions(+), 46 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 845cd8e358..6c90f5cdd1 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -430,6 +430,63 @@ const return 0; } +/** Search for disulfide bonds. */ +int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string const& newcysnamestr, + std::string const& cysmaskstr, + DataSet_Coords& coords, Frame const& frameIn, + CpptrajFile* outfile) +const +{ + // Disulfide search + NameType newcysname(newcysnamestr); + mprintf("\tCysteine residues involved in disulfide bonds will be changed to: %s\n", *newcysname); + mprintf("\tSearching for disulfide bonds with a cutoff of %g Ang.\n", disulfidecut); + + AtomMask cysmask; + if (cysmask.SetMaskString( cysmaskstr )) { + mprinterr("Error: Could not set up CYS mask string %s\n", cysmaskstr.c_str()); + return 1; + } + if (coords.Top().SetupIntegerMask( cysmask )) return 1; + cysmask.MaskInfo(); + if (cysmask.None()) + mprintf("Warning: No cysteine sulfur atoms selected by %s\n", cysmaskstr.c_str()); + else { + int nDisulfides = 0; + double cut2 = disulfidecut * disulfidecut; + // Try to find potential disulfide sites. + for (AtomMask::const_iterator at1 = cysmask.begin(); at1 != cysmask.end(); ++at1) { + for (AtomMask::const_iterator at2 = at1 + 1; at2 != cysmask.end(); ++at2) { + bool isBonded = false; + // Check if the bond already exists + if (coords.Top()[*at1].IsBondedTo(*at2)) { + mprintf("\tExisting disulfide: %s to %s\n", + coords.Top().ResNameNumAtomNameNum(*at1).c_str(), + coords.Top().ResNameNumAtomNameNum(*at2).c_str()); + isBonded = true; + } else { + // TODO imaging? + double r2 = DIST2_NoImage(frameIn.XYZ(*at1), frameIn.XYZ(*at2)); + if (r2 < cut2) { + mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", + coords.Top().ResNameNumAtomNameNum(*at1).c_str(), + coords.Top().ResNameNumAtomNameNum(*at2).c_str(), sqrt(r2)); + isBonded = true; + } + } + if (isBonded) { + nDisulfides++; + LeapBond(*at1, *at2, coords.Top(), outfile); + ChangeResName(coords.TopPtr()->SetRes(coords.Top()[*at1].ResNum()), newcysname); + ChangeResName(coords.TopPtr()->SetRes(coords.Top()[*at2].ResNum()), newcysname); + } + } + } + mprintf("\tDetected %i disulfide bonds.\n", nDisulfides); + } + return 0; +} + // Exec_PrepareForLeap::Execute() Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { @@ -546,54 +603,14 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) outfile->Printf("%s = loadpdb %s\n", leapunitname_.c_str(), pdbout.c_str()); // Disulfide search - double disulfidecut = argIn.getKeyDouble("disulfidecut", 2.5); - std::string newcysnamestr = argIn.GetStringKey("newcysname", "CYX"); - NameType newcysname(newcysnamestr); - mprintf("\tCysteine residues involved in disulfide bonds will be changed to: %s\n", *newcysname); - std::string cysmaskstr = argIn.GetStringKey("cysmask", ":CYS@SG"); - mprintf("\tSearching for disulfide bonds with a cutoff of %g Ang.\n", disulfidecut); - AtomMask cysmask; - if (cysmask.SetMaskString( cysmaskstr )) { - mprinterr("Error: Could not set up CYS mask string %s\n", cysmaskstr.c_str()); + if (SearchForDisulfides( argIn.getKeyDouble("disulfidecut", 2.5), + argIn.GetStringKey("newcysname", "CYX"), + argIn.GetStringKey("cysmask", ":CYS@SG"), + coords, frameIn, outfile )) + { + mprinterr("Error: Disulfide search failed.\n"); return CpptrajState::ERR; } - if (coords.Top().SetupIntegerMask( cysmask )) return CpptrajState::ERR; - cysmask.MaskInfo(); - if (cysmask.None()) - mprintf("Warning: No cysteine sulfur atoms selected by %s\n", cysmaskstr.c_str()); - else { - int nDisulfides = 0; - double cut2 = disulfidecut * disulfidecut; - // Try to find potential disulfide sites. - for (AtomMask::const_iterator at1 = cysmask.begin(); at1 != cysmask.end(); ++at1) { - for (AtomMask::const_iterator at2 = at1 + 1; at2 != cysmask.end(); ++at2) { - bool isBonded = false; - // Check if the bond already exists - if (coords.Top()[*at1].IsBondedTo(*at2)) { - mprintf("\tExisting disulfide: %s to %s\n", - coords.Top().ResNameNumAtomNameNum(*at1).c_str(), - coords.Top().ResNameNumAtomNameNum(*at2).c_str()); - isBonded = true; - } else { - // TODO imaging? - double r2 = DIST2_NoImage(frameIn.XYZ(*at1), frameIn.XYZ(*at2)); - if (r2 < cut2) { - mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", - coords.Top().ResNameNumAtomNameNum(*at1).c_str(), - coords.Top().ResNameNumAtomNameNum(*at2).c_str(), sqrt(r2)); - isBonded = true; - } - } - if (isBonded) { - nDisulfides++; - LeapBond(*at1, *at2, coords.Top(), outfile); - ChangeResName(coords.TopPtr()->SetRes(coords.Top()[*at1].ResNum()), newcysname); - ChangeResName(coords.TopPtr()->SetRes(coords.Top()[*at2].ResNum()), newcysname); - } - } - } - mprintf("\tDetected %i disulfide bonds.\n", nDisulfides); - } // Prepare sugars if (sugarMask.MaskStringSet()) { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 0803b76308..8d1d464fd7 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -5,6 +5,7 @@ #include class CharMask; class CpptrajFile; +class DataSet_Coords; /// Do common tasks to prepare a structure to be loaded into tleap class Exec_PrepareForLeap : public Exec { public: @@ -21,6 +22,8 @@ class Exec_PrepareForLeap : public Exec { void LeapBond(int,int,Topology const&, CpptrajFile*) const; int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; int FindTerByBonds(Topology*, CharMask const&) const; + int SearchForDisulfides(double, std::string const&, std::string const&, + DataSet_Coords&, Frame const&, CpptrajFile*) const; std::string leapunitname_; typedef std::pair PairType; From a14b32d9f34476bab7411be8eb323ada1f5591c0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 11:55:52 -0400 Subject: [PATCH 032/368] Add 'nosugars' keyword to skip sugar prep, and set up a default sugar mask if none specified and we still want to prepare sugars --- src/Exec_PrepareForLeap.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6c90f5cdd1..2301e03021 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -14,7 +14,7 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] [out ]\n" "\t[cysmask ] [disulfidecut ] [newcysname ]\n" - "\t[sugarmask ] [resmapfile ]\n" + "\t[{nosugars|sugarmask }] [resmapfile ]\n" "\t[leapunitname ] [pdbout ]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" @@ -551,14 +551,38 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) leapunitname_ = argIn.GetStringKey("leapunitname", "m"); mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); + bool prepare_sugars = !argIn.hasKey("nosugars"); + if (!prepare_sugars) + mprintf("\tNot attempting to prepare sugars.\n"); + else + mprintf("\tWill attempt to prepare sugars.\n"); + AtomMask sugarMask; std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); if (!sugarmaskstr.empty()) { + if (!prepare_sugars) { + mprinterr("Error: Cannot specify 'nosugars' and 'sugarmask'\n"); + return CpptrajState::ERR; + } + if (sugarMask.SetMaskString(sugarmaskstr)) { + mprinterr("Error: Setting sugar mask string.\n"); + return CpptrajState::ERR; + } + } else if (prepare_sugars) { + // No sugar mask specified; create one from names in pdb_to_glycam_ map. + sugarmaskstr.assign(":"); + for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) + { + if (mit != pdb_to_glycam_.begin()) + sugarmaskstr.append(","); + sugarmaskstr.append( mit->first.Truncated() ); + } if (sugarMask.SetMaskString(sugarmaskstr)) { mprinterr("Error: Setting sugar mask string.\n"); return CpptrajState::ERR; } } + // Get masks for molecules now since topology may be modified later. std::vector molMasks; std::string mstr = argIn.GetStringKey("molmask"); @@ -613,7 +637,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // Prepare sugars - if (sugarMask.MaskStringSet()) { + if (prepare_sugars) { std::set sugarBondsToRemove; mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); if (coords.Top().SetupIntegerMask( sugarMask )) return CpptrajState::ERR; From cdabbd674bf8d86839caa0c2011070c80e4041cc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 12:05:52 -0400 Subject: [PATCH 033/368] Put sugar preparation in a separate function --- src/Exec_PrepareForLeap.cpp | 70 ++++++++++++++++++++++--------------- src/Exec_PrepareForLeap.h | 2 ++ 2 files changed, 43 insertions(+), 29 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2301e03021..20572582ba 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -357,6 +357,44 @@ const return 0; } +/** Prepare sugars for leap. */ +int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, DataSet_Coords& coords, + Frame const& frameIn, CpptrajFile* outfile) +const +{ + std::set sugarBondsToRemove; + mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); + if (coords.Top().SetupIntegerMask( sugarMask )) return 1; + sugarMask.MaskInfo(); + if (sugarMask.None()) + mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); + else { + CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); + // Get sugar residue numbers + std::vector sugarResNums = coords.Top().ResnumsSelectedBy( sugarMask ); + // For each sugar residue, see if it is bonded to a non-sugar residue. + // If it is, remove that bond but record it. + for (std::vector::const_iterator rnum = sugarResNums.begin(); + rnum != sugarResNums.end(); ++rnum) + { + //Residue const& Res = coords.Top().Res(*rnum); + // See if we recognize this sugar. + if (IdentifySugar(*rnum, coords.TopPtr(), frameIn, cmask, outfile, sugarBondsToRemove)) + return 1; + } // END loop over sugar residues + // Remove bonds between sugars + for (std::set::const_iterator bnd = sugarBondsToRemove.begin(); + bnd != sugarBondsToRemove.end(); ++bnd) + { + LeapBond(bnd->A1(), bnd->A2(), *(coords.TopPtr()), outfile); + coords.TopPtr()->RemoveBond(bnd->A1(), bnd->A2()); + } + } + // Bonds to sugars have been removed, so regenerate molecule info + coords.TopPtr()->DetermineMolecules(); + return 0; +} + /** Determine where molecules end based on connectivity. */ int Exec_PrepareForLeap::FindTerByBonds(Topology* topIn, CharMask const& maskIn) const @@ -638,36 +676,10 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (prepare_sugars) { - std::set sugarBondsToRemove; - mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); - if (coords.Top().SetupIntegerMask( sugarMask )) return CpptrajState::ERR; - sugarMask.MaskInfo(); - if (sugarMask.None()) - mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); - else { - CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); - // Get sugar residue numbers - std::vector sugarResNums = coords.Top().ResnumsSelectedBy( sugarMask ); - // For each sugar residue, see if it is bonded to a non-sugar residue. - // If it is, remove that bond but record it. - for (std::vector::const_iterator rnum = sugarResNums.begin(); - rnum != sugarResNums.end(); ++rnum) - { - //Residue const& Res = coords.Top().Res(*rnum); - // See if we recognize this sugar. - if (IdentifySugar(*rnum, coords.TopPtr(), frameIn, cmask, outfile, sugarBondsToRemove)) - return CpptrajState::ERR; - } // END loop over sugar residues - // Remove bonds between sugars - for (std::set::const_iterator bnd = sugarBondsToRemove.begin(); - bnd != sugarBondsToRemove.end(); ++bnd) - { - LeapBond(bnd->A1(), bnd->A2(), *(coords.TopPtr()), outfile); - coords.TopPtr()->RemoveBond(bnd->A1(), bnd->A2()); - } + if (PrepareSugars(sugarMask, coords, frameIn, outfile)) { + mprinterr("Error: Sugar preparation failed.\n"); + return CpptrajState::ERR; } - // Bonds to sugars have been removed, so regenerate molecule info - coords.TopPtr()->DetermineMolecules(); } // Try to set terminal residues diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 8d1d464fd7..35c8d0caf1 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -3,6 +3,7 @@ #include "Exec.h" #include #include +class AtomMask; class CharMask; class CpptrajFile; class DataSet_Coords; @@ -21,6 +22,7 @@ class Exec_PrepareForLeap : public Exec { void LeapBond(int,int,Topology const&, CpptrajFile*) const; int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; + int PrepareSugars(AtomMask&, DataSet_Coords&, Frame const&, CpptrajFile*) const; int FindTerByBonds(Topology*, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, DataSet_Coords&, Frame const&, CpptrajFile*) const; From 42d3946a971640a811dc2d5b9eff42b46b814af2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 12:08:35 -0400 Subject: [PATCH 034/368] Add nodisulfide keyword --- src/Exec_PrepareForLeap.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 20572582ba..a057e32889 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -13,8 +13,9 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] [out ]\n" - "\t[cysmask ] [disulfidecut ] [newcysname ]\n" - "\t[{nosugars|sugarmask }] [resmapfile ]\n" + "\t[{nodisulfide |\n" + "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" + "\t[{nosugars | sugarmask }] [resmapfile ]\n" "\t[leapunitname ] [pdbout ]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" @@ -665,13 +666,17 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) outfile->Printf("%s = loadpdb %s\n", leapunitname_.c_str(), pdbout.c_str()); // Disulfide search - if (SearchForDisulfides( argIn.getKeyDouble("disulfidecut", 2.5), - argIn.GetStringKey("newcysname", "CYX"), - argIn.GetStringKey("cysmask", ":CYS@SG"), - coords, frameIn, outfile )) - { - mprinterr("Error: Disulfide search failed.\n"); - return CpptrajState::ERR; + if (!argIn.hasKey("nodisulfide")) { + if (SearchForDisulfides( argIn.getKeyDouble("disulfidecut", 2.5), + argIn.GetStringKey("newcysname", "CYX"), + argIn.GetStringKey("cysmask", ":CYS@SG"), + coords, frameIn, outfile )) + { + mprinterr("Error: Disulfide search failed.\n"); + return CpptrajState::ERR; + } + } else { + mprintf("\tNot searching for disulfides.\n"); } // Prepare sugars From 499f8150372c8828a854328fa9940aee2e0649cc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 12:09:34 -0400 Subject: [PATCH 035/368] Make nodisulfides to be consistent with nosugars --- src/Exec_PrepareForLeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a057e32889..e62e7301eb 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -13,7 +13,7 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] [out ]\n" - "\t[{nodisulfide |\n" + "\t[{nodisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars | sugarmask }] [resmapfile ]\n" "\t[leapunitname ] [pdbout ]\n" @@ -666,7 +666,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) outfile->Printf("%s = loadpdb %s\n", leapunitname_.c_str(), pdbout.c_str()); // Disulfide search - if (!argIn.hasKey("nodisulfide")) { + if (!argIn.hasKey("nodisulfides")) { if (SearchForDisulfides( argIn.getKeyDouble("disulfidecut", 2.5), argIn.GetStringKey("newcysname", "CYX"), argIn.GetStringKey("cysmask", ":CYS@SG"), From 3db46ab046ee2456a270d1d9a75219b9e2bc4ac2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 2 Aug 2021 14:47:19 -0400 Subject: [PATCH 036/368] Add existingdisulfides keyword to prevent search for new disulfides --- src/Exec_PrepareForLeap.cpp | 11 ++++++++--- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e62e7301eb..70974bd4a7 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -14,6 +14,7 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] [out ]\n" "\t[{nodisulfides |\n" + "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars | sugarmask }] [resmapfile ]\n" "\t[leapunitname ] [pdbout ]\n" @@ -471,7 +472,7 @@ const /** Search for disulfide bonds. */ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string const& newcysnamestr, - std::string const& cysmaskstr, + std::string const& cysmaskstr, bool searchForNewDisulfides, DataSet_Coords& coords, Frame const& frameIn, CpptrajFile* outfile) const @@ -479,7 +480,10 @@ const // Disulfide search NameType newcysname(newcysnamestr); mprintf("\tCysteine residues involved in disulfide bonds will be changed to: %s\n", *newcysname); - mprintf("\tSearching for disulfide bonds with a cutoff of %g Ang.\n", disulfidecut); + if (searchForNewDisulfides) + mprintf("\tSearching for disulfide bonds with a cutoff of %g Ang.\n", disulfidecut); + else + mprintf("\tOnly using existing disulfide bonds, will not search for new ones.\n"); AtomMask cysmask; if (cysmask.SetMaskString( cysmaskstr )) { @@ -503,7 +507,7 @@ const coords.Top().ResNameNumAtomNameNum(*at1).c_str(), coords.Top().ResNameNumAtomNameNum(*at2).c_str()); isBonded = true; - } else { + } else if (searchForNewDisulfides) { // TODO imaging? double r2 = DIST2_NoImage(frameIn.XYZ(*at1), frameIn.XYZ(*at2)); if (r2 < cut2) { @@ -670,6 +674,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (SearchForDisulfides( argIn.getKeyDouble("disulfidecut", 2.5), argIn.GetStringKey("newcysname", "CYX"), argIn.GetStringKey("cysmask", ":CYS@SG"), + !argIn.hasKey("existingdisulfides"), coords, frameIn, outfile )) { mprinterr("Error: Disulfide search failed.\n"); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 35c8d0caf1..d21539fa94 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -24,7 +24,7 @@ class Exec_PrepareForLeap : public Exec { int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; int PrepareSugars(AtomMask&, DataSet_Coords&, Frame const&, CpptrajFile*) const; int FindTerByBonds(Topology*, CharMask const&) const; - int SearchForDisulfides(double, std::string const&, std::string const&, + int SearchForDisulfides(double, std::string const&, std::string const&, bool, DataSet_Coords&, Frame const&, CpptrajFile*) const; std::string leapunitname_; From 9e0ca4e2a20031434b242e791a08fe5cfdb137c1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 3 Aug 2021 09:55:32 -0400 Subject: [PATCH 037/368] New way of searching for potential disulfides that gives priority to sorter S-S distances. --- src/Exec_PrepareForLeap.cpp | 107 ++++++++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 18 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 70974bd4a7..bc068aa982 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -8,6 +8,7 @@ #include "Trajout_Single.h" #include #include // tolower +#include // sort // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const @@ -498,31 +499,101 @@ const int nDisulfides = 0; double cut2 = disulfidecut * disulfidecut; // Try to find potential disulfide sites. - for (AtomMask::const_iterator at1 = cysmask.begin(); at1 != cysmask.end(); ++at1) { - for (AtomMask::const_iterator at2 = at1 + 1; at2 != cysmask.end(); ++at2) { - bool isBonded = false; - // Check if the bond already exists + // Keep track of which atoms will be part of disulfide bonds. + std::vector disulfidePartner( cysmask.Nselected(), -1 ); + // First, check for existing disulfides. + for (AtomMask::const_iterator at1 = cysmask.begin(); at1 != cysmask.end(); ++at1) + { + for (AtomMask::const_iterator at2 = at1 + 1; at2 != cysmask.end(); ++at2) + { if (coords.Top()[*at1].IsBondedTo(*at2)) { mprintf("\tExisting disulfide: %s to %s\n", coords.Top().ResNameNumAtomNameNum(*at1).c_str(), coords.Top().ResNameNumAtomNameNum(*at2).c_str()); - isBonded = true; - } else if (searchForNewDisulfides) { - // TODO imaging? - double r2 = DIST2_NoImage(frameIn.XYZ(*at1), frameIn.XYZ(*at2)); - if (r2 < cut2) { - mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", - coords.Top().ResNameNumAtomNameNum(*at1).c_str(), - coords.Top().ResNameNumAtomNameNum(*at2).c_str(), sqrt(r2)); - isBonded = true; - } + int idx1 = (int)(at1 - cysmask.begin()); + int idx2 = (int)(at2 - cysmask.begin()); + disulfidePartner[idx1] = idx2; + disulfidePartner[idx2] = idx1; + } + } + } + // DEBUG - Print current array + mprintf("DEBUG: Disulfide partner array after existing:\n"); + for (std::vector::const_iterator it = disulfidePartner.begin(); it != disulfidePartner.end(); ++it) + { + mprintf(" S %i [%li]", cysmask[it-disulfidePartner.begin()]+1, it-disulfidePartner.begin()); + if (*it == -1) + mprintf(" None.\n"); + else + mprintf(" to S %i [%i]\n", cysmask[*it]+1, *it); + } + // Second, search for new disulfides from remaining sulfurs. + if (searchForNewDisulfides) { + // Only search with atoms that do not have an existing partner. + std::vector s_idxs; // Indices into cysmask/disulfidePartner + for (int idx = 0; idx != cysmask.Nselected(); idx++) + if (disulfidePartner[idx] == -1) + s_idxs.push_back( idx ); + mprintf("\t%zu sulfur atoms do not have a partner.\n", s_idxs.size()); + // In some structures, there may be 2 potential disulfide partners + // within the cutoff. In that case, only choose the shortest. + // To try to do this as directly as possible, calculate all possible S-S + // distances, save the ones below the cutoff, sort them from shortest to + // longest, then assign each that to a disulfide if not already assigned. + // In this way, shorter S-S distances will be prioritized. + typedef std::pair IdxPair; + typedef std::pair D2Pair; + typedef std::vector D2Array; + D2Array D2; + + for (std::vector::const_iterator it1 = s_idxs.begin(); it1 != s_idxs.end(); ++it1) + { + int at1 = cysmask[*it1]; + for (std::vector::const_iterator it2 = it1 + 1; it2 != s_idxs.end(); ++it2) + { + int at2 = cysmask[*it2]; + double r2 = DIST2_NoImage(frameIn.XYZ(at1), frameIn.XYZ(at2)); + if (r2 < cut2) + D2.push_back( D2Pair(r2, IdxPair(*it1, *it2)) ); } - if (isBonded) { + } + std::sort(D2.begin(), D2.end()); + mprintf("DEBUG: Sorted S-S array:\n"); + for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) + { + int at1 = cysmask[it->second.first]; + int at2 = cysmask[it->second.second]; + mprintf(" %8i - %8i = %g Ang.\n", at1+1, at2+2, sqrt(it->first)); + } + // All distances in D2 are below the cutoff + for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) + { + if (disulfidePartner[it->second.first] == -1 && + disulfidePartner[it->second.second] == -1) + { + // Neither index has a partner yet + int at1 = cysmask[it->second.first]; + int at2 = cysmask[it->second.second]; + mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", + coords.Top().ResNameNumAtomNameNum(at1).c_str(), + coords.Top().ResNameNumAtomNameNum(at2).c_str(), sqrt(it->first)); + disulfidePartner[it->second.first ] = it->second.second; + disulfidePartner[it->second.second] = it->second.first; + } + } // END loop over sorted distances + } // END search for new disulfides + // For each sulfur that has a disulfide partner, generate a bond command + // and change residue name. + for (std::vector::const_iterator idx1 = disulfidePartner.begin(); idx1 != disulfidePartner.end(); ++idx1) + { + if (*idx1 != -1) { + int at1 = cysmask[idx1-disulfidePartner.begin()]; + int at2 = cysmask[*idx1]; + if (at1 < at2) { nDisulfides++; - LeapBond(*at1, *at2, coords.Top(), outfile); - ChangeResName(coords.TopPtr()->SetRes(coords.Top()[*at1].ResNum()), newcysname); - ChangeResName(coords.TopPtr()->SetRes(coords.Top()[*at2].ResNum()), newcysname); + LeapBond(at1, at2, coords.Top(), outfile); } + ChangeResName(coords.TopPtr()->SetRes(coords.Top()[at1].ResNum()), newcysname); } } mprintf("\tDetected %i disulfide bonds.\n", nDisulfides); From a78a498e4c12d71ba5af87451969e66f17e8aa52 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 3 Aug 2021 09:59:16 -0400 Subject: [PATCH 038/368] If all S atoms have partnerts, no search needed --- src/Exec_PrepareForLeap.cpp | 82 +++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index bc068aa982..fe7d28d691 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -535,52 +535,54 @@ const if (disulfidePartner[idx] == -1) s_idxs.push_back( idx ); mprintf("\t%zu sulfur atoms do not have a partner.\n", s_idxs.size()); - // In some structures, there may be 2 potential disulfide partners - // within the cutoff. In that case, only choose the shortest. - // To try to do this as directly as possible, calculate all possible S-S - // distances, save the ones below the cutoff, sort them from shortest to - // longest, then assign each that to a disulfide if not already assigned. - // In this way, shorter S-S distances will be prioritized. - typedef std::pair IdxPair; - typedef std::pair D2Pair; - typedef std::vector D2Array; - D2Array D2; - - for (std::vector::const_iterator it1 = s_idxs.begin(); it1 != s_idxs.end(); ++it1) - { - int at1 = cysmask[*it1]; - for (std::vector::const_iterator it2 = it1 + 1; it2 != s_idxs.end(); ++it2) + if (!s_idxs.empty()) { + // In some structures, there may be 2 potential disulfide partners + // within the cutoff. In that case, only choose the shortest. + // To try to do this as directly as possible, calculate all possible S-S + // distances, save the ones below the cutoff, sort them from shortest to + // longest, then assign each that to a disulfide if not already assigned. + // In this way, shorter S-S distances will be prioritized. + typedef std::pair IdxPair; + typedef std::pair D2Pair; + typedef std::vector D2Array; + D2Array D2; + + for (std::vector::const_iterator it1 = s_idxs.begin(); it1 != s_idxs.end(); ++it1) { - int at2 = cysmask[*it2]; - double r2 = DIST2_NoImage(frameIn.XYZ(at1), frameIn.XYZ(at2)); - if (r2 < cut2) - D2.push_back( D2Pair(r2, IdxPair(*it1, *it2)) ); + int at1 = cysmask[*it1]; + for (std::vector::const_iterator it2 = it1 + 1; it2 != s_idxs.end(); ++it2) + { + int at2 = cysmask[*it2]; + double r2 = DIST2_NoImage(frameIn.XYZ(at1), frameIn.XYZ(at2)); + if (r2 < cut2) + D2.push_back( D2Pair(r2, IdxPair(*it1, *it2)) ); + } } - } - std::sort(D2.begin(), D2.end()); - mprintf("DEBUG: Sorted S-S array:\n"); - for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) - { - int at1 = cysmask[it->second.first]; - int at2 = cysmask[it->second.second]; - mprintf(" %8i - %8i = %g Ang.\n", at1+1, at2+2, sqrt(it->first)); - } - // All distances in D2 are below the cutoff - for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) - { - if (disulfidePartner[it->second.first] == -1 && - disulfidePartner[it->second.second] == -1) + std::sort(D2.begin(), D2.end()); + mprintf("DEBUG: Sorted S-S array:\n"); + for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) { - // Neither index has a partner yet int at1 = cysmask[it->second.first]; int at2 = cysmask[it->second.second]; - mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", - coords.Top().ResNameNumAtomNameNum(at1).c_str(), - coords.Top().ResNameNumAtomNameNum(at2).c_str(), sqrt(it->first)); - disulfidePartner[it->second.first ] = it->second.second; - disulfidePartner[it->second.second] = it->second.first; + mprintf(" %8i - %8i = %g Ang.\n", at1+1, at2+2, sqrt(it->first)); } - } // END loop over sorted distances + // All distances in D2 are below the cutoff + for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) + { + if (disulfidePartner[it->second.first] == -1 && + disulfidePartner[it->second.second] == -1) + { + // Neither index has a partner yet + int at1 = cysmask[it->second.first]; + int at2 = cysmask[it->second.second]; + mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", + coords.Top().ResNameNumAtomNameNum(at1).c_str(), + coords.Top().ResNameNumAtomNameNum(at2).c_str(), sqrt(it->first)); + disulfidePartner[it->second.first ] = it->second.second; + disulfidePartner[it->second.second] = it->second.first; + } + } // END loop over sorted distances + } // END s_idxs not empty() } // END search for new disulfides // For each sulfur that has a disulfide partner, generate a bond command // and change residue name. From 80d1c89dd6896bc50df25f6d58bcb76bca0d1f47 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 3 Aug 2021 14:50:55 -0400 Subject: [PATCH 039/368] Start code for identifying sugar atoms without using atom names --- src/Exec_PrepareForLeap.cpp | 124 +++++++++++++++++++++++++++++++++--- 1 file changed, 116 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index fe7d28d691..4232b86682 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -157,6 +157,28 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) return 0; } +/// Recursive function for following bonds of an atom to a target atom +static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector& ring_atoms, int tgt_atom, std::vector& Visited, bool& found) +{ + Visited[atm] = true; + for (int i = 0; i != idx; i++) + mprintf("\t"); + mprintf("At atom %s\n", topIn.ResNameNumAtomNameNum(atm).c_str()); + ring_atoms[idx] = atm; + if (atm == tgt_atom) { + found = true; + return; + } + // Follow all atoms bonded to this atom + for (Atom::bond_iterator bat = topIn[atm].bondbegin(); bat != topIn[atm].bondend(); ++bat) + { + if (!Visited[*bat]) { + FollowBonds( *bat, topIn, idx+1, ring_atoms, tgt_atom, Visited, found ); + if (found) return; + } + } +} + /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology* topIn, Frame const& frameIn, CharMask const& cmask, @@ -175,6 +197,94 @@ const resChar = pdb_glycam->second; mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); + + // Change PDB names to Glycam ones + // TODO need to check glycam residue char? + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + { + if ( (*topIn)[at].Name() == "C7" ) + ChangeAtomName(topIn->SetAtom(at), "C2N"); + else if ( (*topIn)[at].Name() == "O7" ) + ChangeAtomName(topIn->SetAtom(at), "O2N"); + else if ( (*topIn)[at].Name() == "C8" ) + ChangeAtomName(topIn->SetAtom(at), "CME"); + } + + // Try to identify the ring oxygen. Should be bonded to 2 carbons + // in the same residue. + int ring_oxygen_atom = -1; // e.g. O5 + int ring_o_sub0 = -1; // e.g. C1 + int ring_o_sub0_C = -1; // e.g. C2, from sub0 to same residue + int ring_o_sub0_X = -1; // from sub0 to another residue + int ring_o_sub1 = -1; // e.g. C5 + int ring_o_sub1_C = -1; // e.g. C6, from sub1 to same residue + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + { + Atom const& currentAtom = (*topIn)[at]; + if (currentAtom.Element() == Atom::OXYGEN) + { + if (currentAtom.Nbonds() == 2) { + if ( (*topIn)[currentAtom.Bond(0)].Element() == Atom::CARBON && + (*topIn)[currentAtom.Bond(0)].ResNum() == rnum && + (*topIn)[currentAtom.Bond(1)].Element() == Atom::CARBON && + (*topIn)[currentAtom.Bond(1)].ResNum() == rnum ) + { + if (ring_oxygen_atom != -1) { + mprinterr("Error: Two potential ring oxygen atoms: %i and %i\n", + at+1, ring_oxygen_atom+1); + return 1; + } + ring_oxygen_atom = at; + if (currentAtom.Bond(0) < currentAtom.Bond(1)) { + ring_o_sub0 = currentAtom.Bond(0); + ring_o_sub1 = currentAtom.Bond(1); + } else { + ring_o_sub0 = currentAtom.Bond(1); + ring_o_sub1 = currentAtom.Bond(0); + } + } + } + } + } + mprintf("\t Ring oxygen atom: %s-%s-%s\n", + topIn->ResNameNumAtomNameNum(ring_o_sub0).c_str(), + topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str(), + topIn->ResNameNumAtomNameNum(ring_o_sub1).c_str()); + + // Try to identify the ring atoms. Start from ring_o_sub0, get to ring_o_sub1 + std::vector Visited( topIn->Natom(), true ); + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + if (at != ring_oxygen_atom) + Visited[at] = false; + std::vector ring_atoms( topIn->Res(rnum).NumAtoms(), -1 ); + bool ring_complete = false; + FollowBonds( ring_o_sub0, *topIn, 0, ring_atoms, ring_o_sub1, Visited, ring_complete ); + mprintf("DEBUG: Ring %i:", (int)ring_complete); + for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) + { + mprintf(" %i", *it + 1); + if (*it == -1) break; + } + + // Get the substituent of sub0 (e.g. C1) that is part of the ring (e.g. C2) + for ( Atom::bond_iterator bat = (*topIn)[ring_o_sub0].bondbegin(); + bat != (*topIn)[ring_o_sub0].bondend(); + ++bat ) + { + if ( (*topIn)[*bat].Element() == Atom::CARBON && + (*topIn)[*bat].ResNum() == rnum ) + { + if (ring_o_sub0_C != -1) { + mprinterr("Error: Two potential ring carbons bonded to O-C1 substituent atom: %i and %i\n", + *bat + 1, ring_o_sub0_C + 1); + return 1; + } + ring_o_sub0_C = *bat; + } + } + mprintf("\t C1 C substituent: %s\n", + topIn->ResNameNumAtomNameNum(ring_o_sub0_C).c_str()); + // Try to identify the form /* The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the * opposite side of the OH on the anomeric carbon (C1 in Glycam), while @@ -197,13 +307,6 @@ const //AtomMask sugarCycle; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { - // Rename some common atoms TODO need to check glycam residue char? - if ( (*topIn)[at].Name() == "C7" ) - ChangeAtomName(topIn->SetAtom(at), "C2N"); - else if ( (*topIn)[at].Name() == "O7" ) - ChangeAtomName(topIn->SetAtom(at), "O2N"); - else if ( (*topIn)[at].Name() == "C8" ) - ChangeAtomName(topIn->SetAtom(at), "CME"); // Identify atoms for torsion if ( (*topIn)[at].Name() == "C6" ) C6idx = at; @@ -290,12 +393,17 @@ const if (C2idx == -1) { mprintf("Warning: C2 index not found.\n"); return 1; } // If the Cx (C1 substituent, usually a different residue) index is // not found this usually means missing inter-residue bond. + // Alternatively, this could be an isolated sugar missing an -OH + // group, so make this non-fatal. if (Cxidx == -1) { mprintf("Warning: Cx index not found.\n" "Warning: If '%s' is from a topology without complete bonding information\n" "Warning: (e.g. a PDB file), try loading the topology with the\n" "Warning: 'searchtype grid' keywords instead.\n", topIn->c_str()); - return 1; + mprintf("Warning: This can also happen for isolated sugars missing e.g. a -OH\n" + "Warning: group. In that case coordinates for the missing sugar\n" + "Warning: may need to be generated.\n"); + return 0; } // Determine alpha/beta // Alpha - C1 and C5 substituents are on opposite sides. From 50b989fc6ec352c2eca176c3a2d83eb12b1a86f4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 3 Aug 2021 15:30:47 -0400 Subject: [PATCH 040/368] Use Visited array to mark ring atoms --- src/Exec_PrepareForLeap.cpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4232b86682..635df86d1e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -215,7 +215,7 @@ const int ring_oxygen_atom = -1; // e.g. O5 int ring_o_sub0 = -1; // e.g. C1 int ring_o_sub0_C = -1; // e.g. C2, from sub0 to same residue - int ring_o_sub0_X = -1; // from sub0 to another residue + int ring_o_sub0_X = -1; // from sub0 to non ring atom, non hydrogen int ring_o_sub1 = -1; // e.g. C5 int ring_o_sub1_C = -1; // e.g. C6, from sub1 to same residue for (int at = res.FirstAtom(); at != res.LastAtom(); at++) @@ -260,11 +260,35 @@ const bool ring_complete = false; FollowBonds( ring_o_sub0, *topIn, 0, ring_atoms, ring_o_sub1, Visited, ring_complete ); mprintf("DEBUG: Ring %i:", (int)ring_complete); + // Use Visited as a mask with ring atoms + Visited.assign( topIn->Natom(), false ); + Visited[ring_oxygen_atom] = true; for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { mprintf(" %i", *it + 1); if (*it == -1) break; + Visited[*it] = true; } + mprintf("\n"); + + // Get the substituent of sub1 (e.g. C1) that is to a non-ring atom, non hydrogen + for ( Atom::bond_iterator bat = (*topIn)[ring_o_sub0].bondbegin(); + bat != (*topIn)[ring_o_sub0].bondend(); + ++bat ) + { + if ( (*topIn)[*bat].Element() != Atom::HYDROGEN && + !Visited[*bat] ) + { + if (ring_o_sub0_X != -1) { + mprinterr("Error: Two potential substituents for O-C1 substituent atom: %i and %i\n", + *bat + 1, ring_o_sub0_X + 1); + return 1; + } + ring_o_sub0_X = *bat; + } + } + mprintf("\t C1 X substituent: %s\n", + topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); // Get the substituent of sub0 (e.g. C1) that is part of the ring (e.g. C2) for ( Atom::bond_iterator bat = (*topIn)[ring_o_sub0].bondbegin(); @@ -272,7 +296,8 @@ const ++bat ) { if ( (*topIn)[*bat].Element() == Atom::CARBON && - (*topIn)[*bat].ResNum() == rnum ) + (*topIn)[*bat].ResNum() == rnum && + Visited[*bat] ) { if (ring_o_sub0_C != -1) { mprinterr("Error: Two potential ring carbons bonded to O-C1 substituent atom: %i and %i\n", @@ -285,6 +310,8 @@ const mprintf("\t C1 C substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_o_sub0_C).c_str()); + + // Try to identify the form /* The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the * opposite side of the OH on the anomeric carbon (C1 in Glycam), while From 626901d727143cca13e79800da82fa57252c8d7f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 09:34:10 -0400 Subject: [PATCH 041/368] Count number of ring atoms. --- src/Exec_PrepareForLeap.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 635df86d1e..47ae2ba570 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -263,13 +263,20 @@ const // Use Visited as a mask with ring atoms Visited.assign( topIn->Natom(), false ); Visited[ring_oxygen_atom] = true; + int n_ring_atoms = 1; for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { mprintf(" %i", *it + 1); if (*it == -1) break; Visited[*it] = true; + ++n_ring_atoms; } mprintf("\n"); + mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); + if (!ring_complete) { + mprinterr("Error: Sugar ring could not be identified.\n"); + return 1; + } // Get the substituent of sub1 (e.g. C1) that is to a non-ring atom, non hydrogen for ( Atom::bond_iterator bat = (*topIn)[ring_o_sub0].bondbegin(); @@ -280,8 +287,9 @@ const !Visited[*bat] ) { if (ring_o_sub0_X != -1) { - mprinterr("Error: Two potential substituents for O-C1 substituent atom: %i and %i\n", - *bat + 1, ring_o_sub0_X + 1); + mprinterr("Error: Two potential substituents for O-C1 substituent atom: %s and %s\n", + topIn->ResNameNumAtomNameNum(*bat).c_str(), + topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); return 1; } ring_o_sub0_X = *bat; From d3291798cdae3a924b175ef0cfafc91e3a21486c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 10:08:02 -0400 Subject: [PATCH 042/368] Change to ring_c_beg to be more clear --- src/Exec_PrepareForLeap.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 47ae2ba570..8265251322 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -213,7 +213,7 @@ const // Try to identify the ring oxygen. Should be bonded to 2 carbons // in the same residue. int ring_oxygen_atom = -1; // e.g. O5 - int ring_o_sub0 = -1; // e.g. C1 + int ring_c_beg = -1; // e.g. C1, "lowest" ring C, anomeric carbon int ring_o_sub0_C = -1; // e.g. C2, from sub0 to same residue int ring_o_sub0_X = -1; // from sub0 to non ring atom, non hydrogen int ring_o_sub1 = -1; // e.g. C5 @@ -236,29 +236,29 @@ const } ring_oxygen_atom = at; if (currentAtom.Bond(0) < currentAtom.Bond(1)) { - ring_o_sub0 = currentAtom.Bond(0); + ring_c_beg = currentAtom.Bond(0); ring_o_sub1 = currentAtom.Bond(1); } else { - ring_o_sub0 = currentAtom.Bond(1); + ring_c_beg = currentAtom.Bond(1); ring_o_sub1 = currentAtom.Bond(0); } } } } } - mprintf("\t Ring oxygen atom: %s-%s-%s\n", - topIn->ResNameNumAtomNameNum(ring_o_sub0).c_str(), + mprintf("\t Ring Cbeg-O-Cend atoms: %s-%s-%s\n", + topIn->ResNameNumAtomNameNum(ring_c_beg).c_str(), topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str(), topIn->ResNameNumAtomNameNum(ring_o_sub1).c_str()); - // Try to identify the ring atoms. Start from ring_o_sub0, get to ring_o_sub1 + // Try to identify the ring atoms. Start from ring_c_beg, get to ring_o_sub1 std::vector Visited( topIn->Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != ring_oxygen_atom) Visited[at] = false; std::vector ring_atoms( topIn->Res(rnum).NumAtoms(), -1 ); bool ring_complete = false; - FollowBonds( ring_o_sub0, *topIn, 0, ring_atoms, ring_o_sub1, Visited, ring_complete ); + FollowBonds( ring_c_beg, *topIn, 0, ring_atoms, ring_o_sub1, Visited, ring_complete ); mprintf("DEBUG: Ring %i:", (int)ring_complete); // Use Visited as a mask with ring atoms Visited.assign( topIn->Natom(), false ); @@ -278,9 +278,9 @@ const return 1; } - // Get the substituent of sub1 (e.g. C1) that is to a non-ring atom, non hydrogen - for ( Atom::bond_iterator bat = (*topIn)[ring_o_sub0].bondbegin(); - bat != (*topIn)[ring_o_sub0].bondend(); + // Get the substituent of first ring C (e.g. C1) that is to a non-ring atom, non hydrogen + for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); + bat != (*topIn)[ring_c_beg].bondend(); ++bat ) { if ( (*topIn)[*bat].Element() != Atom::HYDROGEN && @@ -298,9 +298,9 @@ const mprintf("\t C1 X substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); - // Get the substituent of sub0 (e.g. C1) that is part of the ring (e.g. C2) - for ( Atom::bond_iterator bat = (*topIn)[ring_o_sub0].bondbegin(); - bat != (*topIn)[ring_o_sub0].bondend(); + // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) + for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); + bat != (*topIn)[ring_c_beg].bondend(); ++bat ) { if ( (*topIn)[*bat].Element() == Atom::CARBON && From 040d674bfbceca852b33d3b775a25494b46e4ef8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 10:10:28 -0400 Subject: [PATCH 043/368] Change to ring_c_end to better describe --- src/Exec_PrepareForLeap.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8265251322..1895c1ce58 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -216,7 +216,7 @@ const int ring_c_beg = -1; // e.g. C1, "lowest" ring C, anomeric carbon int ring_o_sub0_C = -1; // e.g. C2, from sub0 to same residue int ring_o_sub0_X = -1; // from sub0 to non ring atom, non hydrogen - int ring_o_sub1 = -1; // e.g. C5 + int ring_c_end = -1; // e.g. C5, "highest" ring C, a chiral center int ring_o_sub1_C = -1; // e.g. C6, from sub1 to same residue for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { @@ -237,10 +237,10 @@ const ring_oxygen_atom = at; if (currentAtom.Bond(0) < currentAtom.Bond(1)) { ring_c_beg = currentAtom.Bond(0); - ring_o_sub1 = currentAtom.Bond(1); + ring_c_end = currentAtom.Bond(1); } else { ring_c_beg = currentAtom.Bond(1); - ring_o_sub1 = currentAtom.Bond(0); + ring_c_end = currentAtom.Bond(0); } } } @@ -249,16 +249,16 @@ const mprintf("\t Ring Cbeg-O-Cend atoms: %s-%s-%s\n", topIn->ResNameNumAtomNameNum(ring_c_beg).c_str(), topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str(), - topIn->ResNameNumAtomNameNum(ring_o_sub1).c_str()); + topIn->ResNameNumAtomNameNum(ring_c_end).c_str()); - // Try to identify the ring atoms. Start from ring_c_beg, get to ring_o_sub1 + // Try to identify the ring atoms. Start from ring_c_beg, get to ring_c_end std::vector Visited( topIn->Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != ring_oxygen_atom) Visited[at] = false; std::vector ring_atoms( topIn->Res(rnum).NumAtoms(), -1 ); bool ring_complete = false; - FollowBonds( ring_c_beg, *topIn, 0, ring_atoms, ring_o_sub1, Visited, ring_complete ); + FollowBonds( ring_c_beg, *topIn, 0, ring_atoms, ring_c_end, Visited, ring_complete ); mprintf("DEBUG: Ring %i:", (int)ring_complete); // Use Visited as a mask with ring atoms Visited.assign( topIn->Natom(), false ); @@ -274,7 +274,7 @@ const mprintf("\n"); mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); if (!ring_complete) { - mprinterr("Error: Sugar ring could not be identified.\n"); + mprinterr("Error: Sugar ring atoms could not be identified.\n"); return 1; } From 0685c0e82f89888bc6a3af4897d12d1e9e6e566e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 10:12:43 -0400 Subject: [PATCH 044/368] Improve error messages. --- src/Exec_PrepareForLeap.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1895c1ce58..2a8656de23 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -287,7 +287,7 @@ const !Visited[*bat] ) { if (ring_o_sub0_X != -1) { - mprinterr("Error: Two potential substituents for O-C1 substituent atom: %s and %s\n", + mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", topIn->ResNameNumAtomNameNum(*bat).c_str(), topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); return 1; @@ -308,8 +308,9 @@ const Visited[*bat] ) { if (ring_o_sub0_C != -1) { - mprinterr("Error: Two potential ring carbons bonded to O-C1 substituent atom: %i and %i\n", - *bat + 1, ring_o_sub0_C + 1); + mprinterr("Error: Two potential ring carbons bonded to anomeric carbon: %s and %s\n", + topIn->ResNameNumAtomNameNum(*bat).c_str(), + topIn->ResNameNumAtomNameNum(ring_o_sub0_C).c_str()); return 1; } ring_o_sub0_C = *bat; From 5fab1437bd0bddd69c2a72489e2a3f205e360731 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 10:19:01 -0400 Subject: [PATCH 045/368] If two potential substituents for the anomeric carbon, prefer the in-residue one --- src/Exec_PrepareForLeap.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2a8656de23..e17006877f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -287,12 +287,20 @@ const !Visited[*bat] ) { if (ring_o_sub0_X != -1) { - mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", - topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); - return 1; - } - ring_o_sub0_X = *bat; + // If there are two non-ring, non-hydrogen substituents, prioritize + // the one that is part of this residue. + bool bat_in_res = ((*topIn)[*bat].ResNum() == rnum); + bool X_in_res = ((*topIn)[ring_o_sub0_X].ResNum() == rnum); + if ( (bat_in_res && X_in_res) || (!bat_in_res && !X_in_res) ) { + mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", + topIn->ResNameNumAtomNameNum(*bat).c_str(), + topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); + return 1; + } else if (bat_in_res) { + ring_o_sub0_X = *bat; + } + } else + ring_o_sub0_X = *bat; } } mprintf("\t C1 X substituent: %s\n", From ae8c50a648ad74a2dd9239204f5ed328a4197114 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 10:22:22 -0400 Subject: [PATCH 046/368] Change names of things bonded to anomeric carbon --- src/Exec_PrepareForLeap.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e17006877f..ff2f23a56d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -214,8 +214,8 @@ const // in the same residue. int ring_oxygen_atom = -1; // e.g. O5 int ring_c_beg = -1; // e.g. C1, "lowest" ring C, anomeric carbon - int ring_o_sub0_C = -1; // e.g. C2, from sub0 to same residue - int ring_o_sub0_X = -1; // from sub0 to non ring atom, non hydrogen + int ring_c_beg_C = -1; // e.g. C2, next C in ring bonded to anomeric carbon + int ring_c_beg_X = -1; // from anomeric C to non ring atom, non hydrogen int ring_c_end = -1; // e.g. C5, "highest" ring C, a chiral center int ring_o_sub1_C = -1; // e.g. C6, from sub1 to same residue for (int at = res.FirstAtom(); at != res.LastAtom(); at++) @@ -286,25 +286,25 @@ const if ( (*topIn)[*bat].Element() != Atom::HYDROGEN && !Visited[*bat] ) { - if (ring_o_sub0_X != -1) { + if (ring_c_beg_X != -1) { // If there are two non-ring, non-hydrogen substituents, prioritize // the one that is part of this residue. bool bat_in_res = ((*topIn)[*bat].ResNum() == rnum); - bool X_in_res = ((*topIn)[ring_o_sub0_X].ResNum() == rnum); + bool X_in_res = ((*topIn)[ring_c_beg_X].ResNum() == rnum); if ( (bat_in_res && X_in_res) || (!bat_in_res && !X_in_res) ) { mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); + topIn->ResNameNumAtomNameNum(ring_c_beg_X).c_str()); return 1; } else if (bat_in_res) { - ring_o_sub0_X = *bat; + ring_c_beg_X = *bat; } } else - ring_o_sub0_X = *bat; + ring_c_beg_X = *bat; } } mprintf("\t C1 X substituent: %s\n", - topIn->ResNameNumAtomNameNum(ring_o_sub0_X).c_str()); + topIn->ResNameNumAtomNameNum(ring_c_beg_X).c_str()); // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); @@ -315,17 +315,17 @@ const (*topIn)[*bat].ResNum() == rnum && Visited[*bat] ) { - if (ring_o_sub0_C != -1) { + if (ring_c_beg_C != -1) { mprinterr("Error: Two potential ring carbons bonded to anomeric carbon: %s and %s\n", topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_o_sub0_C).c_str()); + topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); return 1; } - ring_o_sub0_C = *bat; + ring_c_beg_C = *bat; } } mprintf("\t C1 C substituent: %s\n", - topIn->ResNameNumAtomNameNum(ring_o_sub0_C).c_str()); + topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); From 69983c502691f580b5cfac85aef89c677e6eb823 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 10:33:27 -0400 Subject: [PATCH 047/368] Add ID of highest ring C substituent. Atom name change based on residue. --- src/Exec_PrepareForLeap.cpp | 39 +++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ff2f23a56d..69e7e6f73e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -199,15 +199,16 @@ const mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); // Change PDB names to Glycam ones - // TODO need to check glycam residue char? for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { - if ( (*topIn)[at].Name() == "C7" ) - ChangeAtomName(topIn->SetAtom(at), "C2N"); - else if ( (*topIn)[at].Name() == "O7" ) - ChangeAtomName(topIn->SetAtom(at), "O2N"); - else if ( (*topIn)[at].Name() == "C8" ) - ChangeAtomName(topIn->SetAtom(at), "CME"); + if (resChar == 'Y') { + if ( (*topIn)[at].Name() == "C7" ) + ChangeAtomName(topIn->SetAtom(at), "C2N"); + else if ( (*topIn)[at].Name() == "O7" ) + ChangeAtomName(topIn->SetAtom(at), "O2N"); + else if ( (*topIn)[at].Name() == "C8" ) + ChangeAtomName(topIn->SetAtom(at), "CME"); + } } // Try to identify the ring oxygen. Should be bonded to 2 carbons @@ -217,7 +218,7 @@ const int ring_c_beg_C = -1; // e.g. C2, next C in ring bonded to anomeric carbon int ring_c_beg_X = -1; // from anomeric C to non ring atom, non hydrogen int ring_c_end = -1; // e.g. C5, "highest" ring C, a chiral center - int ring_o_sub1_C = -1; // e.g. C6, from sub1 to same residue + int ring_c_end_X = -1; // e.g. C6, from c_end to non ring atom in same residue for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = (*topIn)[at]; @@ -324,10 +325,28 @@ const ring_c_beg_C = *bat; } } - mprintf("\t C1 C substituent: %s\n", + mprintf("\t C1 C ring substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); - + // Get substituent of last ring C (e.g. C5) that is not part of the ring (e.g. C6) + for ( Atom::bond_iterator bat = (*topIn)[ring_c_end].bondbegin(); + bat != (*topIn)[ring_c_end].bondend(); + ++bat ) + { + if ( (*topIn)[*bat].Element() == Atom::CARBON && + !Visited[*bat] ) + { + if (ring_c_end_X != -1) { + mprinterr("Error: Two potential substituents for ring end C: %s and %s\n", + topIn->ResNameNumAtomNameNum(*bat).c_str(), + topIn->ResNameNumAtomNameNum(ring_c_end_X).c_str()); + return 1; + } + ring_c_end_X = *bat; + } + } + mprintf("\t C5 non-ring substituent: %s\n", + topIn->ResNameNumAtomNameNum(ring_c_end_X).c_str()); // Try to identify the form /* The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the From 0e57e9f02f35d7811222b6f2518125a404378fdb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 10:39:08 -0400 Subject: [PATCH 048/368] Add some error checking --- src/Exec_PrepareForLeap.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 69e7e6f73e..f5e59bbaf8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -247,6 +247,18 @@ const } } } + if (ring_oxygen_atom == -1) { + mprinterr("Error: Ring oxygen atom could not be identified.\n"); + return 1; + } + if (ring_c_beg == -1) { + mprinterr("Error: Lowest ring C could not be identified.\n"); + return 1; + } + if (ring_c_end == -1) { + mprinterr("Error: Highest ring C could not be identified.\n"); + return 1; + } mprintf("\t Ring Cbeg-O-Cend atoms: %s-%s-%s\n", topIn->ResNameNumAtomNameNum(ring_c_beg).c_str(), topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str(), @@ -304,6 +316,10 @@ const ring_c_beg_X = *bat; } } + if (ring_c_beg_X == -1) { + mprinterr("Error: Ring C1 substituent could not be identified.\n"); + return 1; + } mprintf("\t C1 X substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_c_beg_X).c_str()); @@ -325,6 +341,10 @@ const ring_c_beg_C = *bat; } } + if (ring_c_beg_C == -1) { + mprinterr("Error: Next ring atom after C1 could not be identified.\n"); + return 1; + } mprintf("\t C1 C ring substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); @@ -345,6 +365,10 @@ const ring_c_end_X = *bat; } } + if (ring_c_end_X == -1) { + mprinterr("Error: Highest ring C substituent could not be identified.\n"); + return 1; + } mprintf("\t C5 non-ring substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_c_end_X).c_str()); From 5294f12d7fb1e88f83b5de4bc60cae152c83c70a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 11:01:07 -0400 Subject: [PATCH 049/368] Have alpha/beta use newly ID indices --- src/Exec_PrepareForLeap.cpp | 78 ++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f5e59bbaf8..7ac27e3ffd 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -218,6 +218,7 @@ const int ring_c_beg_C = -1; // e.g. C2, next C in ring bonded to anomeric carbon int ring_c_beg_X = -1; // from anomeric C to non ring atom, non hydrogen int ring_c_end = -1; // e.g. C5, "highest" ring C, a chiral center + int ring_c_end_C = -1; // e.g. C4, from c_end to previous C in ring int ring_c_end_X = -1; // e.g. C6, from c_end to non ring atom in same residue for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { @@ -292,6 +293,7 @@ const } // Get the substituent of first ring C (e.g. C1) that is to a non-ring atom, non hydrogen + // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); bat != (*topIn)[ring_c_beg].bondend(); ++bat ) @@ -314,17 +316,37 @@ const } } else ring_c_beg_X = *bat; + } else if ( (*topIn)[*bat].Element() == Atom::CARBON && + Visited[*bat] ) + { + if (ring_c_beg_C != -1) { + mprinterr("Error: Two potential ring carbons bonded to anomeric carbon: %s and %s\n", + topIn->ResNameNumAtomNameNum(*bat).c_str(), + topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); + return 1; + } + ring_c_beg_C = *bat; } } if (ring_c_beg_X == -1) { - mprinterr("Error: Ring C1 substituent could not be identified.\n"); - return 1; + // If the Cx (C1 substituent, usually a different residue) index is + // not found this usually means missing inter-residue bond. + // Alternatively, this could be an isolated sugar missing an -OH + // group, so make this non-fatal. + mprintf("Warning: Ring C1 substituent could not be identified.\n" + "Warning: If '%s' is from a topology without complete bonding information\n" + "Warning: (e.g. a PDB file), try loading the topology with the\n" + "Warning: 'searchtype grid' keywords instead.\n", topIn->c_str()); + mprintf("Warning: This can also happen for isolated sugars missing e.g. a -OH\n" + "Warning: group. In that case coordinates for the missing sugar atoms\n" + "Warning: may need to be generated.\n"); + return 0; } mprintf("\t C1 X substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_c_beg_X).c_str()); // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) - for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); +/* for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); bat != (*topIn)[ring_c_beg].bondend(); ++bat ) { @@ -340,7 +362,7 @@ const } ring_c_beg_C = *bat; } - } + }*/ if (ring_c_beg_C == -1) { mprinterr("Error: Next ring atom after C1 could not be identified.\n"); return 1; @@ -349,6 +371,7 @@ const topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); // Get substituent of last ring C (e.g. C5) that is not part of the ring (e.g. C6) + // Get substituent of last ring C (e.g. C5) that is part of the ring (e.g. C4) for ( Atom::bond_iterator bat = (*topIn)[ring_c_end].bondbegin(); bat != (*topIn)[ring_c_end].bondend(); ++bat ) @@ -363,6 +386,16 @@ const return 1; } ring_c_end_X = *bat; + } else if ( (*topIn)[*bat].Element() == Atom::CARBON && + Visited[*bat] ) + { + if (ring_c_end_C != -1) { + mprinterr("Error: Two potential ring atoms bonded to ring end C: %s and %s\n", + topIn->ResNameNumAtomNameNum(*bat).c_str(), + topIn->ResNameNumAtomNameNum(ring_c_end_C).c_str()); + return 1; + } + ring_c_end_C = *bat; } } if (ring_c_end_X == -1) { @@ -371,13 +404,36 @@ const } mprintf("\t C5 non-ring substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_c_end_X).c_str()); + if (ring_c_end_C == -1) { + mprinterr("Error: Highest ring C previous ring atom could not be identified.\n"); + return 1; + } + + // Try to identify alpha/beta. + // The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the + // opposite side of the OH on the anomeric carbon (C1 in Glycam), while + // in the beta form it is on the same side, i.e. + // Alpha - C1 and C5 substituents are on opposite sides. + // Beta - C1 and C5 substituents are on the same side. + std::string formStr; + // Determine alpha/beta + double t_c5 = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), + frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_end_X) ); + double t_c1 = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_beg), + frameIn.XYZ(ring_c_beg_C), frameIn.XYZ(ring_c_beg_X) ); + mprintf("\t A/B torsion of C5 substituent= %f deg\n", t_c5 * Constants::RADDEG); + mprintf("\t A/B torsion of C1 substituent= %f deg\n", t_c1 * Constants::RADDEG); + bool c5up = (t_c5 > 0); + bool c1up = (t_c1 > 0); + if (c1up == c5up) { + mprintf("\t Beta form\n"); + formStr = "B"; + } else { + mprintf("\t Alpha form\n"); + formStr = "A"; + } - // Try to identify the form - /* The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the - * opposite side of the OH on the anomeric carbon (C1 in Glycam), while - * in the beta form it is on the same side. - */ - std::string formStr; + int C6idx = -1; int C5idx = -1; int C1idx = -1; @@ -492,6 +548,7 @@ const "Warning: may need to be generated.\n"); return 0; } +/* // Determine alpha/beta // Alpha - C1 and C5 substituents are on opposite sides. // Beta - C1 and C5 substituents are on the same side. @@ -510,6 +567,7 @@ const mprintf("\t Alpha form\n"); formStr = "A"; } +*/ // Determine D/L // Check the chirality around the C5 atom. bool isDform = true; From 75d4dc847c32d3b1cbdd5a4887c88d4abec74751 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 11:09:55 -0400 Subject: [PATCH 050/368] Add D/L determination using new indices --- src/Exec_PrepareForLeap.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7ac27e3ffd..d525fd52a8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -421,8 +421,8 @@ const frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_end_X) ); double t_c1 = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_beg), frameIn.XYZ(ring_c_beg_C), frameIn.XYZ(ring_c_beg_X) ); - mprintf("\t A/B torsion of C5 substituent= %f deg\n", t_c5 * Constants::RADDEG); - mprintf("\t A/B torsion of C1 substituent= %f deg\n", t_c1 * Constants::RADDEG); + mprintf("\t A/B torsion around C5 = %f deg\n", t_c5 * Constants::RADDEG); + mprintf("\t A/B torsion around C1 = %f deg\n", t_c1 * Constants::RADDEG); bool c5up = (t_c5 > 0); bool c1up = (t_c1 > 0); if (c1up == c5up) { @@ -432,6 +432,19 @@ const mprintf("\t Alpha form\n"); formStr = "A"; } + // Determine D/L + // Check the chirality around the C5 atom. + bool isDform = true; + double torsion = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), + frameIn.XYZ(ring_c_end_X), frameIn.XYZ(ring_oxygen_atom) ); + mprintf("\t D/L Torsion around C5= %f deg\n", torsion * Constants::RADDEG); + if (torsion > 0) { + mprintf("\t D form\n"); + } else { + mprintf("\t L form\n"); + isDform = false; + } + int C6idx = -1; @@ -568,6 +581,8 @@ const formStr = "A"; } */ + +/* // Determine D/L // Check the chirality around the C5 atom. bool isDform = true; @@ -584,6 +599,7 @@ const mprintf("\t L form\n"); isDform = false; } +*/ // Determine linkage mprintf("\t Link atoms:"); for (std::set::const_iterator it = linkages.begin(); From 5896e09ce02cd0bbc7cfc467cd46a9aaf5847694 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 11:56:24 -0400 Subject: [PATCH 051/368] Clean up the linkage code. Need new linkage definitions for at least 'S' --- src/Exec_PrepareForLeap.cpp | 153 ++++-------------------------------- 1 file changed, 14 insertions(+), 139 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index d525fd52a8..a7807a8b2e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -66,8 +66,11 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag for (std::set::const_iterator it = linkages.begin(); it != linkages.end(); ++it) linkstr.append( it->Truncated() ); mprintf("\t linkstr= '%s'\n", linkstr.c_str()); -// switch (glycamChar) { -// case 'Y': + switch (glycamChar) { + case 'S': + if (linkstr == "C2") linkcode = "0"; + break; + default: if (linkstr == "C1") linkcode = "0"; else if (linkstr == "C1O2") linkcode = "2"; else if (linkstr == "C1O3") linkcode = "3"; @@ -84,13 +87,8 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag else if (linkstr == "C1O2O4O6") linkcode = "R"; else if (linkstr == "C1O3O4O6") linkcode = "Q"; else if (linkstr == "C1O2O3O4O6") linkcode = "P"; -// break; -// case 'M': -// if (linkstr == "C1O3O6") linkcode = "V"; -// break; -// default: -// mprintf("Warning: Unrecognized glycam residue char: %c\n", glycamChar); -// } + break; + } if (linkcode.empty()) mprintf("Warning: Could not determine link code.\n"); return linkcode; @@ -344,25 +342,6 @@ const } mprintf("\t C1 X substituent: %s\n", topIn->ResNameNumAtomNameNum(ring_c_beg_X).c_str()); - - // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) -/* for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); - bat != (*topIn)[ring_c_beg].bondend(); - ++bat ) - { - if ( (*topIn)[*bat].Element() == Atom::CARBON && - (*topIn)[*bat].ResNum() == rnum && - Visited[*bat] ) - { - if (ring_c_beg_C != -1) { - mprinterr("Error: Two potential ring carbons bonded to anomeric carbon: %s and %s\n", - topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); - return 1; - } - ring_c_beg_C = *bat; - } - }*/ if (ring_c_beg_C == -1) { mprinterr("Error: Next ring atom after C1 could not be identified.\n"); return 1; @@ -408,6 +387,8 @@ const mprinterr("Error: Highest ring C previous ring atom could not be identified.\n"); return 1; } + mprintf("\t C5 previous ring atom: %s\n", + topIn->ResNameNumAtomNameNum(ring_c_end_C).c_str()); // Try to identify alpha/beta. // The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the @@ -445,61 +426,14 @@ const isDform = false; } - - - int C6idx = -1; - int C5idx = -1; - int C1idx = -1; - int Cxidx = -1; // Non-H1, O5, C2 substituent of C1 - int C2idx = -1; - // Additional atoms for determining D vs L - int O5idx = -1; - int C4idx = -1; - // Use a set to store linkages so they are in alphabetical order for easier identification + // Identify linkages to other residues. + // Use a set to store linkages so they are in alphabetical order for easier identification. std::set linkages; // Bonds to non sugars to be removed since these will confuse tleap BondArray bondsToRemove; // Loop over sugar atoms - //AtomMask sugarCycle; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { - // Identify atoms for torsion - if ( (*topIn)[at].Name() == "C6" ) - C6idx = at; - else if ( (*topIn)[at].Name() == "C5" ) { - C5idx = at; - //sugarCycle.AddAtom( at ); - } else if ( (*topIn)[at].Name() == "O5" ) { - O5idx = at; - //sugarCycle.AddAtom( at ); - } else if ( (*topIn)[at].Name() == "C4" ) { - C4idx = at; - //sugarCycle.AddAtom( at ); - } else if ( (*topIn)[at].Name() == "C2") { - C2idx = at; - //sugarCycle.AddAtom( at ); - } else if ( (*topIn)[at].Name() == "C3") { - //sugarCycle.AddAtom( at ); - } else if ( (*topIn)[at].Name() == "C1" ) { - C1idx = at; - //sugarCycle.AddAtom( at ); - // Check substituent of C1 (non ring atom, non hydrogen) - for (Atom::bond_iterator bat = (*topIn)[at].bondbegin(); - bat != (*topIn)[at].bondend(); ++bat) - { - if ( (*topIn)[*bat].Element() != Atom::HYDROGEN && - (*topIn)[*bat].Name() != "O5" && - (*topIn)[*bat].Name() != "C2" ) - { - if (Cxidx != -1) { - mprintf("Warning: Multiple substituents for C1: %s %s\n", - *(*topIn)[*bat].Name(), *(*topIn)[Cxidx].Name()); - return 1; - } else - Cxidx = *bat; - } - } - } // Check for bonds to other residues for (Atom::bond_iterator bat = (*topIn)[at].bondbegin(); bat != (*topIn)[at].bondend(); ++bat) @@ -538,68 +472,7 @@ const } } // END loop over bonded atoms } // END loop over residue atoms - mprintf("\t C6= %i C5= %i C1= %i Cx= %i O5= %i C4= %i C2= %i\n", - C6idx+1, C5idx+1, C1idx+1, Cxidx+1, O5idx+1, C4idx+1, C2idx+1); - //sugarCycle.PrintMaskAtoms("\t Sugar cycle:"); - if (C6idx == -1) { mprintf("Warning: C6 index not found.\n"); return 1; } - if (C5idx == -1) { mprintf("Warning: C5 index not found.\n"); return 1; } - if (C1idx == -1) { mprintf("Warning: C1 index not found.\n"); return 1; } - if (O5idx == -1) { mprintf("Warning: O5 index not found.\n"); return 1; } - if (C4idx == -1) { mprintf("Warning: C4 index not found.\n"); return 1; } - if (C2idx == -1) { mprintf("Warning: C2 index not found.\n"); return 1; } - // If the Cx (C1 substituent, usually a different residue) index is - // not found this usually means missing inter-residue bond. - // Alternatively, this could be an isolated sugar missing an -OH - // group, so make this non-fatal. - if (Cxidx == -1) { - mprintf("Warning: Cx index not found.\n" - "Warning: If '%s' is from a topology without complete bonding information\n" - "Warning: (e.g. a PDB file), try loading the topology with the\n" - "Warning: 'searchtype grid' keywords instead.\n", topIn->c_str()); - mprintf("Warning: This can also happen for isolated sugars missing e.g. a -OH\n" - "Warning: group. In that case coordinates for the missing sugar\n" - "Warning: may need to be generated.\n"); - return 0; - } -/* - // Determine alpha/beta - // Alpha - C1 and C5 substituents are on opposite sides. - // Beta - C1 and C5 substituents are on the same side. - double t_c4c5o5c6 = Torsion( frameIn.XYZ(C4idx), frameIn.XYZ(C5idx), - frameIn.XYZ(O5idx), frameIn.XYZ(C6idx) ); - double t_o5c1c2cx = Torsion( frameIn.XYZ(O5idx), frameIn.XYZ(C1idx), - frameIn.XYZ(C2idx), frameIn.XYZ(Cxidx) ); - mprintf("\t A/B torsion of C5 substituent= %f deg\n", t_c4c5o5c6 * Constants::RADDEG); - mprintf("\t A/B torsion of C1 substituent= %f deg\n", t_o5c1c2cx * Constants::RADDEG); - bool c5up = (t_c4c5o5c6 > 0); - bool c1up = (t_o5c1c2cx > 0); - if (c1up == c5up) { - mprintf("\t Beta form\n"); - formStr = "B"; - } else { - mprintf("\t Alpha form\n"); - formStr = "A"; - } -*/ -/* - // Determine D/L - // Check the chirality around the C5 atom. - bool isDform = true; - // DEBUG - //frameIn.printAtomCoord(O5idx); - //frameIn.printAtomCoord(C4idx); - //frameIn.printAtomCoord(C6idx); - double torsion = Torsion( frameIn.XYZ(C4idx), frameIn.XYZ(C5idx), - frameIn.XYZ(C6idx), frameIn.XYZ(O5idx) ); - mprintf("\t D/L Torsion around C5= %f deg\n", torsion * Constants::RADDEG); - if (torsion > 0) { - mprintf("\t D form\n"); - } else { - mprintf("\t L form\n"); - isDform = false; - } -*/ // Determine linkage mprintf("\t Link atoms:"); for (std::set::const_iterator it = linkages.begin(); @@ -612,7 +485,9 @@ const mprinterr("Error: Unrecognized sugar linkage.\n"); return 1; } - // Modify residue char to indicate D form if necessary + // Modify residue char to indicate D form if necessary. + // We do this here and not above so as not to mess with the + // linkage determination. if (!isDform) resChar = tolower( resChar ); // Remove bonds to non-sugar From 05206a36e73b0cf3300e383655f79b360850a9f8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 12:24:42 -0400 Subject: [PATCH 052/368] Add name map for S --- src/Exec_PrepareForLeap.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a7807a8b2e..e7557022f3 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -206,6 +206,13 @@ const ChangeAtomName(topIn->SetAtom(at), "O2N"); else if ( (*topIn)[at].Name() == "C8" ) ChangeAtomName(topIn->SetAtom(at), "CME"); + } else if (resChar == 'S') { + if ( (*topIn)[at].Name() == "C10" ) + ChangeAtomName(topIn->SetAtom(at), "C5N"); + else if ( (*topIn)[at].Name() == "O10" ) + ChangeAtomName(topIn->SetAtom(at), "O5N"); + else if ( (*topIn)[at].Name() == "C11" ) + ChangeAtomName(topIn->SetAtom(at), "CME"); } } From d069667d6039f6ce087a456603953507128a40c1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 13:51:49 -0400 Subject: [PATCH 053/368] Do not allow more than 2 bonds to oxygen --- src/BondSearch.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/BondSearch.cpp b/src/BondSearch.cpp index 60fe897f11..0344f75035 100644 --- a/src/BondSearch.cpp +++ b/src/BondSearch.cpp @@ -322,9 +322,11 @@ int BondSearch_ByResidue( Topology& top, Frame const& frameIn, double offset, in for (int atom1 = startatom; atom1 != midatom; atom1++) { Atom::AtomicElementType a1Elt = top[atom1].Element(); if (a1Elt==Atom::HYDROGEN) continue; + if (a1Elt == Atom::OXYGEN && top[atom1].Nbonds() > 1) continue; for (int atom2 = midatom; atom2 != stopatom; atom2++) { Atom::AtomicElementType a2Elt = top[atom2].Element(); if (a2Elt==Atom::HYDROGEN) continue; + if (a2Elt == Atom::OXYGEN && top[atom2].Nbonds() > 1) continue; double D2 = DIST2_NoImage(frameIn.XYZ(atom1), frameIn.XYZ(atom2) ); double cutoff2 = Atom::GetBondLength(a1Elt, a2Elt) + offset; cutoff2 *= cutoff2; From d9aa4f56119c13fa5ae042497e8117928a415829 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 4 Aug 2021 14:55:52 -0400 Subject: [PATCH 054/368] Remove redundant torsion calc --- src/Exec_PrepareForLeap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e7557022f3..e543dd52a7 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -422,15 +422,15 @@ const } // Determine D/L // Check the chirality around the C5 atom. - bool isDform = true; - double torsion = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), + bool isDform = !c5up; + /*double torsion = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), frameIn.XYZ(ring_c_end_X), frameIn.XYZ(ring_oxygen_atom) ); - mprintf("\t D/L Torsion around C5= %f deg\n", torsion * Constants::RADDEG); - if (torsion > 0) { + mprintf("\t D/L Torsion around C5= %f deg\n", torsion * Constants::RADDEG);*/ + if (isDform) { mprintf("\t D form\n"); } else { mprintf("\t L form\n"); - isDform = false; + //isDform = false; } // Identify linkages to other residues. From f1b8a0bb94e1dbad8b0c240357616855b95fa2de Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 10:21:37 -0400 Subject: [PATCH 055/368] Move ring identification sooner --- src/Exec_PrepareForLeap.cpp | 107 ++++++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e543dd52a7..cb1e9c9a95 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -163,7 +163,8 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector 0 && atm == tgt_atom) { found = true; return; } @@ -216,16 +217,110 @@ const } } + // Try to identify the sugar ring. Potential starting atoms are oxygens + // bonded to two carbon atoms. + std::vector potentialRingStartAtoms; + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + { + Atom const& currentAtom = (*topIn)[at]; + if (currentAtom.Element() == Atom::OXYGEN) + { + if (currentAtom.Nbonds() == 2) { + if ( (*topIn)[currentAtom.Bond(0)].Element() == Atom::CARBON && + (*topIn)[currentAtom.Bond(0)].ResNum() == rnum && + (*topIn)[currentAtom.Bond(1)].Element() == Atom::CARBON && + (*topIn)[currentAtom.Bond(1)].ResNum() == rnum ) + { + potentialRingStartAtoms.push_back( at ); + } + } + } + } + // TODO handle case where multiple potential ring start atoms exist + if (potentialRingStartAtoms.empty()) { + mprinterr("Error: Ring oxygen could not be identified\n"); + return 1; + } else if (potentialRingStartAtoms.size() > 1) { + mprinterr("Error: Multiple potential ring start atoms:\n"); + for (std::vector::const_iterator it = potentialRingStartAtoms.begin(); + it != potentialRingStartAtoms.end(); + ++it) + mprinterr("Error: %s\n", topIn->ResNameNumAtomNameNum(*it).c_str()); + return 1; + } + + // Out of the potential ring start atoms, see which ones are actually + // part of a ring. Potential ring start atoms only have 2 bonds, + // each one to a carbon. + int n_ring_atoms = 0; + int ring_oxygen_atom = -1; // e.g. O5 + std::vector Visited; + Visited.reserve( topIn->Natom() ); + for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); + ringat != potentialRingStartAtoms.end(); + ++ringat) + { + Visited.assign( topIn->Natom(), true ); + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + if (at != *ringat) + Visited[at] = false; + std::vector ring_atoms( topIn->Res(rnum).NumAtoms(), -1 ); + bool ring_complete = false; + // Since we have already established that *ringat is an oxygen bonded + // to two carbons, just start at the first carbon to see if we can + // get to the second carbon. + FollowBonds((*topIn)[*ringat].Bond(0), *topIn, 0, ring_atoms, + (*topIn)[*ringat].Bond(1), Visited, ring_complete); + mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", + topIn->ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); + // TODO handle the case where multiple potential ring start atoms exist + if (ring_complete) { + ring_oxygen_atom = *ringat; + // Use Visited as a mask with ring atoms + Visited.assign( topIn->Natom(), false ); + Visited[ring_oxygen_atom] = true; + n_ring_atoms = 1; + mprintf(" :"); // DEBUG + for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) + { + mprintf(" %i", *it + 1); + if (*it == -1) break; + Visited[*it] = true; + ++n_ring_atoms; + } + mprintf("\n"); // DEBUG + } + } + mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); + if (n_ring_atoms == 0 || ring_oxygen_atom == -1) { + mprinterr("Error: Sugar ring atoms could not be identified.\n"); + return 1; + } + + + // Try to identify the ring oxygen. Should be bonded to 2 carbons // in the same residue. - int ring_oxygen_atom = -1; // e.g. O5 int ring_c_beg = -1; // e.g. C1, "lowest" ring C, anomeric carbon int ring_c_beg_C = -1; // e.g. C2, next C in ring bonded to anomeric carbon int ring_c_beg_X = -1; // from anomeric C to non ring atom, non hydrogen int ring_c_end = -1; // e.g. C5, "highest" ring C, a chiral center int ring_c_end_C = -1; // e.g. C4, from c_end to previous C in ring int ring_c_end_X = -1; // e.g. C6, from c_end to non ring atom in same residue - for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + + // TODO this is temporary + if (ring_oxygen_atom != -1) { + Atom const& currentAtom = (*topIn)[ring_oxygen_atom]; + if (currentAtom.Bond(0) < currentAtom.Bond(1)) { + ring_c_beg = currentAtom.Bond(0); + ring_c_end = currentAtom.Bond(1); + } else { + ring_c_beg = currentAtom.Bond(1); + ring_c_end = currentAtom.Bond(0); + } + } + +/* for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = (*topIn)[at]; if (currentAtom.Element() == Atom::OXYGEN) @@ -252,7 +347,7 @@ const } } } - } + }*/ if (ring_oxygen_atom == -1) { mprinterr("Error: Ring oxygen atom could not be identified.\n"); return 1; @@ -271,7 +366,7 @@ const topIn->ResNameNumAtomNameNum(ring_c_end).c_str()); // Try to identify the ring atoms. Start from ring_c_beg, get to ring_c_end - std::vector Visited( topIn->Natom(), true ); +/* std::vector Visited( topIn->Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != ring_oxygen_atom) Visited[at] = false; @@ -295,7 +390,7 @@ const if (!ring_complete) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); return 1; - } + }*/ // Get the substituent of first ring C (e.g. C1) that is to a non-ring atom, non hydrogen // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) From 2ebc8caf006f3b66e34f74cd23f1f1db10b09f60 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 10:23:24 -0400 Subject: [PATCH 056/368] Only need to follow carbons in sugar ring --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index cb1e9c9a95..926339f660 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -171,7 +171,7 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector Date: Thu, 5 Aug 2021 10:46:59 -0400 Subject: [PATCH 057/368] Identify anomeric carbon. Start identifying chiral centers --- src/Exec_PrepareForLeap.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 926339f660..bbb4deba3d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -218,13 +218,14 @@ const } // Try to identify the sugar ring. Potential starting atoms are oxygens - // bonded to two carbon atoms. + // bonded to two carbon atoms. Also save potential stereocenter indices + // (i.e. carbons bonded to 4 other atoms). std::vector potentialRingStartAtoms; + std::vector carbon_indices; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = (*topIn)[at]; - if (currentAtom.Element() == Atom::OXYGEN) - { + if (currentAtom.Element() == Atom::OXYGEN) { if (currentAtom.Nbonds() == 2) { if ( (*topIn)[currentAtom.Bond(0)].Element() == Atom::CARBON && (*topIn)[currentAtom.Bond(0)].ResNum() == rnum && @@ -234,6 +235,11 @@ const potentialRingStartAtoms.push_back( at ); } } + } else if (currentAtom.Element() == Atom::CARBON) { + if (currentAtom.Nbonds() == 4) { + carbon_indices.push_back( at ); + mprintf("\t Potential stereocenter: %s\n", topIn->ResNameNumAtomNameNum(at).c_str()); + } } } // TODO handle case where multiple potential ring start atoms exist @@ -249,6 +255,10 @@ const return 1; } + // The anomeric carbon is the carbon that was part of the carbonyl group + // in the straight chain. It is therefore typically the carbon bonded + // to the ring oxygen with the lower index. + int anomeric_atom = -1; // e.g. C1 // Out of the potential ring start atoms, see which ones are actually // part of a ring. Potential ring start atoms only have 2 bonds, // each one to a carbon. @@ -276,7 +286,8 @@ const // TODO handle the case where multiple potential ring start atoms exist if (ring_complete) { ring_oxygen_atom = *ringat; - // Use Visited as a mask with ring atoms + anomeric_atom = (*topIn)[*ringat].Bond(0); + // Use Visited as a mask with ring atoms set to true Visited.assign( topIn->Natom(), false ); Visited[ring_oxygen_atom] = true; n_ring_atoms = 1; @@ -296,7 +307,8 @@ const mprinterr("Error: Sugar ring atoms could not be identified.\n"); return 1; } - + mprintf("\t Ring oxygen : %s\n", topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); + mprintf("\t Anomeric carbon : %s\n", topIn->ResNameNumAtomNameNum(anomeric_atom).c_str()); // Try to identify the ring oxygen. Should be bonded to 2 carbons From dc5c5f5abd8316fd572dc0276e96f202977c109a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 11:24:32 -0400 Subject: [PATCH 058/368] Only look at bonds to heavy atoms since structure may not have hydrogens --- src/Exec_PrepareForLeap.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index bbb4deba3d..3b8def34f7 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -219,7 +219,9 @@ const // Try to identify the sugar ring. Potential starting atoms are oxygens // bonded to two carbon atoms. Also save potential stereocenter indices - // (i.e. carbons bonded to 4 other atoms). + // (i.e. carbons bonded to 4 other atoms). Since input structure may not + // have any hydrogens, count bonds to heavy atoms only, must make at + // least 3 bonds (otherwise e.g. likely 2 hydrogens). std::vector potentialRingStartAtoms; std::vector carbon_indices; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) @@ -236,7 +238,12 @@ const } } } else if (currentAtom.Element() == Atom::CARBON) { - if (currentAtom.Nbonds() == 4) { + // Count number of bonds to heavy atoms. + int n_heavyat_bonds = 0; + for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) + if ( (*topIn)[*bat].Element() != Atom::HYDROGEN ) + ++n_heavyat_bonds; + if (n_heavyat_bonds == 3) { carbon_indices.push_back( at ); mprintf("\t Potential stereocenter: %s\n", topIn->ResNameNumAtomNameNum(at).c_str()); } @@ -311,6 +318,10 @@ const mprintf("\t Anomeric carbon : %s\n", topIn->ResNameNumAtomNameNum(anomeric_atom).c_str()); + // The anomeric reference carbon is the stereocenter farthest from the + // anomeric carbon in the ring. + + // Try to identify the ring oxygen. Should be bonded to 2 carbons // in the same residue. int ring_c_beg = -1; // e.g. C1, "lowest" ring C, anomeric carbon From d76f517e0b7d761a531fc813be1acf3aa4ff3ddf Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 12:50:28 -0400 Subject: [PATCH 059/368] Add new code for calculating torsions around anomeric and anomeric reference carbons. --- src/Exec_PrepareForLeap.cpp | 195 ++++++++++++++++++++++++++++++------ src/Exec_PrepareForLeap.h | 2 + 2 files changed, 169 insertions(+), 28 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3b8def34f7..254c20200a 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -155,6 +155,128 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) return 0; } +/** Determine torsion around anomeric reference carbon. */ +int Exec_PrepareForLeap::CalcAnomericRefTorsion(double& torsion, + int ano_ref_atom, int ring_oxygen_atom, + int rnum, + Topology const& topIn, Frame const& frameIn, + std::vector const& IsRingAtom) +const +{ + int ano_ref_atom_Y = -1; + int ano_ref_atom_C = -1; + // Get substituent of last ring C (e.g. C5) that is not part of the ring (e.g. C6) + // Get substituent of last ring C (e.g. C5) that is part of the ring (e.g. C4) + for ( Atom::bond_iterator bat = topIn[ano_ref_atom].bondbegin(); + bat != topIn[ano_ref_atom].bondend(); + ++bat ) + { + if ( topIn[*bat].Element() == Atom::CARBON && !IsRingAtom[*bat] ) { + if (ano_ref_atom_Y != -1) { + mprinterr("Error: Two potential substituents for anomeric ref: %s and %s\n", + topIn.ResNameNumAtomNameNum(*bat).c_str(), + topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); + return 1; + } + ano_ref_atom_Y = *bat; + } else if ( topIn[*bat].Element() == Atom::CARBON && IsRingAtom[*bat] ) { + if (ano_ref_atom_C != -1) { + mprinterr("Error: Two potential ring atoms bonded to anomeric ref: %s and %s\n", + topIn.ResNameNumAtomNameNum(*bat).c_str(), + topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); + return 1; + } + ano_ref_atom_C = *bat; + } + } + if (ano_ref_atom_Y == -1) { + mprinterr("Error: Anomeric reference Y substituent could not be identified.\n"); + return 1; + } + mprintf("\t Anomeric reference substituent: %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); + if (ano_ref_atom_C == -1) { + mprinterr("Error: Anomeric reference ring C previous ring atom could not be identified.\n"); + return 1; + } + mprintf("\t Anomeric reference previous ring atom: %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); + torsion = Torsion( frameIn.XYZ(ano_ref_atom_C), frameIn.XYZ(ano_ref_atom), + frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ano_ref_atom_Y) ); + mprintf("\t Anomeric reference torsion: %f\n", torsion * Constants::RADDEG); + return 0; +} + +/** Determine torsion around the anomeric carbon. */ +int Exec_PrepareForLeap::CalcAnomericTorsion(double& torsion, + int ring_oxygen_atom, int anomeric_atom, + int rnum, + Topology const& topIn, Frame const& frameIn, + std::vector const& IsRingAtom) +const +{ + int anomeric_atom_X = -1; + int anomeric_atom_C = -1; + // Get the substituent of first ring C (e.g. C1) that is to a non-ring atom, non hydrogen + // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) + for ( Atom::bond_iterator bat = topIn[anomeric_atom].bondbegin(); + bat != topIn[anomeric_atom].bondend(); + ++bat ) + { + if ( topIn[*bat].Element() != Atom::HYDROGEN && !IsRingAtom[*bat] ) { + if (anomeric_atom_X != -1) { + // If there are two non-ring, non-hydrogen substituents, prioritize + // the one that is part of this residue. + bool bat_in_res = (topIn[*bat].ResNum() == rnum); + bool X_in_res = (topIn[anomeric_atom_X].ResNum() == rnum); + if ( (bat_in_res && X_in_res) || (!bat_in_res && !X_in_res) ) { + mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", + topIn.ResNameNumAtomNameNum(*bat).c_str(), + topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); + return 1; + } else if (bat_in_res) { + anomeric_atom_X = *bat; + } + } else + anomeric_atom_X = *bat; + } else if ( topIn[*bat].Element() == Atom::CARBON && IsRingAtom[*bat] ) { + if (anomeric_atom_C != -1) { + mprinterr("Error: Two potential ring carbons bonded to anomeric carbon: %s and %s\n", + topIn.ResNameNumAtomNameNum(*bat).c_str(), + topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); + return 1; + } + anomeric_atom_C = *bat; + } + } + if (anomeric_atom_X == -1) { + // If the Cx (C1 substituent, usually a different residue) index is + // not found this usually means missing inter-residue bond. + // Alternatively, this could be an isolated sugar missing an -OH + // group, so make this non-fatal. + mprintf("Warning: Ring anomeric substituent could not be identified.\n" + "Warning: If '%s' is from a topology without complete bonding information\n" + "Warning: (e.g. a PDB file), try loading the topology with the\n" + "Warning: 'searchtype grid' keywords instead.\n", topIn.c_str()); + mprintf("Warning: This can also happen for isolated sugars missing e.g. a -OH\n" + "Warning: group. In that case coordinates for the missing sugar atoms\n" + "Warning: may need to be generated.\n"); + return 0; + } + mprintf("\t Anomeric X substituent: %s\n", + topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); + if (anomeric_atom_C == -1) { + mprinterr("Error: Next ring atom after anomeric C could not be identified.\n"); + return 1; + } + mprintf("\t Anomeric C ring substituent: %s\n", + topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); + torsion = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(anomeric_atom), + frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(anomeric_atom_X) ); + mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); + return 0; +} + /// Recursive function for following bonds of an atom to a target atom static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector& ring_atoms, int tgt_atom, std::vector& Visited, bool& found) { @@ -266,6 +388,9 @@ const // in the straight chain. It is therefore typically the carbon bonded // to the ring oxygen with the lower index. int anomeric_atom = -1; // e.g. C1 + // The anomeric reference carbon is the stereocenter farthest from the + // anomeric carbon in the ring. + int ano_ref_atom = -1; // e.g. C5 // Out of the potential ring start atoms, see which ones are actually // part of a ring. Potential ring start atoms only have 2 bonds, // each one to a carbon. @@ -286,14 +411,23 @@ const // Since we have already established that *ringat is an oxygen bonded // to two carbons, just start at the first carbon to see if we can // get to the second carbon. - FollowBonds((*topIn)[*ringat].Bond(0), *topIn, 0, ring_atoms, - (*topIn)[*ringat].Bond(1), Visited, ring_complete); + int c_beg, c_end; + if ((*topIn)[*ringat].Bond(0) < (*topIn)[*ringat].Bond(1)) { + c_beg = (*topIn)[*ringat].Bond(0); + c_end = (*topIn)[*ringat].Bond(1); + } else { + c_beg = (*topIn)[*ringat].Bond(1); + c_end = (*topIn)[*ringat].Bond(0); + } + FollowBonds(c_beg, *topIn, 0, ring_atoms, + c_end, Visited, ring_complete); mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", topIn->ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); // TODO handle the case where multiple potential ring start atoms exist if (ring_complete) { ring_oxygen_atom = *ringat; - anomeric_atom = (*topIn)[*ringat].Bond(0); + anomeric_atom = c_beg; + ano_ref_atom = c_end; // Use Visited as a mask with ring atoms set to true Visited.assign( topIn->Natom(), false ); Visited[ring_oxygen_atom] = true; @@ -314,14 +448,27 @@ const mprinterr("Error: Sugar ring atoms could not be identified.\n"); return 1; } - mprintf("\t Ring oxygen : %s\n", topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - mprintf("\t Anomeric carbon : %s\n", topIn->ResNameNumAtomNameNum(anomeric_atom).c_str()); + mprintf("\t Ring oxygen : %s\n", topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); + mprintf("\t Anomeric carbon : %s\n", topIn->ResNameNumAtomNameNum(anomeric_atom).c_str()); + mprintf("\t Anomeric ref carbon : %s\n", topIn->ResNameNumAtomNameNum(ano_ref_atom).c_str()); + double t_c1 = 0; + double t_c5 = 0; - // The anomeric reference carbon is the stereocenter farthest from the - // anomeric carbon in the ring. + // Calculate torsion around anomeric carbon: + // ring O - anomeric C - ring C - X, where X is anomeric C substituent + if (CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, *topIn, frameIn, Visited)) + return 1; + + // Calculate torsion around anomeric reference: + // ring C - anomeric ref - ring O - Y, where Y is anomeric ref substituent + if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, rnum, *topIn, frameIn, Visited)) + return 1; + // Find the rest of the carbons in the chain. Start from final ring carbon + +/* // Try to identify the ring oxygen. Should be bonded to 2 carbons // in the same residue. int ring_c_beg = -1; // e.g. C1, "lowest" ring C, anomeric carbon @@ -332,18 +479,10 @@ const int ring_c_end_X = -1; // e.g. C6, from c_end to non ring atom in same residue // TODO this is temporary - if (ring_oxygen_atom != -1) { - Atom const& currentAtom = (*topIn)[ring_oxygen_atom]; - if (currentAtom.Bond(0) < currentAtom.Bond(1)) { - ring_c_beg = currentAtom.Bond(0); - ring_c_end = currentAtom.Bond(1); - } else { - ring_c_beg = currentAtom.Bond(1); - ring_c_end = currentAtom.Bond(0); - } - } + ring_c_beg = anomeric_atom; + ring_c_end = ano_ref_atom; -/* for (int at = res.FirstAtom(); at != res.LastAtom(); at++) +/ * for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = (*topIn)[at]; if (currentAtom.Element() == Atom::OXYGEN) @@ -370,7 +509,7 @@ const } } } - }*/ + }* / if (ring_oxygen_atom == -1) { mprinterr("Error: Ring oxygen atom could not be identified.\n"); return 1; @@ -389,7 +528,7 @@ const topIn->ResNameNumAtomNameNum(ring_c_end).c_str()); // Try to identify the ring atoms. Start from ring_c_beg, get to ring_c_end -/* std::vector Visited( topIn->Natom(), true ); +/ * std::vector Visited( topIn->Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != ring_oxygen_atom) Visited[at] = false; @@ -413,7 +552,7 @@ const if (!ring_complete) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); return 1; - }*/ + }* / // Get the substituent of first ring C (e.g. C1) that is to a non-ring atom, non hydrogen // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) @@ -514,7 +653,7 @@ const } mprintf("\t C5 previous ring atom: %s\n", topIn->ResNameNumAtomNameNum(ring_c_end_C).c_str()); - +*/ // Try to identify alpha/beta. // The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the // opposite side of the OH on the anomeric carbon (C1 in Glycam), while @@ -523,12 +662,12 @@ const // Beta - C1 and C5 substituents are on the same side. std::string formStr; // Determine alpha/beta - double t_c5 = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), - frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_end_X) ); - double t_c1 = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_beg), - frameIn.XYZ(ring_c_beg_C), frameIn.XYZ(ring_c_beg_X) ); - mprintf("\t A/B torsion around C5 = %f deg\n", t_c5 * Constants::RADDEG); - mprintf("\t A/B torsion around C1 = %f deg\n", t_c1 * Constants::RADDEG); +// double t_c5 = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), +// frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_end_X) ); +// double t_c1 = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_beg), +// frameIn.XYZ(ring_c_beg_C), frameIn.XYZ(ring_c_beg_X) ); + //mprintf("\t A/B torsion around C5 = %f deg\n", t_c5 * Constants::RADDEG); + //mprintf("\t A/B torsion around C1 = %f deg\n", t_c1 * Constants::RADDEG); bool c5up = (t_c5 > 0); bool c1up = (t_c1 > 0); if (c1up == c5up) { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index d21539fa94..29b4f943b2 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -21,6 +21,8 @@ class Exec_PrepareForLeap : public Exec { int LoadGlycamPdbResMap(std::string const&); void LeapBond(int,int,Topology const&, CpptrajFile*) const; + int CalcAnomericRefTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; + int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; int PrepareSugars(AtomMask&, DataSet_Coords&, Frame const&, CpptrajFile*) const; int FindTerByBonds(Topology*, CharMask const&) const; From f015b8a90f15d21f4edb3e20b72f7945fbd91934 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 13:00:32 -0400 Subject: [PATCH 060/368] Clean up the output a bit. --- src/Exec_PrepareForLeap.cpp | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 254c20200a..ef730dfc2c 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -189,21 +189,23 @@ const ano_ref_atom_C = *bat; } } + mprintf("\t Anomeric ref carbon : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom).c_str()); if (ano_ref_atom_Y == -1) { mprinterr("Error: Anomeric reference Y substituent could not be identified.\n"); return 1; } - mprintf("\t Anomeric reference substituent: %s\n", + mprintf("\t Anomeric reference substituent : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); if (ano_ref_atom_C == -1) { mprinterr("Error: Anomeric reference ring C previous ring atom could not be identified.\n"); return 1; } - mprintf("\t Anomeric reference previous ring atom: %s\n", + mprintf("\t Anomeric reference previous ring atom : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); torsion = Torsion( frameIn.XYZ(ano_ref_atom_C), frameIn.XYZ(ano_ref_atom), frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ano_ref_atom_Y) ); - mprintf("\t Anomeric reference torsion: %f\n", torsion * Constants::RADDEG); + mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); return 0; } @@ -249,6 +251,7 @@ const anomeric_atom_C = *bat; } } + mprintf("\t Anomeric carbon : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom).c_str()); if (anomeric_atom_X == -1) { // If the Cx (C1 substituent, usually a different residue) index is // not found this usually means missing inter-residue bond. @@ -263,17 +266,17 @@ const "Warning: may need to be generated.\n"); return 0; } - mprintf("\t Anomeric X substituent: %s\n", + mprintf("\t Anomeric X substituent : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); if (anomeric_atom_C == -1) { mprinterr("Error: Next ring atom after anomeric C could not be identified.\n"); return 1; } - mprintf("\t Anomeric C ring substituent: %s\n", + mprintf("\t Anomeric C ring substituent : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); torsion = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(anomeric_atom), frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(anomeric_atom_X) ); - mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); + mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); return 0; } @@ -396,13 +399,13 @@ const // each one to a carbon. int n_ring_atoms = 0; int ring_oxygen_atom = -1; // e.g. O5 - std::vector Visited; - Visited.reserve( topIn->Natom() ); + std::vector IsRingAtom; + //Visited.reserve( topIn->Natom() ); for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); ++ringat) { - Visited.assign( topIn->Natom(), true ); + std::vector Visited( topIn->Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != *ringat) Visited[at] = false; @@ -428,16 +431,16 @@ const ring_oxygen_atom = *ringat; anomeric_atom = c_beg; ano_ref_atom = c_end; - // Use Visited as a mask with ring atoms set to true - Visited.assign( topIn->Natom(), false ); - Visited[ring_oxygen_atom] = true; + // Use IsRingAtom as a mask with ring atoms set to true + IsRingAtom.assign( topIn->Natom(), false ); + IsRingAtom[ring_oxygen_atom] = true; n_ring_atoms = 1; mprintf(" :"); // DEBUG for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { mprintf(" %i", *it + 1); if (*it == -1) break; - Visited[*it] = true; + IsRingAtom[*it] = true; ++n_ring_atoms; } mprintf("\n"); // DEBUG @@ -449,23 +452,22 @@ const return 1; } mprintf("\t Ring oxygen : %s\n", topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - mprintf("\t Anomeric carbon : %s\n", topIn->ResNameNumAtomNameNum(anomeric_atom).c_str()); - mprintf("\t Anomeric ref carbon : %s\n", topIn->ResNameNumAtomNameNum(ano_ref_atom).c_str()); double t_c1 = 0; double t_c5 = 0; // Calculate torsion around anomeric carbon: // ring O - anomeric C - ring C - X, where X is anomeric C substituent - if (CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, *topIn, frameIn, Visited)) + if (CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, *topIn, frameIn, IsRingAtom)) return 1; // Calculate torsion around anomeric reference: // ring C - anomeric ref - ring O - Y, where Y is anomeric ref substituent - if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, rnum, *topIn, frameIn, Visited)) + if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, rnum, *topIn, frameIn, IsRingAtom)) return 1; // Find the rest of the carbons in the chain. Start from final ring carbon + std::vector remainingChainCarbons; /* From 3e6d999599fc69866113fa37dbb893cc794f2633 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 13:30:20 -0400 Subject: [PATCH 061/368] ID highest stereocenter in the carbon chain --- src/Exec_PrepareForLeap.cpp | 90 +++++++++++++++++++++++++++++++------ src/Exec_PrepareForLeap.h | 3 ++ 2 files changed, 79 insertions(+), 14 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ef730dfc2c..c9129209e2 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -264,7 +264,7 @@ const mprintf("Warning: This can also happen for isolated sugars missing e.g. a -OH\n" "Warning: group. In that case coordinates for the missing sugar atoms\n" "Warning: may need to be generated.\n"); - return 0; + return -1; } mprintf("\t Anomeric X substituent : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); @@ -280,6 +280,43 @@ const return 0; } +/// Recursive function for finding and recording all carbons +static void Find_Carbons(int atm, Topology const& topIn, std::vector& Visited, + std::vector& remainingChainCarbons) +{ + remainingChainCarbons.push_back( atm ); + Visited[atm] = true; + // Follow all carbons bonded to this atom + for (Atom::bond_iterator bat = topIn[atm].bondbegin(); bat != topIn[atm].bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::CARBON && !Visited[*bat]) { + Find_Carbons( *bat, topIn, Visited, remainingChainCarbons ); + } + } +} + +/** Find remaining non-ring carbons in chain starting from ring end atom. */ +int Exec_PrepareForLeap::FindRemainingChainCarbons(std::vector& remainingChainCarbons, + int start_c, Topology const& topIn, int rnum, + std::vector const& IsRingAtom) +const +{ + Residue const& res = topIn.Res(rnum); + std::vector Visited(topIn.Natom(), true); + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + if (!IsRingAtom[at]) + Visited[at] = false; + + for (Atom::bond_iterator bat = topIn[start_c].bondbegin(); + bat != topIn[start_c].bondend(); + ++bat) + { + if ( !Visited[*bat] && topIn[*bat].Element() == Atom::CARBON ) + Find_Carbons(*bat, topIn, Visited, remainingChainCarbons); + } + return 0; +} + /// Recursive function for following bonds of an atom to a target atom static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector& ring_atoms, int tgt_atom, std::vector& Visited, bool& found) { @@ -348,7 +385,6 @@ const // have any hydrogens, count bonds to heavy atoms only, must make at // least 3 bonds (otherwise e.g. likely 2 hydrogens). std::vector potentialRingStartAtoms; - std::vector carbon_indices; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = (*topIn)[at]; @@ -362,16 +398,6 @@ const potentialRingStartAtoms.push_back( at ); } } - } else if (currentAtom.Element() == Atom::CARBON) { - // Count number of bonds to heavy atoms. - int n_heavyat_bonds = 0; - for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) - if ( (*topIn)[*bat].Element() != Atom::HYDROGEN ) - ++n_heavyat_bonds; - if (n_heavyat_bonds == 3) { - carbon_indices.push_back( at ); - mprintf("\t Potential stereocenter: %s\n", topIn->ResNameNumAtomNameNum(at).c_str()); - } } } // TODO handle case where multiple potential ring start atoms exist @@ -458,16 +484,52 @@ const // Calculate torsion around anomeric carbon: // ring O - anomeric C - ring C - X, where X is anomeric C substituent - if (CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, *topIn, frameIn, IsRingAtom)) + int ret = CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, *topIn, frameIn, IsRingAtom); + if (ret < 0) { + // This means C1 X substituent missing; non-fatal. + return 0; + } else if (ret > 0) { + // Error return 1; + } // Calculate torsion around anomeric reference: // ring C - anomeric ref - ring O - Y, where Y is anomeric ref substituent if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, rnum, *topIn, frameIn, IsRingAtom)) return 1; - // Find the rest of the carbons in the chain. Start from final ring carbon + // Find the rest of the carbons in the chain in order to find the + // stereocenter with the highest index. Start from final ring carbon. + int highest_stereocenter = -1; std::vector remainingChainCarbons; + if (FindRemainingChainCarbons(remainingChainCarbons, ano_ref_atom, *topIn, rnum, IsRingAtom)) + return 1; + mprintf("\t Remaining chain carbons:\n"); + for (std::vector::const_iterator it = remainingChainCarbons.begin(); + it != remainingChainCarbons.end(); + ++it) + { + mprintf("\t\t%s", topIn->ResNameNumAtomNameNum(*it).c_str()); + // Count number of bonds to heavy atoms. + Atom const& currentAtom = (*topIn)[*it]; + int n_heavyat_bonds = 0; + for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) + { + if ( (*topIn)[*bat].Element() != Atom::HYDROGEN ) + ++n_heavyat_bonds; + } + if (n_heavyat_bonds == 3) { + mprintf(" Potential stereocenter"); + if (*it > highest_stereocenter) // Is absolute index the best way to do this? + highest_stereocenter = *it; + } + mprintf("\n"); + } + if (highest_stereocenter == -1) { + // This means that ano_ref_atom is the highest stereocenter. + highest_stereocenter = ano_ref_atom; + } + mprintf("\t Highest stereocenter: %s\n", topIn->ResNameNumAtomNameNum(highest_stereocenter).c_str()); /* diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 29b4f943b2..ac125b83c4 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -3,6 +3,7 @@ #include "Exec.h" #include #include +#include class AtomMask; class CharMask; class CpptrajFile; @@ -23,6 +24,8 @@ class Exec_PrepareForLeap : public Exec { void LeapBond(int,int,Topology const&, CpptrajFile*) const; int CalcAnomericRefTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; + int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, + std::vector const&) const; int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; int PrepareSugars(AtomMask&, DataSet_Coords&, Frame const&, CpptrajFile*) const; int FindTerByBonds(Topology*, CharMask const&) const; From abfb56a0d74a0b0cd1f0f5e3425413db5162e25d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 13:50:47 -0400 Subject: [PATCH 062/368] Flip torsion definition so positive is "up" --- src/Exec_PrepareForLeap.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index c9129209e2..0c77b4d4c4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -204,7 +204,7 @@ const mprintf("\t Anomeric reference previous ring atom : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); torsion = Torsion( frameIn.XYZ(ano_ref_atom_C), frameIn.XYZ(ano_ref_atom), - frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ano_ref_atom_Y) ); + frameIn.XYZ(ano_ref_atom_Y), frameIn.XYZ(ring_oxygen_atom) ); mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); return 0; } @@ -274,8 +274,8 @@ const } mprintf("\t Anomeric C ring substituent : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); - torsion = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(anomeric_atom), - frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(anomeric_atom_X) ); + torsion = Torsion( frameIn.XYZ(anomeric_atom_X), frameIn.XYZ(anomeric_atom), + frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(ring_oxygen_atom) ); mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); return 0; } @@ -483,7 +483,6 @@ const double t_c5 = 0; // Calculate torsion around anomeric carbon: - // ring O - anomeric C - ring C - X, where X is anomeric C substituent int ret = CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, *topIn, frameIn, IsRingAtom); if (ret < 0) { // This means C1 X substituent missing; non-fatal. @@ -494,7 +493,6 @@ const } // Calculate torsion around anomeric reference: - // ring C - anomeric ref - ring O - Y, where Y is anomeric ref substituent if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, rnum, *topIn, frameIn, IsRingAtom)) return 1; @@ -743,7 +741,7 @@ const } // Determine D/L // Check the chirality around the C5 atom. - bool isDform = !c5up; + bool isDform = c5up; /*double torsion = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), frameIn.XYZ(ring_c_end_X), frameIn.XYZ(ring_oxygen_atom) ); mprintf("\t D/L Torsion around C5= %f deg\n", torsion * Constants::RADDEG);*/ From f04e88af81f41b35a4f07c928f177fc03e17e590 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 13:54:35 -0400 Subject: [PATCH 063/368] Anomeric ref torsion does not need rnum --- src/Exec_PrepareForLeap.cpp | 3 +-- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0c77b4d4c4..31c2a9b17d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -158,7 +158,6 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) /** Determine torsion around anomeric reference carbon. */ int Exec_PrepareForLeap::CalcAnomericRefTorsion(double& torsion, int ano_ref_atom, int ring_oxygen_atom, - int rnum, Topology const& topIn, Frame const& frameIn, std::vector const& IsRingAtom) const @@ -493,7 +492,7 @@ const } // Calculate torsion around anomeric reference: - if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, rnum, *topIn, frameIn, IsRingAtom)) + if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, *topIn, frameIn, IsRingAtom)) return 1; // Find the rest of the carbons in the chain in order to find the diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index ac125b83c4..04f1226b76 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -22,7 +22,7 @@ class Exec_PrepareForLeap : public Exec { int LoadGlycamPdbResMap(std::string const&); void LeapBond(int,int,Topology const&, CpptrajFile*) const; - int CalcAnomericRefTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; + int CalcAnomericRefTorsion(double&, int, int, Topology const&, Frame const&, std::vector const&) const; int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; From 6e2d07541c29b96aac36058980eafe561d00349f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 14:12:50 -0400 Subject: [PATCH 064/368] Stereocenter torsion calc --- src/Exec_PrepareForLeap.cpp | 61 ++++++++++++++++++++++++++++++++++++- src/Exec_PrepareForLeap.h | 1 + 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 31c2a9b17d..0955159e83 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -155,6 +155,61 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) return 0; } +/** Determine torsion around non-ring stereocenter. */ +int Exec_PrepareForLeap::CalcStereocenterTorsion(double& torsion, + int idx, + Topology const& topIn, Frame const& frameIn) +const +{ + // Assume part of a carbon chain, e.g. + // X + // | + // C0 - C - C1 + // | + // Y + // where X is heavy atom and Y may or may not exist if it is hydrogen. + // Try to order like so: + // C0 - C - C1 - X + int i0 = -1; + int i1 = -1; + int ix = -1; + //int iy = -1; + + for (Atom::bond_iterator bat = topIn[idx].bondbegin(); bat != topIn[idx].bondend(); ++bat) + { + if ( topIn[*bat].Element() == Atom::CARBON ) { + if (i0 == -1) { + i0 = *bat; + } else if (i1 == -1) { + i1 = *bat; + } else { + mprinterr("Error: Too many carbons around stereocenter %s\n", + topIn.ResNameNumAtomNameNum(idx).c_str()); + return 1; + } + } else { + if (ix == -1) { + ix = *bat; + } else { + if ( topIn[*bat].Element() > topIn[ix].Element() ) { + //iy = ix; + ix = *bat; + } //else + //iy = ix; + } + } + } + if (i0 == -1) {mprinterr("Error: CalcStereocenterTorsion: Lower C is empty.\n"); return 1;} + if (i1 == -1) {mprinterr("Error: CalcStereocenterTorsion: Higher C is empty.\n"); return 1;} + if (ix == -1) {mprinterr("Error: CalcStereocenterTorsion: X substituent is empty.\n"); return 1;} + torsion = Torsion(frameIn.XYZ(i0), frameIn.XYZ(idx), frameIn.XYZ(i1), frameIn.XYZ(ix)); + mprintf("\t Stereocenter torsion: %s-%s-%s-%s = %f\n", + *(topIn[i0].Name()), *(topIn[idx].Name()), *(topIn[i1].Name()), *(topIn[ix].Name()), + torsion * Constants::RADDEG); + return 0; +} + + /** Determine torsion around anomeric reference carbon. */ int Exec_PrepareForLeap::CalcAnomericRefTorsion(double& torsion, int ano_ref_atom, int ring_oxygen_atom, @@ -527,7 +582,11 @@ const highest_stereocenter = ano_ref_atom; } mprintf("\t Highest stereocenter: %s\n", topIn->ResNameNumAtomNameNum(highest_stereocenter).c_str()); - + if (highest_stereocenter != ano_ref_atom) { + double stereo_t = 0; + if (CalcStereocenterTorsion(stereo_t, highest_stereocenter, *topIn, frameIn)) + return 1; + } /* // Try to identify the ring oxygen. Should be bonded to 2 carbons diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 04f1226b76..9e4129feb3 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -22,6 +22,7 @@ class Exec_PrepareForLeap : public Exec { int LoadGlycamPdbResMap(std::string const&); void LeapBond(int,int,Topology const&, CpptrajFile*) const; + int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; int CalcAnomericRefTorsion(double&, int, int, Topology const&, Frame const&, std::vector const&) const; int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, From ac56040b391b190ef1e293421c24bc4eb2c9f44c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 14:16:53 -0400 Subject: [PATCH 065/368] Finish D/L determination for non-ring stereocenter. Remove old code. --- src/Exec_PrepareForLeap.cpp | 232 +++--------------------------------- 1 file changed, 16 insertions(+), 216 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0955159e83..c29382e2ec 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -550,6 +550,18 @@ const if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, *topIn, frameIn, IsRingAtom)) return 1; + // Determine alpha/beta + std::string formStr; + bool c5up = (t_c5 > 0); + bool c1up = (t_c1 > 0); + if (c1up == c5up) { + mprintf("\t Beta form\n"); + formStr = "B"; + } else { + mprintf("\t Alpha form\n"); + formStr = "A"; + } + // Find the rest of the carbons in the chain in order to find the // stereocenter with the highest index. Start from final ring carbon. int highest_stereocenter = -1; @@ -582,232 +594,20 @@ const highest_stereocenter = ano_ref_atom; } mprintf("\t Highest stereocenter: %s\n", topIn->ResNameNumAtomNameNum(highest_stereocenter).c_str()); + // Determine D/L + bool isDform; if (highest_stereocenter != ano_ref_atom) { double stereo_t = 0; if (CalcStereocenterTorsion(stereo_t, highest_stereocenter, *topIn, frameIn)) return 1; - } - -/* - // Try to identify the ring oxygen. Should be bonded to 2 carbons - // in the same residue. - int ring_c_beg = -1; // e.g. C1, "lowest" ring C, anomeric carbon - int ring_c_beg_C = -1; // e.g. C2, next C in ring bonded to anomeric carbon - int ring_c_beg_X = -1; // from anomeric C to non ring atom, non hydrogen - int ring_c_end = -1; // e.g. C5, "highest" ring C, a chiral center - int ring_c_end_C = -1; // e.g. C4, from c_end to previous C in ring - int ring_c_end_X = -1; // e.g. C6, from c_end to non ring atom in same residue - - // TODO this is temporary - ring_c_beg = anomeric_atom; - ring_c_end = ano_ref_atom; - -/ * for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - { - Atom const& currentAtom = (*topIn)[at]; - if (currentAtom.Element() == Atom::OXYGEN) - { - if (currentAtom.Nbonds() == 2) { - if ( (*topIn)[currentAtom.Bond(0)].Element() == Atom::CARBON && - (*topIn)[currentAtom.Bond(0)].ResNum() == rnum && - (*topIn)[currentAtom.Bond(1)].Element() == Atom::CARBON && - (*topIn)[currentAtom.Bond(1)].ResNum() == rnum ) - { - if (ring_oxygen_atom != -1) { - mprinterr("Error: Two potential ring oxygen atoms: %i and %i\n", - at+1, ring_oxygen_atom+1); - return 1; - } - ring_oxygen_atom = at; - if (currentAtom.Bond(0) < currentAtom.Bond(1)) { - ring_c_beg = currentAtom.Bond(0); - ring_c_end = currentAtom.Bond(1); - } else { - ring_c_beg = currentAtom.Bond(1); - ring_c_end = currentAtom.Bond(0); - } - } - } - } - }* / - if (ring_oxygen_atom == -1) { - mprinterr("Error: Ring oxygen atom could not be identified.\n"); - return 1; - } - if (ring_c_beg == -1) { - mprinterr("Error: Lowest ring C could not be identified.\n"); - return 1; - } - if (ring_c_end == -1) { - mprinterr("Error: Highest ring C could not be identified.\n"); - return 1; - } - mprintf("\t Ring Cbeg-O-Cend atoms: %s-%s-%s\n", - topIn->ResNameNumAtomNameNum(ring_c_beg).c_str(), - topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str(), - topIn->ResNameNumAtomNameNum(ring_c_end).c_str()); - - // Try to identify the ring atoms. Start from ring_c_beg, get to ring_c_end -/ * std::vector Visited( topIn->Natom(), true ); - for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - if (at != ring_oxygen_atom) - Visited[at] = false; - std::vector ring_atoms( topIn->Res(rnum).NumAtoms(), -1 ); - bool ring_complete = false; - FollowBonds( ring_c_beg, *topIn, 0, ring_atoms, ring_c_end, Visited, ring_complete ); - mprintf("DEBUG: Ring %i:", (int)ring_complete); - // Use Visited as a mask with ring atoms - Visited.assign( topIn->Natom(), false ); - Visited[ring_oxygen_atom] = true; - int n_ring_atoms = 1; - for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) - { - mprintf(" %i", *it + 1); - if (*it == -1) break; - Visited[*it] = true; - ++n_ring_atoms; - } - mprintf("\n"); - mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); - if (!ring_complete) { - mprinterr("Error: Sugar ring atoms could not be identified.\n"); - return 1; - }* / - - // Get the substituent of first ring C (e.g. C1) that is to a non-ring atom, non hydrogen - // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) - for ( Atom::bond_iterator bat = (*topIn)[ring_c_beg].bondbegin(); - bat != (*topIn)[ring_c_beg].bondend(); - ++bat ) - { - if ( (*topIn)[*bat].Element() != Atom::HYDROGEN && - !Visited[*bat] ) - { - if (ring_c_beg_X != -1) { - // If there are two non-ring, non-hydrogen substituents, prioritize - // the one that is part of this residue. - bool bat_in_res = ((*topIn)[*bat].ResNum() == rnum); - bool X_in_res = ((*topIn)[ring_c_beg_X].ResNum() == rnum); - if ( (bat_in_res && X_in_res) || (!bat_in_res && !X_in_res) ) { - mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", - topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_c_beg_X).c_str()); - return 1; - } else if (bat_in_res) { - ring_c_beg_X = *bat; - } - } else - ring_c_beg_X = *bat; - } else if ( (*topIn)[*bat].Element() == Atom::CARBON && - Visited[*bat] ) - { - if (ring_c_beg_C != -1) { - mprinterr("Error: Two potential ring carbons bonded to anomeric carbon: %s and %s\n", - topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); - return 1; - } - ring_c_beg_C = *bat; - } - } - if (ring_c_beg_X == -1) { - // If the Cx (C1 substituent, usually a different residue) index is - // not found this usually means missing inter-residue bond. - // Alternatively, this could be an isolated sugar missing an -OH - // group, so make this non-fatal. - mprintf("Warning: Ring C1 substituent could not be identified.\n" - "Warning: If '%s' is from a topology without complete bonding information\n" - "Warning: (e.g. a PDB file), try loading the topology with the\n" - "Warning: 'searchtype grid' keywords instead.\n", topIn->c_str()); - mprintf("Warning: This can also happen for isolated sugars missing e.g. a -OH\n" - "Warning: group. In that case coordinates for the missing sugar atoms\n" - "Warning: may need to be generated.\n"); - return 0; - } - mprintf("\t C1 X substituent: %s\n", - topIn->ResNameNumAtomNameNum(ring_c_beg_X).c_str()); - if (ring_c_beg_C == -1) { - mprinterr("Error: Next ring atom after C1 could not be identified.\n"); - return 1; - } - mprintf("\t C1 C ring substituent: %s\n", - topIn->ResNameNumAtomNameNum(ring_c_beg_C).c_str()); - - // Get substituent of last ring C (e.g. C5) that is not part of the ring (e.g. C6) - // Get substituent of last ring C (e.g. C5) that is part of the ring (e.g. C4) - for ( Atom::bond_iterator bat = (*topIn)[ring_c_end].bondbegin(); - bat != (*topIn)[ring_c_end].bondend(); - ++bat ) - { - if ( (*topIn)[*bat].Element() == Atom::CARBON && - !Visited[*bat] ) - { - if (ring_c_end_X != -1) { - mprinterr("Error: Two potential substituents for ring end C: %s and %s\n", - topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_c_end_X).c_str()); - return 1; - } - ring_c_end_X = *bat; - } else if ( (*topIn)[*bat].Element() == Atom::CARBON && - Visited[*bat] ) - { - if (ring_c_end_C != -1) { - mprinterr("Error: Two potential ring atoms bonded to ring end C: %s and %s\n", - topIn->ResNameNumAtomNameNum(*bat).c_str(), - topIn->ResNameNumAtomNameNum(ring_c_end_C).c_str()); - return 1; - } - ring_c_end_C = *bat; - } - } - if (ring_c_end_X == -1) { - mprinterr("Error: Highest ring C substituent could not be identified.\n"); - return 1; - } - mprintf("\t C5 non-ring substituent: %s\n", - topIn->ResNameNumAtomNameNum(ring_c_end_X).c_str()); - if (ring_c_end_C == -1) { - mprinterr("Error: Highest ring C previous ring atom could not be identified.\n"); - return 1; - } - mprintf("\t C5 previous ring atom: %s\n", - topIn->ResNameNumAtomNameNum(ring_c_end_C).c_str()); -*/ - // Try to identify alpha/beta. - // The alpha form has the CH2OH substituent (C5-C6 etc in Glycam) on the - // opposite side of the OH on the anomeric carbon (C1 in Glycam), while - // in the beta form it is on the same side, i.e. - // Alpha - C1 and C5 substituents are on opposite sides. - // Beta - C1 and C5 substituents are on the same side. - std::string formStr; - // Determine alpha/beta -// double t_c5 = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), -// frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_end_X) ); -// double t_c1 = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(ring_c_beg), -// frameIn.XYZ(ring_c_beg_C), frameIn.XYZ(ring_c_beg_X) ); - //mprintf("\t A/B torsion around C5 = %f deg\n", t_c5 * Constants::RADDEG); - //mprintf("\t A/B torsion around C1 = %f deg\n", t_c1 * Constants::RADDEG); - bool c5up = (t_c5 > 0); - bool c1up = (t_c1 > 0); - if (c1up == c5up) { - mprintf("\t Beta form\n"); - formStr = "B"; + isDform = (stereo_t > 0); } else { - mprintf("\t Alpha form\n"); - formStr = "A"; + isDform = c5up; } - // Determine D/L - // Check the chirality around the C5 atom. - bool isDform = c5up; - /*double torsion = Torsion( frameIn.XYZ(ring_c_end_C), frameIn.XYZ(ring_c_end), - frameIn.XYZ(ring_c_end_X), frameIn.XYZ(ring_oxygen_atom) ); - mprintf("\t D/L Torsion around C5= %f deg\n", torsion * Constants::RADDEG);*/ if (isDform) { mprintf("\t D form\n"); } else { mprintf("\t L form\n"); - //isDform = false; } // Identify linkages to other residues. From 470c9b119a418828952605f6565243b209e09a20 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 5 Aug 2021 14:57:54 -0400 Subject: [PATCH 066/368] Move directory creation earlier in case build libs is invoked --- configure | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 56af981c4a..8d8b8045da 100755 --- a/configure +++ b/configure @@ -2529,6 +2529,17 @@ fi # Basic checks and directives BasicChecks +# Create directories if necessary +if [ ! -e "$CPPTRAJBIN" ] ; then + mkdir "$CPPTRAJBIN" +fi +if [ ! -e "$CPPTRAJLIB" ] ; then + mkdir "$CPPTRAJLIB" +fi +if [ ! -e "$CPPTRAJDAT" ] ; then + mkdir "$CPPTRAJDAT" +fi + # Set up compilers and compiler options SetupCompilers @@ -2784,17 +2795,6 @@ if [ "${LIB_STAT[$LZIP]}" != 'off' ] ; then echo "ZLIB_INCL=${LIB_INCL[$LZIP]}" >> $external_config fi -# ----- Create directories if necessary ---------- -if [ ! -e "$CPPTRAJBIN" ] ; then - mkdir "$CPPTRAJBIN" -fi -if [ ! -e "$CPPTRAJLIB" ] ; then - mkdir "$CPPTRAJLIB" -fi -if [ ! -e "$CPPTRAJDAT" ] ; then - mkdir "$CPPTRAJDAT" -fi - # ----- Create a resource file. ------------------ # If PERFORM_CHECKS is 'no' assume we are in AmberTools, no resource file needed. RFILE='' From 9fe4892f5f9a167a0542860566002276797461df Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 6 Aug 2021 06:19:16 -0400 Subject: [PATCH 067/368] Improve error message --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index c29382e2ec..6771013bc8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -311,7 +311,7 @@ const // not found this usually means missing inter-residue bond. // Alternatively, this could be an isolated sugar missing an -OH // group, so make this non-fatal. - mprintf("Warning: Ring anomeric substituent could not be identified.\n" + mprintf("Warning: Anomeric C non-ring substituent could not be identified.\n" "Warning: If '%s' is from a topology without complete bonding information\n" "Warning: (e.g. a PDB file), try loading the topology with the\n" "Warning: 'searchtype grid' keywords instead.\n", topIn.c_str()); From afe23f5041446d12ec25b92ad2f5e6cff7911abf Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 6 Aug 2021 08:52:27 -0400 Subject: [PATCH 068/368] Add skiperrors keyword. --- src/Exec_PrepareForLeap.cpp | 18 ++++++++++++++++-- src/Exec_PrepareForLeap.h | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6771013bc8..e9b97eb531 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -10,10 +10,17 @@ #include // tolower #include // sort +/** CONSTRUCTOR */ +Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), + errorsAreFatal_(true) +{ + SetHidden(true); +} + // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const { - mprintf("\tcrdset [frame <#>] [out ]\n" + mprintf("\tcrdset [frame <#>] [out ] [skiperrors]\n" "\t[{nodisulfides |\n" "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" @@ -711,7 +718,13 @@ const //Residue const& Res = coords.Top().Res(*rnum); // See if we recognize this sugar. if (IdentifySugar(*rnum, coords.TopPtr(), frameIn, cmask, outfile, sugarBondsToRemove)) - return 1; + { + if (errorsAreFatal_) + return 1; + else + mprintf("Warning: Preparation of sugar %s failed, skipping.\n", + coords.Top().TruncResNameNum( *rnum ).c_str()); + } } // END loop over sugar residues // Remove bonds between sugars for (std::set::const_iterator bnd = sugarBondsToRemove.begin(); @@ -934,6 +947,7 @@ const // Exec_PrepareForLeap::Execute() Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { + errorsAreFatal_ = !argIn.hasKey("skiperrors"); std::string crdset = argIn.GetStringKey("crdset"); if (crdset.empty()) { mprinterr("Error: Must specify COORDS set with 'crdset'\n"); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 9e4129feb3..c7442b72f1 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -11,7 +11,7 @@ class DataSet_Coords; /// Do common tasks to prepare a structure to be loaded into tleap class Exec_PrepareForLeap : public Exec { public: - Exec_PrepareForLeap() : Exec(COORDS) { SetHidden(true); } + Exec_PrepareForLeap(); void Help() const; DispatchObject* Alloc() const { return (DispatchObject*)new Exec_PrepareForLeap(); } RetType Execute(CpptrajState&, ArgList&); @@ -37,5 +37,6 @@ class Exec_PrepareForLeap : public Exec { typedef std::pair PairType; typedef std::map MapType; MapType pdb_to_glycam_; ///< Map PDB residue names to Glycam 1 char names + bool errorsAreFatal_; ///< If false, try to skip errors. }; #endif From 221dc6e1d22e14bbac10d7914af8ad359ff58e22 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 6 Aug 2021 09:27:31 -0400 Subject: [PATCH 069/368] Require output coords set be created. This will simplify modification. --- src/Exec_PrepareForLeap.cpp | 249 ++++++++++++++++++++---------------- src/Exec_PrepareForLeap.h | 9 +- src/cpptrajdepend | 2 +- 3 files changed, 141 insertions(+), 119 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e9b97eb531..5de78adac8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -6,6 +6,7 @@ #include "Constants.h" #include "CpptrajFile.h" #include "Trajout_Single.h" +#include "DataSet_Coords_CRD.h" #include #include // tolower #include // sort @@ -20,12 +21,12 @@ Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const { - mprintf("\tcrdset [frame <#>] [out ] [skiperrors]\n" + mprintf("\tcrdset [frame <#>] name [pdbout ]\n" + "\t[leapunitname ] [out [skiperrors]\n" "\t[{nodisulfides |\n" "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars | sugarmask }] [resmapfile ]\n" - "\t[leapunitname ] [pdbout ]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" " with the LEaP program from AmberTools. Any existing/potential\n" @@ -35,7 +36,7 @@ void Exec_PrepareForLeap::Help() const " their names changed to Glycam names. Disulfides and sugars will\n" " have any inter-residue bonds removed, and the appropriate LEaP\n" " input to add the bonds back once the structure has been loaded\n" - " into LEaP will be written to .\n" + " into LEaP will be written to .\n" ); } @@ -402,12 +403,12 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector& sugarBondsToRemove) const { - Residue& res = topIn->SetRes(rnum); + Residue& res = topIn.SetRes(rnum); // Try to ID the base sugar type from the input name. char resChar = ' '; @@ -424,19 +425,19 @@ const for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { if (resChar == 'Y') { - if ( (*topIn)[at].Name() == "C7" ) - ChangeAtomName(topIn->SetAtom(at), "C2N"); - else if ( (*topIn)[at].Name() == "O7" ) - ChangeAtomName(topIn->SetAtom(at), "O2N"); - else if ( (*topIn)[at].Name() == "C8" ) - ChangeAtomName(topIn->SetAtom(at), "CME"); + if ( topIn[at].Name() == "C7" ) + ChangeAtomName(topIn.SetAtom(at), "C2N"); + else if ( topIn[at].Name() == "O7" ) + ChangeAtomName(topIn.SetAtom(at), "O2N"); + else if ( topIn[at].Name() == "C8" ) + ChangeAtomName(topIn.SetAtom(at), "CME"); } else if (resChar == 'S') { - if ( (*topIn)[at].Name() == "C10" ) - ChangeAtomName(topIn->SetAtom(at), "C5N"); - else if ( (*topIn)[at].Name() == "O10" ) - ChangeAtomName(topIn->SetAtom(at), "O5N"); - else if ( (*topIn)[at].Name() == "C11" ) - ChangeAtomName(topIn->SetAtom(at), "CME"); + if ( topIn[at].Name() == "C10" ) + ChangeAtomName(topIn.SetAtom(at), "C5N"); + else if ( topIn[at].Name() == "O10" ) + ChangeAtomName(topIn.SetAtom(at), "O5N"); + else if ( topIn[at].Name() == "C11" ) + ChangeAtomName(topIn.SetAtom(at), "CME"); } } @@ -448,13 +449,13 @@ const std::vector potentialRingStartAtoms; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { - Atom const& currentAtom = (*topIn)[at]; + Atom const& currentAtom = topIn[at]; if (currentAtom.Element() == Atom::OXYGEN) { if (currentAtom.Nbonds() == 2) { - if ( (*topIn)[currentAtom.Bond(0)].Element() == Atom::CARBON && - (*topIn)[currentAtom.Bond(0)].ResNum() == rnum && - (*topIn)[currentAtom.Bond(1)].Element() == Atom::CARBON && - (*topIn)[currentAtom.Bond(1)].ResNum() == rnum ) + if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(0)].ResNum() == rnum && + topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(1)].ResNum() == rnum ) { potentialRingStartAtoms.push_back( at ); } @@ -470,7 +471,7 @@ const for (std::vector::const_iterator it = potentialRingStartAtoms.begin(); it != potentialRingStartAtoms.end(); ++it) - mprinterr("Error: %s\n", topIn->ResNameNumAtomNameNum(*it).c_str()); + mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); return 1; } @@ -487,39 +488,38 @@ const int n_ring_atoms = 0; int ring_oxygen_atom = -1; // e.g. O5 std::vector IsRingAtom; - //Visited.reserve( topIn->Natom() ); for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); ++ringat) { - std::vector Visited( topIn->Natom(), true ); + std::vector Visited( topIn.Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != *ringat) Visited[at] = false; - std::vector ring_atoms( topIn->Res(rnum).NumAtoms(), -1 ); + std::vector ring_atoms( topIn.Res(rnum).NumAtoms(), -1 ); bool ring_complete = false; // Since we have already established that *ringat is an oxygen bonded // to two carbons, just start at the first carbon to see if we can // get to the second carbon. int c_beg, c_end; - if ((*topIn)[*ringat].Bond(0) < (*topIn)[*ringat].Bond(1)) { - c_beg = (*topIn)[*ringat].Bond(0); - c_end = (*topIn)[*ringat].Bond(1); + if (topIn[*ringat].Bond(0) < topIn[*ringat].Bond(1)) { + c_beg = topIn[*ringat].Bond(0); + c_end = topIn[*ringat].Bond(1); } else { - c_beg = (*topIn)[*ringat].Bond(1); - c_end = (*topIn)[*ringat].Bond(0); + c_beg = topIn[*ringat].Bond(1); + c_end = topIn[*ringat].Bond(0); } - FollowBonds(c_beg, *topIn, 0, ring_atoms, + FollowBonds(c_beg, topIn, 0, ring_atoms, c_end, Visited, ring_complete); mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", - topIn->ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); + topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); // TODO handle the case where multiple potential ring start atoms exist if (ring_complete) { ring_oxygen_atom = *ringat; anomeric_atom = c_beg; ano_ref_atom = c_end; // Use IsRingAtom as a mask with ring atoms set to true - IsRingAtom.assign( topIn->Natom(), false ); + IsRingAtom.assign( topIn.Natom(), false ); IsRingAtom[ring_oxygen_atom] = true; n_ring_atoms = 1; mprintf(" :"); // DEBUG @@ -538,13 +538,13 @@ const mprinterr("Error: Sugar ring atoms could not be identified.\n"); return 1; } - mprintf("\t Ring oxygen : %s\n", topIn->ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); + mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); double t_c1 = 0; double t_c5 = 0; // Calculate torsion around anomeric carbon: - int ret = CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, *topIn, frameIn, IsRingAtom); + int ret = CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, topIn, frameIn, IsRingAtom); if (ret < 0) { // This means C1 X substituent missing; non-fatal. return 0; @@ -554,7 +554,7 @@ const } // Calculate torsion around anomeric reference: - if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, *topIn, frameIn, IsRingAtom)) + if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, topIn, frameIn, IsRingAtom)) return 1; // Determine alpha/beta @@ -573,20 +573,20 @@ const // stereocenter with the highest index. Start from final ring carbon. int highest_stereocenter = -1; std::vector remainingChainCarbons; - if (FindRemainingChainCarbons(remainingChainCarbons, ano_ref_atom, *topIn, rnum, IsRingAtom)) + if (FindRemainingChainCarbons(remainingChainCarbons, ano_ref_atom, topIn, rnum, IsRingAtom)) return 1; mprintf("\t Remaining chain carbons:\n"); for (std::vector::const_iterator it = remainingChainCarbons.begin(); it != remainingChainCarbons.end(); ++it) { - mprintf("\t\t%s", topIn->ResNameNumAtomNameNum(*it).c_str()); + mprintf("\t\t%s", topIn.ResNameNumAtomNameNum(*it).c_str()); // Count number of bonds to heavy atoms. - Atom const& currentAtom = (*topIn)[*it]; + Atom const& currentAtom = topIn[*it]; int n_heavyat_bonds = 0; for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) { - if ( (*topIn)[*bat].Element() != Atom::HYDROGEN ) + if ( topIn[*bat].Element() != Atom::HYDROGEN ) ++n_heavyat_bonds; } if (n_heavyat_bonds == 3) { @@ -600,12 +600,12 @@ const // This means that ano_ref_atom is the highest stereocenter. highest_stereocenter = ano_ref_atom; } - mprintf("\t Highest stereocenter: %s\n", topIn->ResNameNumAtomNameNum(highest_stereocenter).c_str()); + mprintf("\t Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); // Determine D/L bool isDform; if (highest_stereocenter != ano_ref_atom) { double stereo_t = 0; - if (CalcStereocenterTorsion(stereo_t, highest_stereocenter, *topIn, frameIn)) + if (CalcStereocenterTorsion(stereo_t, highest_stereocenter, topIn, frameIn)) return 1; isDform = (stereo_t > 0); } else { @@ -626,18 +626,18 @@ const for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { // Check for bonds to other residues - for (Atom::bond_iterator bat = (*topIn)[at].bondbegin(); - bat != (*topIn)[at].bondend(); ++bat) + for (Atom::bond_iterator bat = topIn[at].bondbegin(); + bat != topIn[at].bondend(); ++bat) { - if ((*topIn)[*bat].ResNum() != rnum) { + if (topIn[*bat].ResNum() != rnum) { if (!cmask.AtomInCharMask(*bat)) { mprintf("\t Sugar %s bonded to non-sugar %s\n", - topIn->ResNameNumAtomNameNum(at).c_str(), - topIn->ResNameNumAtomNameNum(*bat).c_str()); - linkages.insert( (*topIn)[at].Name() ); + topIn.ResNameNumAtomNameNum(at).c_str(), + topIn.ResNameNumAtomNameNum(*bat).c_str()); + linkages.insert( topIn[at].Name() ); bondsToRemove.push_back( BondType(at, *bat, -1) ); // Check if this is a recognized linkage to non-sugar TODO put in another file? - Residue& pres = topIn->SetRes( (*topIn)[*bat].ResNum() ); + Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); if ( pres.Name() == "SER" ) { ChangeResName( pres, "OLS" ); } else if ( pres.Name() == "THR" ) { @@ -651,9 +651,9 @@ const } } else { mprintf("\t Sugar %s bonded to sugar %s\n", - topIn->ResNameNumAtomNameNum(at).c_str(), - topIn->ResNameNumAtomNameNum(*bat).c_str()); - linkages.insert( (*topIn)[at].Name() ); + topIn.ResNameNumAtomNameNum(at).c_str(), + topIn.ResNameNumAtomNameNum(*bat).c_str()); + linkages.insert( topIn[at].Name() ); // Also remove inter-sugar bonds since leap cant handle branching if (at < *bat) sugarBondsToRemove.insert( BondType(at, *bat, -1) ); @@ -685,8 +685,8 @@ const for (BondArray::const_iterator bnd = bondsToRemove.begin(); bnd != bondsToRemove.end(); ++bnd) { - LeapBond(bnd->A1(), bnd->A2(), *topIn, outfile); - topIn->RemoveBond(bnd->A1(), bnd->A2()); + LeapBond(bnd->A1(), bnd->A2(), topIn, outfile); + topIn.RemoveBond(bnd->A1(), bnd->A2()); } // Set new residue name NameType newResName( linkcode + std::string(1,resChar) + formStr ); @@ -696,20 +696,20 @@ const } /** Prepare sugars for leap. */ -int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, DataSet_Coords& coords, +int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, Frame const& frameIn, CpptrajFile* outfile) const { std::set sugarBondsToRemove; mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); - if (coords.Top().SetupIntegerMask( sugarMask )) return 1; + if (topIn.SetupIntegerMask( sugarMask )) return 1; sugarMask.MaskInfo(); if (sugarMask.None()) mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); else { CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); // Get sugar residue numbers - std::vector sugarResNums = coords.Top().ResnumsSelectedBy( sugarMask ); + std::vector sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. for (std::vector::const_iterator rnum = sugarResNums.begin(); @@ -717,30 +717,30 @@ const { //Residue const& Res = coords.Top().Res(*rnum); // See if we recognize this sugar. - if (IdentifySugar(*rnum, coords.TopPtr(), frameIn, cmask, outfile, sugarBondsToRemove)) + if (IdentifySugar(*rnum, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) { if (errorsAreFatal_) return 1; else mprintf("Warning: Preparation of sugar %s failed, skipping.\n", - coords.Top().TruncResNameNum( *rnum ).c_str()); + topIn.TruncResNameNum( *rnum ).c_str()); } } // END loop over sugar residues // Remove bonds between sugars for (std::set::const_iterator bnd = sugarBondsToRemove.begin(); bnd != sugarBondsToRemove.end(); ++bnd) { - LeapBond(bnd->A1(), bnd->A2(), *(coords.TopPtr()), outfile); - coords.TopPtr()->RemoveBond(bnd->A1(), bnd->A2()); + LeapBond(bnd->A1(), bnd->A2(), topIn, outfile); + topIn.RemoveBond(bnd->A1(), bnd->A2()); } } // Bonds to sugars have been removed, so regenerate molecule info - coords.TopPtr()->DetermineMolecules(); + topIn.DetermineMolecules(); return 0; } /** Determine where molecules end based on connectivity. */ -int Exec_PrepareForLeap::FindTerByBonds(Topology* topIn, CharMask const& maskIn) +int Exec_PrepareForLeap::FindTerByBonds(Topology& topIn, CharMask const& maskIn) const { // NOTE: this code is the same algorithm from Topology::NonrecursiveMolSearch @@ -750,17 +750,17 @@ const unsigned int currentAtom = 0; unsigned int currentMol = 0; unsigned int lowestUnassignedAtom = 0; - std::vector atomMolNum( topIn->Natom(), -1 ); + std::vector atomMolNum( topIn.Natom(), -1 ); while (unassignedAtomsRemain) { // This atom is in molecule. atomMolNum[currentAtom] = currentMol; //mprintf("DEBUG:\tAssigned atom %u to mol %u\n", currentAtom, currentMol); // All atoms bonded to this one are in molecule. - for (Atom::bond_iterator batom = (*topIn)[currentAtom].bondbegin(); - batom != (*topIn)[currentAtom].bondend(); ++batom) + for (Atom::bond_iterator batom = topIn[currentAtom].bondbegin(); + batom != topIn[currentAtom].bondend(); ++batom) { if (atomMolNum[*batom] == -1) { // -1 is no molecule - if ((*topIn)[*batom].Nbonds() > 1) + if (topIn[*batom].Nbonds() > 1) // Bonded atom has more than 1 bond; needs to be searched. nextAtomToSearch.push( *batom ); else { @@ -795,18 +795,18 @@ const // For each selected atom, find last atom in corresponding molecule, // set corresponding residue as TER. int at = 0; - while (at < topIn->Natom()) { + while (at < topIn.Natom()) { // Find the next selected atom - while (at < topIn->Natom() && !maskIn.AtomInCharMask(at)) at++; - if (at < topIn->Natom()) { + while (at < topIn.Natom() && !maskIn.AtomInCharMask(at)) at++; + if (at < topIn.Natom()) { int currentMol = atomMolNum[at]; // Seek to end of molecule - while (at < topIn->Natom() && currentMol == atomMolNum[at]) at++; + while (at < topIn.Natom() && currentMol == atomMolNum[at]) at++; // The previous atom is the end - int lastRes = (*topIn)[at-1].ResNum(); + int lastRes = topIn[at-1].ResNum(); mprintf("\tSetting residue %s as terminal.\n", - topIn->TruncResNameNum(lastRes).c_str()); - topIn->SetRes(lastRes).SetTerminal( true ); + topIn.TruncResNameNum(lastRes).c_str()); + topIn.SetRes(lastRes).SetTerminal( true ); } } return 0; @@ -815,7 +815,7 @@ const /** Search for disulfide bonds. */ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string const& newcysnamestr, std::string const& cysmaskstr, bool searchForNewDisulfides, - DataSet_Coords& coords, Frame const& frameIn, + Topology& topIn, Frame const& frameIn, CpptrajFile* outfile) const { @@ -832,7 +832,7 @@ const mprinterr("Error: Could not set up CYS mask string %s\n", cysmaskstr.c_str()); return 1; } - if (coords.Top().SetupIntegerMask( cysmask )) return 1; + if (topIn.SetupIntegerMask( cysmask )) return 1; cysmask.MaskInfo(); if (cysmask.None()) mprintf("Warning: No cysteine sulfur atoms selected by %s\n", cysmaskstr.c_str()); @@ -847,10 +847,10 @@ const { for (AtomMask::const_iterator at2 = at1 + 1; at2 != cysmask.end(); ++at2) { - if (coords.Top()[*at1].IsBondedTo(*at2)) { + if (topIn[*at1].IsBondedTo(*at2)) { mprintf("\tExisting disulfide: %s to %s\n", - coords.Top().ResNameNumAtomNameNum(*at1).c_str(), - coords.Top().ResNameNumAtomNameNum(*at2).c_str()); + topIn.ResNameNumAtomNameNum(*at1).c_str(), + topIn.ResNameNumAtomNameNum(*at2).c_str()); int idx1 = (int)(at1 - cysmask.begin()); int idx2 = (int)(at2 - cysmask.begin()); disulfidePartner[idx1] = idx2; @@ -917,8 +917,8 @@ const int at1 = cysmask[it->second.first]; int at2 = cysmask[it->second.second]; mprintf("\t Potential disulfide: %s to %s (%g Ang.)\n", - coords.Top().ResNameNumAtomNameNum(at1).c_str(), - coords.Top().ResNameNumAtomNameNum(at2).c_str(), sqrt(it->first)); + topIn.ResNameNumAtomNameNum(at1).c_str(), + topIn.ResNameNumAtomNameNum(at2).c_str(), sqrt(it->first)); disulfidePartner[it->second.first ] = it->second.second; disulfidePartner[it->second.second] = it->second.first; } @@ -934,9 +934,9 @@ const int at2 = cysmask[*idx1]; if (at1 < at2) { nDisulfides++; - LeapBond(at1, at2, coords.Top(), outfile); + LeapBond(at1, at2, topIn, outfile); } - ChangeResName(coords.TopPtr()->SetRes(coords.Top()[at1].ResNum()), newcysname); + ChangeResName(topIn.SetRes(topIn[at1].ResNum()), newcysname); } } mprintf("\tDetected %i disulfide bonds.\n", nDisulfides); @@ -948,9 +948,10 @@ const Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { errorsAreFatal_ = !argIn.hasKey("skiperrors"); + // Get input coords std::string crdset = argIn.GetStringKey("crdset"); if (crdset.empty()) { - mprinterr("Error: Must specify COORDS set with 'crdset'\n"); + mprinterr("Error: Must specify input COORDS set with 'crdset'\n"); return CpptrajState::ERR; } DataSet* ds = State.DSL().FindSetOfGroup( crdset, DataSet::COORDINATES ); @@ -959,7 +960,15 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } DataSet_Coords& coords = static_cast( *((DataSet_Coords*)ds) ); - + // Get frame from input coords + int tgtframe = argIn.getKeyInt("frame", 1) - 1; + mprintf("\tUsing frame %i from COORDS set %s\n", tgtframe+1, coords.legend()); + if (tgtframe < 0 || tgtframe >= (int)coords.Size()) { + mprinterr("Error: Frame is out of range.\n"); + return CpptrajState::ERR; + } + Frame frameIn = coords.AllocateFrame(); + coords.GetFrame(tgtframe, frameIn); // Check that coords has no issues if (!coords.Top().AtomAltLoc().empty()) { // Must have only 1 atom alternate location @@ -983,29 +992,26 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\t'%s' only contains atoms from alternate location ID '%c'\n", coords.legend(), firstAltLoc); } - int tgtframe = argIn.getKeyInt("frame", 1) - 1; - mprintf("\tUsing frame %i from COORDS set %s\n", tgtframe+1, coords.legend()); - if (tgtframe < 0 || tgtframe >= (int)coords.Size()) { - mprinterr("Error: Frame is out of range.\n"); + // Copy input topology, may be modified. + Topology topIn = coords.Top(); + + // Allocate output COORDS data set + std::string outname = argIn.GetStringKey("name"); + if (outname.empty()) { + mprinterr("Error: Must specify output COORDS set with 'name'\n"); return CpptrajState::ERR; } - Frame frameIn = coords.AllocateFrame(); - coords.GetFrame(tgtframe, frameIn); + DataSet_Coords_CRD* outCoords = (DataSet_Coords_CRD*)State.DSL().AddSet( DataSet::COORDS, outname ); + if (outCoords == 0) { + mprinterr("Error: Could not allocate output COORDS set.\n"); + return CpptrajState::ERR; + } + mprintf("\tPrepared system will be saved to COORDS set '%s'\n", outCoords->legend()); std::string pdbout = argIn.GetStringKey("pdbout"); if (!pdbout.empty()) mprintf("\tPDB will be written to %s\n", pdbout.c_str()); - // Load PDB to glycam residue name map - if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { - mprinterr("Error: PDB to glycam name map load failed.\n"); - return CpptrajState::ERR; - } - // DEBUG - print residue name map - mprintf("\tResidue name map:\n"); - for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) - mprintf("\t %4s -> %c\n", *(mit->first), mit->second); - leapunitname_ = argIn.GetStringKey("leapunitname", "m"); mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); @@ -1015,6 +1021,19 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else mprintf("\tWill attempt to prepare sugars.\n"); + // Load PDB to glycam residue name map + if (prepare_sugars) { + if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { + mprinterr("Error: PDB to glycam name map load failed.\n"); + return CpptrajState::ERR; + } + // DEBUG - print residue name map + mprintf("\tResidue name map:\n"); + for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) + mprintf("\t %4s -> %c\n", *(mit->first), mit->second); + } + + // Get sugar mask or default sugar mask AtomMask sugarMask; std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); if (!sugarmaskstr.empty()) { @@ -1051,7 +1070,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprinterr("Error: Invalid mask.\n"); return CpptrajState::ERR; } - if (coords.Top().SetupIntegerMask( molMasks.back() )) return CpptrajState::ERR; + if (topIn.SetupIntegerMask( molMasks.back() )) return CpptrajState::ERR; molMasks.back().MaskInfo(); if (molMasks.back().None()) { mprinterr("Error: Nothing selected by mask.\n"); @@ -1067,7 +1086,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprinterr("Error: Invalid mask.\n"); return CpptrajState::ERR; } - if (coords.Top().SetupCharMask( determineMolMask )) return CpptrajState::ERR; + if (topIn.SetupCharMask( determineMolMask )) return CpptrajState::ERR; determineMolMask.MaskInfo(); if (determineMolMask.None()) { mprinterr("Error: Nothing selected by mask.\n"); @@ -1090,7 +1109,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) argIn.GetStringKey("newcysname", "CYX"), argIn.GetStringKey("cysmask", ":CYS@SG"), !argIn.hasKey("existingdisulfides"), - coords, frameIn, outfile )) + topIn, frameIn, outfile )) { mprinterr("Error: Disulfide search failed.\n"); return CpptrajState::ERR; @@ -1101,7 +1120,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (prepare_sugars) { - if (PrepareSugars(sugarMask, coords, frameIn, outfile)) { + if (PrepareSugars(sugarMask, topIn, frameIn, outfile)) { mprinterr("Error: Sugar preparation failed.\n"); return CpptrajState::ERR; } @@ -1110,35 +1129,39 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Try to set terminal residues if (!molMasks.empty() || determineMolMask.MaskStringSet()) { // Reset terminal status - for (int rnum = 0; rnum != coords.Top().Nres(); rnum++) - coords.TopPtr()->SetRes(rnum).SetTerminal(false); + for (int rnum = 0; rnum != topIn.Nres(); rnum++) + topIn.SetRes(rnum).SetTerminal(false); // The final residue of each molMask is terminal for (std::vector::const_iterator mask = molMasks.begin(); mask != molMasks.end(); ++mask) { //std::vector Rnums = coords.Top().ResnumsSelectedBy( *mask ); int lastAtom = mask->back(); - int lastRes = coords.Top()[lastAtom].ResNum(); + int lastRes = topIn[lastAtom].ResNum(); mprintf("\tSetting residue %s as terminal.\n", - coords.Top().TruncResNameNum(lastRes).c_str()); - coords.TopPtr()->SetRes(lastRes).SetTerminal( true ); + topIn.TruncResNameNum(lastRes).c_str()); + topIn.SetRes(lastRes).SetTerminal( true ); } // Set ter based on connectivity if (determineMolMask.MaskStringSet()) { - if (FindTerByBonds(coords.TopPtr(), determineMolMask)) { + if (FindTerByBonds(topIn, determineMolMask)) { mprinterr("Error: Could not set TER by connectivity.\n"); return CpptrajState::ERR; } } } + // Setup output COORDS + outCoords->CoordsSetup( topIn, coords.CoordsInfo() ); + outCoords->AddFrame( frameIn ); + if (!pdbout.empty()) { Trajout_Single PDB; if (PDB.InitTrajWrite( pdbout, "topresnum", State.DSL(), TrajectoryFile::PDBFILE)) { mprinterr("Error: Could not initialize output PDB\n"); return CpptrajState::ERR; } - if (PDB.SetupTrajWrite(coords.TopPtr(), coords.CoordsInfo(), 1)) { + if (PDB.SetupTrajWrite(outCoords->TopPtr(), outCoords->CoordsInfo(), 1)) { mprinterr("Error: Could not set up output PDB\n"); return CpptrajState::ERR; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c7442b72f1..c56992909f 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -7,7 +7,6 @@ class AtomMask; class CharMask; class CpptrajFile; -class DataSet_Coords; /// Do common tasks to prepare a structure to be loaded into tleap class Exec_PrepareForLeap : public Exec { public: @@ -27,11 +26,11 @@ class Exec_PrepareForLeap : public Exec { int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; - int IdentifySugar(int, Topology*, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; - int PrepareSugars(AtomMask&, DataSet_Coords&, Frame const&, CpptrajFile*) const; - int FindTerByBonds(Topology*, CharMask const&) const; + int IdentifySugar(int, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; + int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*) const; + int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, - DataSet_Coords&, Frame const&, CpptrajFile*) const; + Topology&, Frame const&, CpptrajFile*) const; std::string leapunitname_; typedef std::pair PairType; diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 70f1ef4870..7e364c4b6e 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -279,7 +279,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From ad47de8b1ba2dbd7d0db6d3d9d74106caebc150f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 6 Aug 2021 10:22:06 -0400 Subject: [PATCH 070/368] Add ability to modify coords. --- src/Exec_PrepareForLeap.cpp | 107 ++++++++++++++++++++++++++++++++++++ src/Exec_PrepareForLeap.h | 1 + 2 files changed, 108 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 5de78adac8..ee2b823565 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -944,6 +944,90 @@ const return 0; } +/** Modify coords according to user wishes. */ +int Exec_PrepareForLeap::ModifyCoords( Topology& topIn, Frame& frameIn, + bool remove_water, bool remove_h, + char altLocChar, std::string const& stripMask ) +const +{ + // Create a mask denoting which atoms will be kept. + std::vector atomsToKeep( topIn.Natom(), true ); + // User-specified strip mask + if (!stripMask.empty()) { + AtomMask mask; + if (mask.SetMaskString( stripMask )) { + mprinterr("Error: Invalid mask string '%s'\n", stripMask.c_str()); + return 1; + } + if (topIn.SetupIntegerMask( mask )) return 1; + mask.MaskInfo(); + if (!mask.None()) { + for (AtomMask::const_iterator atm = mask.begin(); atm != mask.end(); ++atm) + atomsToKeep[*atm] = false; + } + } + if (remove_water) { + unsigned int nRemoved = 0; + for (Topology::mol_iterator mol = topIn.MolStart(); mol != topIn.MolEnd(); ++mol) { + if (mol->IsSolvent()) { + for (Unit::const_iterator seg = mol->MolUnit().segBegin(); + seg != mol->MolUnit().segEnd(); + ++seg) + for (int satm = seg->Begin(); satm < seg->End(); ++satm) + atomsToKeep[satm] = false; + } + } + if (nRemoved == 0) + mprintf("\tNo solvent to remove.\n"); + else + mprintf("\t# solvent removed: %u\n", nRemoved); + } + if (remove_h) { + for (Topology::atom_iterator atom = topIn.begin(); atom != topIn.end(); ++atom) { + if (atom->Element() == Atom::HYDROGEN) + atomsToKeep[atom - topIn.begin()] = false; + } + } + if (altLocChar != '\0') { + if (topIn.AtomAltLoc().empty()) { + mprintf("\tNo alternate atom locations.\n"); + } else { + for (int idx = 0; idx != topIn.Natom(); idx++) { + if (topIn.AtomAltLoc()[idx] != ' ' && + topIn.AtomAltLoc()[idx] != altLocChar) + atomsToKeep[idx] = false; + } + } + } + + // Set up mask of only kept atoms. + AtomMask keptAtoms; + keptAtoms.SetNatoms( topIn.Natom() ); + for (int idx = 0; idx != topIn.Natom(); idx++) { + if (atomsToKeep[idx]) + keptAtoms.AddSelectedAtom(idx); + } + if (keptAtoms.Nselected() == topIn.Natom()) + // Keeping everything, no modifications + return 0; + // Modify top/frame + Topology* newTop = topIn.modifyStateByMask( keptAtoms ); + if (newTop == 0) { + mprinterr("Error: Could not create new topology.\n"); + return 1; + } + newTop->Brief("After removing atoms:"); + Frame newFrame; + newFrame.SetupFrameV(newTop->Atoms(), frameIn.CoordsInfo()); + newFrame.SetFrame(frameIn, keptAtoms); + + topIn = *newTop; + frameIn = newFrame; + delete newTop; + + return 0; +} + // Exec_PrepareForLeap::Execute() Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { @@ -969,6 +1053,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } Frame frameIn = coords.AllocateFrame(); coords.GetFrame(tgtframe, frameIn); + // Check that coords has no issues if (!coords.Top().AtomAltLoc().empty()) { // Must have only 1 atom alternate location @@ -1021,6 +1106,28 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else mprintf("\tWill attempt to prepare sugars.\n"); + // Deal with any coordinate modifications + bool remove_water = argIn.hasKey("nowat"); + bool remove_h = argIn.hasKey("noh"); + std::string altLocArg = argIn.GetStringKey("keepaltloc"); + char altLocChar = '\0'; + if (!altLocArg.empty()) + altLocChar = altLocArg[0]; + std::string stripMask = argIn.GetStringKey("stripmask"); + if (remove_water) + mprintf("\tRemoving solvent.\n"); + if (remove_h) + mprintf("\tRemoving hydrogens.\n"); + if (altLocChar != '\0') + mprintf("\tIf present, keeping only alternate atom locations denoted by '%c'\n", altLocChar); + if (!stripMask.empty()) + mprintf("\tRemoving atoms in mask '%s'\n", stripMask.c_str()); + if (ModifyCoords( topIn, frameIn, remove_water, remove_h, altLocChar, stripMask )) + { + mprinterr("Error: Modification of '%s' failed.\n", coords.legend()); + return CpptrajState::ERR; + } + // Load PDB to glycam residue name map if (prepare_sugars) { if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c56992909f..96b5879e12 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -31,6 +31,7 @@ class Exec_PrepareForLeap : public Exec { int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*) const; + int ModifyCoords(Topology&, Frame&, bool, bool, char, std::string const&) const; std::string leapunitname_; typedef std::pair PairType; From 86405a7ab2a6cc8c133cd66cc77d675a95150afb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 6 Aug 2021 10:23:29 -0400 Subject: [PATCH 071/368] Add help text --- src/Exec_PrepareForLeap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ee2b823565..f31d10aa55 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -23,6 +23,7 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] name [pdbout ]\n" "\t[leapunitname ] [out [skiperrors]\n" + "\t[nowat] [noh] [keepaltloc ] [stripmask ]\n" "\t[{nodisulfides |\n" "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" From ed231a7f60d78c5ba9162f3f18a573e63b6682e8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 6 Aug 2021 11:01:32 -0400 Subject: [PATCH 072/368] Automatically filter out alt loc ids --- src/Exec_PrepareForLeap.cpp | 48 ++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f31d10aa55..b809ec4695 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1055,28 +1055,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) Frame frameIn = coords.AllocateFrame(); coords.GetFrame(tgtframe, frameIn); - // Check that coords has no issues - if (!coords.Top().AtomAltLoc().empty()) { - // Must have only 1 atom alternate location - char firstAltLoc = ' '; - for (std::vector::const_iterator altLocId = coords.Top().AtomAltLoc().begin(); - altLocId != coords.Top().AtomAltLoc().end(); - ++altLocId) - { - if (firstAltLoc == ' ') { - // Find first non-blank alternate location ID - if (*altLocId != ' ') - firstAltLoc = *altLocId; - } else if (*altLocId != ' ' && *altLocId != firstAltLoc) { - mprinterr("Error: '%s' has atoms with multiple alternate location IDs, which\n" - "Error: are not supported by LEaP. Use the 'keepaltloc '\n" - "Error: keyword for parm/trajin etc. to select which alternate\n" - "Error: atom locations to keep.\n", coords.legend()); - return CpptrajState::ERR; - } - } - mprintf("\t'%s' only contains atoms from alternate location ID '%c'\n", coords.legend(), firstAltLoc); - } // Copy input topology, may be modified. Topology topIn = coords.Top(); @@ -1115,6 +1093,32 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (!altLocArg.empty()) altLocChar = altLocArg[0]; std::string stripMask = argIn.GetStringKey("stripmask"); + + // Check if alternate atom location IDs are present + if (!coords.Top().AtomAltLoc().empty()) { + // For LEaP, must have only 1 atom alternate location + char firstAltLoc = ' '; + for (std::vector::const_iterator altLocId = coords.Top().AtomAltLoc().begin(); + altLocId != coords.Top().AtomAltLoc().end(); + ++altLocId) + { + if (firstAltLoc == ' ') { + // Find first non-blank alternate location ID + if (*altLocId != ' ') + firstAltLoc = *altLocId; + } else if (*altLocId != ' ' && *altLocId != firstAltLoc) { + if (altLocChar == '\0') { + altLocChar = firstAltLoc; + mprintf("Warning: '%s' has atoms with multiple alternate location IDs, which\n" + "Warning: are not supported by LEaP. Keeping only '%c'.\n" + "Warning: To choose a specific location to keep use the 'keepaltloc '\n" + "Warning: keyword.\n", coords.legend(), altLocChar); + } + break; + } + } + } + if (remove_water) mprintf("\tRemoving solvent.\n"); if (remove_h) From 1fe074445c85a48150cb92db27613e4ad06f085c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 11:49:24 -0400 Subject: [PATCH 073/368] Handle symmetry op info for link records; links that require any symmetry operations cannot be properly handled yet. --- src/PDBfile.cpp | 260 +++++++++++++++++++++++++++++----------------- src/PDBfile.h | 26 ++++- src/Parm_PDB.cpp | 16 ++- src/cpptrajdepend | 2 +- 4 files changed, 201 insertions(+), 103 deletions(-) diff --git a/src/PDBfile.cpp b/src/PDBfile.cpp index 2e47e8211c..d68383c0aa 100644 --- a/src/PDBfile.cpp +++ b/src/PDBfile.cpp @@ -1,9 +1,159 @@ #include // sscanf #include // atoi, atof #include // strncmp +#include // std::copy #include "PDBfile.h" #include "CpptrajStdio.h" +#include "StringRoutines.h" // integerToString +// ----- SSBOND Class ---------------------------------------------------------- +PDBfile::SSBOND::SSBOND() : + idx1_(-1), idx2_(-1), rnum1_(-1), rnum2_(-1), + chain1_(' '), chain2_(' '), icode1_(' '), icode2_(' ') +{ + std::fill(name1_, name1_+4, '\0'); + std::fill(name2_, name1_+4, '\0'); +} + +PDBfile::SSBOND::SSBOND(int idx1, int idx2, Residue const& r1, Residue const& r2) : + idx1_( idx1), idx2_( idx2), + rnum1_( r1.OriginalResNum()), rnum2_( r2.OriginalResNum()), + chain1_(r1.ChainId()), chain2_(r2.ChainId()), + icode1_(r1.Icode()), icode2_(r2.Icode()) +{ + std::copy(r1.c_str(), r1.c_str()+3, name1_); + name1_[3] = '\0'; + std::copy(r2.c_str(), r2.c_str()+3, name2_); + name2_[3] = '\0'; +} + +PDBfile::SSBOND::SSBOND(SSBOND const& rhs) : + idx1_( rhs.idx1_), idx2_( rhs.idx2_), + rnum1_( rhs.rnum1_), rnum2_( rhs.rnum2_), + chain1_(rhs.chain1_), chain2_(rhs.chain2_), + icode1_(rhs.icode1_), icode2_(rhs.icode2_) +{ + std::copy(rhs.name1_, rhs.name1_+4, name1_); + std::copy(rhs.name2_, rhs.name2_+4, name2_); +} + +PDBfile::SSBOND& PDBfile::SSBOND::operator=(SSBOND const& rhs) { + if (this != &rhs) { + idx1_ = rhs.idx1_; + idx2_ = rhs.idx2_; + rnum1_ = rhs.rnum1_; + rnum2_ = rhs.rnum2_; + chain1_ = rhs.chain1_; + chain2_ = rhs.chain2_; + icode1_ = rhs.icode1_; + icode2_ = rhs.icode2_; + std::copy(rhs.name1_, rhs.name1_+3, name1_); + std::copy(rhs.name2_, rhs.name2_+3, name2_); + } + return *this; +} + +// ----- SymOp Class ----------------------------------------------------------- +/** CONSTRUCTOR - no op. */ +PDBfile::SymOp::SymOp() : idx_(1), ix_(5), iy_(5), iz_(5) +{} + +/** CONSTRUCTOR - construct from NNNMMM character string. */ +PDBfile::SymOp::SymOp(const char* ptr) : idx_(1), ix_(5), iy_(5), iz_(5) +{ + if (ptr == 0) return; + // DO NNN + char numstr[4]; + numstr[0] = ptr[0]; + numstr[1] = ptr[1]; + numstr[2] = ptr[2]; + numstr[3] = '\0'; + // TODO check for overflow? Shouldnt be possible with a 3 digit number + idx_ = (Itype)atoi( numstr ); + // DO MMM + numstr[1] = '\0'; + numstr[0] = ptr[3]; + ix_ = (Itype)atoi(numstr); + numstr[0] = ptr[4]; + iy_ = (Itype)atoi(numstr); + numstr[0] = ptr[5]; + iz_ = (Itype)atoi(numstr); + mprintf("DEBUG: idx= %hu ix= %hu iy= %hu iz= %hu\n", idx_, ix_, iy_, iz_); +} + +/** \return String containing NNNMMM code. */ +std::string PDBfile::SymOp::OpString() const { + std::string out; + std::string nstr = integerToString( (int)idx_ ); + if (idx_ > 99) + out.assign( nstr ); + else if (idx_ > 9) + out = " " + nstr; + else + out = " " + nstr; + out.append( integerToString( ix_ ) ); + out.append( integerToString( iy_ ) ); + out.append( integerToString( iz_ ) ); + return out; +} + +// ----- Link Class ------------------------------------------------------------ +PDBfile::Link::Link() : rnum1_(-1), rnum2_(-1), altloc1_(' '), altloc2_(' '), + chain1_(' '), chain2_(' '), icode1_(' '), icode2_(' ') +{ + std::fill(aname1_, aname1_+5, '\0'); + std::fill(aname2_, aname2_+5, '\0'); + std::fill(rname1_, rname1_+4, '\0'); + std::fill(rname2_, rname2_+4, '\0'); +} + +PDBfile::Link::Link(const char* a1, char alt1, const char* r1, char ch1, int rnum1, char code1, + const char* a2, char alt2, const char* r2, char ch2, int rnum2, char code2, + SymOp const& S1, SymOp const& S2) : + rnum1_(rnum1), rnum2_(rnum2), altloc1_(alt1), altloc2_(alt2), chain1_(ch1), chain2_(ch2), + icode1_(code1), icode2_(code2), sym1_(S1), sym2_(S2) +{ + std::copy(a1, a1+4, aname1_); aname1_[4] = '\0'; + std::copy(a2, a2+4, aname2_); aname2_[4] = '\0'; + std::copy(r1, r1+3, rname1_); rname1_[3] = '\0'; + std::copy(r2, r2+3, rname2_); rname2_[3] = '\0'; +} + +/** Link COPY CONSTRUCTOR */ +PDBfile::Link::Link(Link const& rhs) : rnum1_(rhs.rnum1_), rnum2_(rhs.rnum2_), + altloc1_(rhs.altloc1_), altloc2_(rhs.altloc2_), + chain1_(rhs.chain1_), chain2_(rhs.chain2_), + icode1_(rhs.icode1_), icode2_(rhs.icode2_), + sym1_(rhs.sym1_), sym2_(rhs.sym2_) +{ + std::copy(rhs.aname1_, rhs.aname1_+5, aname1_); + std::copy(rhs.aname2_, rhs.aname2_+5, aname2_); + std::copy(rhs.rname1_, rhs.rname1_+4, rname1_); + std::copy(rhs.rname2_, rhs.rname2_+4, rname2_); +} + +/** Link ASSIGNMENT */ +PDBfile::Link& PDBfile::Link::operator=(Link const& rhs) { + if (this != &rhs) { + rnum1_ = rhs.rnum1_; + rnum2_ = rhs.rnum2_; + altloc1_ = rhs.altloc1_; + altloc2_ = rhs.altloc2_; + chain1_ = rhs.chain1_; + chain2_ = rhs.chain2_; + icode1_ = rhs.icode1_; + icode2_ = rhs.icode2_; + sym1_ = rhs.sym1_; + sym2_ = rhs.sym2_; + std::copy(rhs.aname1_, rhs.aname1_+4, aname1_); + std::copy(rhs.aname2_, rhs.aname2_+4, aname2_); + std::copy(rhs.rname1_, rhs.rname1_+3, rname1_); + std::copy(rhs.rname2_, rhs.rname2_+3, rname2_); + } + return *this; +} + +// ===== PDBfile class ========================================================= /// PDB record types // NOTE: Must correspond with PDB_RECTYPE const char* PDBfile::PDB_RECNAME[] = { @@ -313,6 +463,11 @@ PDBfile::Link PDBfile::pdb_Link() { lb_size = 56; } char a1[4], a2[4], r1[3], r2[3], alt1, alt2, ch1, ch2, code1, code2; + char sym1[7], sym2[7]; + std::fill(sym1, sym1+6, ' '); + std::fill(sym2, sym2+6, ' '); + sym1[6] = '\0'; + sym2[6] = '\0'; int rnum1, rnum2; // Site 1 std::copy(linebuffer_+12, linebuffer_+16, a1); @@ -325,9 +480,13 @@ PDBfile::Link PDBfile::pdb_Link() { alt2 = linebuffer_[46]; std::copy(linebuffer_+47, linebuffer_+50, r2); ch2 = linebuffer_[51]; - if (lb_size > 56) + if (lb_size > 56) { code2 = linebuffer_[56]; - else + // Symmetry ops + std::copy(linebuffer_+59, linebuffer_+65, sym1); + std::copy(linebuffer_+66, linebuffer_+72, sym2); + mprintf("DEBUG: Sym1: %s Sym2: %s\n", sym1, sym2); + } else code2 = ' '; // Residue numbers TODO restore nulled chars? linebuffer_[26] = '\0'; @@ -350,7 +509,8 @@ PDBfile::Link PDBfile::pdb_Link() { } */ return Link( a1, alt1, r1, ch1, rnum1, code1, - a2, alt2, r2, ch2, rnum2, code2 ); + a2, alt2, r2, ch2, rnum2, code2, + SymOp(sym1), SymOp(sym2) ); } // ----------------------------------------------------------------------------- @@ -609,98 +769,4 @@ void PDBfile::WriteSSBOND(int num, SSBOND const& ss, float distIn) { void PDBfile::WriteENDMDL() { Printf("ENDMDL\n"); } void PDBfile::WriteEND() { Printf("END \n"); } -// ----------------------------------------------------------------------------- -PDBfile::SSBOND::SSBOND() : - idx1_(-1), idx2_(-1), rnum1_(-1), rnum2_(-1), - chain1_(' '), chain2_(' '), icode1_(' '), icode2_(' ') -{ - std::fill(name1_, name1_+4, '\0'); - std::fill(name2_, name1_+4, '\0'); -} - -PDBfile::SSBOND::SSBOND(int idx1, int idx2, Residue const& r1, Residue const& r2) : - idx1_( idx1), idx2_( idx2), - rnum1_( r1.OriginalResNum()), rnum2_( r2.OriginalResNum()), - chain1_(r1.ChainId()), chain2_(r2.ChainId()), - icode1_(r1.Icode()), icode2_(r2.Icode()) -{ - std::copy(r1.c_str(), r1.c_str()+3, name1_); - name1_[3] = '\0'; - std::copy(r2.c_str(), r2.c_str()+3, name2_); - name2_[3] = '\0'; -} -PDBfile::SSBOND::SSBOND(SSBOND const& rhs) : - idx1_( rhs.idx1_), idx2_( rhs.idx2_), - rnum1_( rhs.rnum1_), rnum2_( rhs.rnum2_), - chain1_(rhs.chain1_), chain2_(rhs.chain2_), - icode1_(rhs.icode1_), icode2_(rhs.icode2_) -{ - std::copy(rhs.name1_, rhs.name1_+4, name1_); - std::copy(rhs.name2_, rhs.name2_+4, name2_); -} - -PDBfile::SSBOND& PDBfile::SSBOND::operator=(SSBOND const& rhs) { - if (this != &rhs) { - idx1_ = rhs.idx1_; - idx2_ = rhs.idx2_; - rnum1_ = rhs.rnum1_; - rnum2_ = rhs.rnum2_; - chain1_ = rhs.chain1_; - chain2_ = rhs.chain2_; - icode1_ = rhs.icode1_; - icode2_ = rhs.icode2_; - std::copy(rhs.name1_, rhs.name1_+3, name1_); - std::copy(rhs.name2_, rhs.name2_+3, name2_); - } - return *this; -} -// ----------------------------------------------------------------------------- -PDBfile::Link::Link() : rnum1_(-1), rnum2_(-1), altloc1_(' '), altloc2_(' '), - chain1_(' '), chain2_(' '), icode1_(' '), icode2_(' ') -{ - std::fill(aname1_, aname1_+5, '\0'); - std::fill(aname2_, aname2_+5, '\0'); - std::fill(rname1_, rname1_+4, '\0'); - std::fill(rname2_, rname2_+4, '\0'); -} - -PDBfile::Link::Link(const char* a1, char alt1, const char* r1, char ch1, int rnum1, char code1, - const char* a2, char alt2, const char* r2, char ch2, int rnum2, char code2) : - rnum1_(rnum1), rnum2_(rnum2), altloc1_(alt1), altloc2_(alt2), chain1_(ch1), chain2_(ch2), - icode1_(code1), icode2_(code2) -{ - std::copy(a1, a1+4, aname1_); aname1_[4] = '\0'; - std::copy(a2, a2+4, aname2_); aname2_[4] = '\0'; - std::copy(r1, r1+3, rname1_); rname1_[3] = '\0'; - std::copy(r2, r2+3, rname2_); rname2_[3] = '\0'; -} - -PDBfile::Link::Link(Link const& rhs) : rnum1_(rhs.rnum1_), rnum2_(rhs.rnum2_), - altloc1_(rhs.altloc1_), altloc2_(rhs.altloc2_), - chain1_(rhs.chain1_), chain2_(rhs.chain2_), - icode1_(rhs.icode1_), icode2_(rhs.icode2_) -{ - std::copy(rhs.aname1_, rhs.aname1_+5, aname1_); - std::copy(rhs.aname2_, rhs.aname2_+5, aname2_); - std::copy(rhs.rname1_, rhs.rname1_+4, rname1_); - std::copy(rhs.rname2_, rhs.rname2_+4, rname2_); -} - -PDBfile::Link& PDBfile::Link::operator=(Link const& rhs) { - if (this != &rhs) { - rnum1_ = rhs.rnum1_; - rnum2_ = rhs.rnum2_; - altloc1_ = rhs.altloc1_; - altloc2_ = rhs.altloc2_; - chain1_ = rhs.chain1_; - chain2_ = rhs.chain2_; - icode1_ = rhs.icode1_; - icode2_ = rhs.icode2_; - std::copy(rhs.aname1_, rhs.aname1_+4, aname1_); - std::copy(rhs.aname2_, rhs.aname2_+4, aname2_); - std::copy(rhs.rname1_, rhs.rname1_+3, rname1_); - std::copy(rhs.rname2_, rhs.rname2_+3, rname2_); - } - return *this; -} diff --git a/src/PDBfile.h b/src/PDBfile.h index 99d7c8a83d..a7bfcf01be 100644 --- a/src/PDBfile.h +++ b/src/PDBfile.h @@ -7,6 +7,7 @@ class PDBfile : public CpptrajFile { public: class SSBOND; + class SymOp; class Link; // NOTE: PDB_RECNAME must correspond with this. enum PDB_RECTYPE {ATOM=0, HETATM, CRYST1, TER, END, ANISOU, END_OF_FILE, @@ -129,12 +130,30 @@ class PDBfile::SSBOND { char name1_[4]; ///< Residue name 1 char name2_[4]; ///< Residue name 2 }; +/// Hold SYMOP record +class PDBfile::SymOp { + public: + typedef unsigned short Itype; + SymOp(); + /// CONSTRUCTOR - construct from NNNMMM character string + SymOp(const char*); + /// \return true if no symmetry operation required + bool NoOp() const { return (idx_ == 1 && ix_ == 5 && iy_ == 5 && iz_ == 5); } + /// \return the NNNMMM SYMOP character string + std::string OpString() const; + private: + Itype idx_; ///< Symmetry op # + Itype ix_; ///< Cell translation along X + Itype iy_; ///< Cell translation along X + Itype iz_; ///< Cell translation along X +}; /// Hold information for a LINK record. class PDBfile::Link { public: Link(); Link(const char*, char, const char*, char, int, char, - const char*, char, const char*, char, int, char); + const char*, char, const char*, char, int, char, + SymOp const&, SymOp const&); Link(Link const&); Link& operator=(Link const&); int Rnum1() const { return rnum1_; } @@ -149,8 +168,9 @@ class PDBfile::Link { char Chain2() const { return chain2_; } char Icode1() const { return icode1_; } char Icode2() const { return icode2_; } + SymOp const& Sym1() const { return sym1_; } + SymOp const& Sym2() const { return sym2_; } private: - // TODO symmop int rnum1_; int rnum2_; char aname1_[5]; @@ -163,5 +183,7 @@ class PDBfile::Link { char chain2_; char icode1_; char icode2_; + SymOp sym1_; + SymOp sym2_; }; #endif diff --git a/src/Parm_PDB.cpp b/src/Parm_PDB.cpp index 4c1be9c17c..05674e058a 100644 --- a/src/Parm_PDB.cpp +++ b/src/Parm_PDB.cpp @@ -111,9 +111,9 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { links.push_back( infile.pdb_Link() ); if (debug_ > 0) { PDBfile::Link const& lr = links.back(); - mprintf("DEBUG: Link record: %s %s %i to %s %s %i\n", - lr.aname1(), lr.rname1(), lr.Rnum1(), - lr.aname2(), lr.rname2(), lr.Rnum2()); + mprintf("DEBUG: Link record: %s %s %i %c to %s %s %i %c\n", + lr.aname1(), lr.rname1(), lr.Rnum1(), lr.Chain1(), + lr.aname2(), lr.rname2(), lr.Rnum2(), lr.Chain2()); } } else if (infile.RecType() == PDBfile::ATOM) { # ifdef TIMER @@ -185,6 +185,16 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { // Add LINK bonds. Need to search for original residue numbers here. if (!links.empty()) { for (Larray::const_iterator link = links.begin(); link != links.end(); ++link) { + // LINK records that require symmetry operations are not yet supported. + mprintf("DEBUG: LINK1 %s %s %i %c (%i) %s\n", link->aname1(), link->rname1(), link->Rnum1(), link->Chain1(), (int)link->Sym1().NoOp(), link->Sym1().OpString().c_str()); + mprintf("DEBUG: LINK2 %s %s %i %c (%i) %s\n", link->aname2(), link->rname2(), link->Rnum2(), link->Chain2(), (int)link->Sym2().NoOp(), link->Sym2().OpString().c_str()); + if (!link->Sym1().NoOp() || !link->Sym2().NoOp()) { + mprintf("Warning: LINK between atom %s res %s %i %c and atom %s res %s %i %c requires\n" + "Warning: symmetry operations, which is not yet supported. Skipping.\n", + link->aname1(), link->rname1(), link->Rnum1(), link->Chain1(), + link->aname2(), link->rname2(), link->Rnum2(), link->Chain2()); + continue; + } Topology::res_iterator r1 = TopIn.ResEnd(); Topology::res_iterator r2 = TopIn.ResEnd(); for (Topology::res_iterator res = TopIn.ResStart(); res != TopIn.ResEnd(); ++res) { diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 7e364c4b6e..3e3420feb0 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -341,7 +341,7 @@ NameType.o : NameType.cpp CpptrajStdio.h NameType.h NetcdfFile.o : NetcdfFile.cpp Atom.h AtomMask.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h Frame.h MaskToken.h Matrix_3x3.h Molecule.h NC_Routines.h NameType.h NetcdfFile.h Parallel.h ParallelNetcdf.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Unit.h Vec3.h Version.h OMM_helpers.o : OMM_helpers.cpp Constants.h OMM_helpers.h ParameterTypes.h OutputTrajCommon.o : OutputTrajCommon.cpp ActionFrameCounter.h ArgList.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h FileTypes.h Frame.h FramePtrArray.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h StringRoutines.h SymbolExporting.h Topology.h TrajectoryFile.h TrajectoryIO.h TypeNameHolder.h Unit.h Vec3.h -PDBfile.o : PDBfile.cpp Atom.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h NameType.h PDBfile.h Parallel.h Residue.h SymbolExporting.h +PDBfile.o : PDBfile.cpp Atom.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h NameType.h PDBfile.h Parallel.h Residue.h StringRoutines.h SymbolExporting.h PairList.o : PairList.cpp Atom.h AtomMask.h Box.h CoordinateInfo.h CpptrajStdio.h Frame.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h PairList.h Parallel.h ReplicaDimArray.h Residue.h Segment.h StringRoutines.h SymbolExporting.h Timer.h Unit.h Vec3.h Parallel.o : Parallel.cpp Parallel.h ParallelNetcdf.o : ParallelNetcdf.cpp CpptrajStdio.h Parallel.h ParallelNetcdf.h From adb91868af99738c06ff6d27a8b0b8e49be82967 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 11:52:19 -0400 Subject: [PATCH 074/368] Hide some debug info --- src/PDBfile.cpp | 4 ++-- src/Parm_PDB.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/PDBfile.cpp b/src/PDBfile.cpp index d68383c0aa..d3b41c76a2 100644 --- a/src/PDBfile.cpp +++ b/src/PDBfile.cpp @@ -78,7 +78,7 @@ PDBfile::SymOp::SymOp(const char* ptr) : idx_(1), ix_(5), iy_(5), iz_(5) iy_ = (Itype)atoi(numstr); numstr[0] = ptr[5]; iz_ = (Itype)atoi(numstr); - mprintf("DEBUG: idx= %hu ix= %hu iy= %hu iz= %hu\n", idx_, ix_, iy_, iz_); + //mprintf("DEBUG: idx= %hu ix= %hu iy= %hu iz= %hu\n", idx_, ix_, iy_, iz_); } /** \return String containing NNNMMM code. */ @@ -485,7 +485,7 @@ PDBfile::Link PDBfile::pdb_Link() { // Symmetry ops std::copy(linebuffer_+59, linebuffer_+65, sym1); std::copy(linebuffer_+66, linebuffer_+72, sym2); - mprintf("DEBUG: Sym1: %s Sym2: %s\n", sym1, sym2); + //mprintf("DEBUG: Sym1: %s Sym2: %s\n", sym1, sym2); } else code2 = ' '; // Residue numbers TODO restore nulled chars? diff --git a/src/Parm_PDB.cpp b/src/Parm_PDB.cpp index 05674e058a..0f0c773987 100644 --- a/src/Parm_PDB.cpp +++ b/src/Parm_PDB.cpp @@ -186,8 +186,8 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { if (!links.empty()) { for (Larray::const_iterator link = links.begin(); link != links.end(); ++link) { // LINK records that require symmetry operations are not yet supported. - mprintf("DEBUG: LINK1 %s %s %i %c (%i) %s\n", link->aname1(), link->rname1(), link->Rnum1(), link->Chain1(), (int)link->Sym1().NoOp(), link->Sym1().OpString().c_str()); - mprintf("DEBUG: LINK2 %s %s %i %c (%i) %s\n", link->aname2(), link->rname2(), link->Rnum2(), link->Chain2(), (int)link->Sym2().NoOp(), link->Sym2().OpString().c_str()); + //mprintf("DEBUG: LINK1 %s %s %i %c (%i) %s\n", link->aname1(), link->rname1(), link->Rnum1(), link->Chain1(), (int)link->Sym1().NoOp(), link->Sym1().OpString().c_str()); + //mprintf("DEBUG: LINK2 %s %s %i %c (%i) %s\n", link->aname2(), link->rname2(), link->Rnum2(), link->Chain2(), (int)link->Sym2().NoOp(), link->Sym2().OpString().c_str()); if (!link->Sym1().NoOp() || !link->Sym2().NoOp()) { mprintf("Warning: LINK between atom %s res %s %i %c and atom %s res %s %i %c requires\n" "Warning: symmetry operations, which is not yet supported. Skipping.\n", From 9a515eb89ae45453814ea20e85d9d1e1d82f4525 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 13:38:47 -0400 Subject: [PATCH 075/368] Make sure we actually keep track of what is removed. --- src/Exec_PrepareForLeap.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b809ec4695..cc3f9685a8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -975,7 +975,10 @@ const seg != mol->MolUnit().segEnd(); ++seg) for (int satm = seg->Begin(); satm < seg->End(); ++satm) + { atomsToKeep[satm] = false; + ++nRemoved; + } } } if (nRemoved == 0) From 74139a0b6c0010abc054f3f60dc726ea37343d1f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 13:47:03 -0400 Subject: [PATCH 076/368] Use water mask instead of internal definition of solvent to catch thinks like LINKed HOH molecules --- src/Exec_PrepareForLeap.cpp | 29 +++++++++++++++++++++++------ src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index cc3f9685a8..e8641da078 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -23,7 +23,8 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] name [pdbout ]\n" "\t[leapunitname ] [out [skiperrors]\n" - "\t[nowat] [noh] [keepaltloc ] [stripmask ]\n" + "\t[nowat [watermask ] [noh] [keepaltloc ]\n" + "\t[stripmask ]\n" "\t[{nodisulfides |\n" "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" @@ -948,7 +949,8 @@ const /** Modify coords according to user wishes. */ int Exec_PrepareForLeap::ModifyCoords( Topology& topIn, Frame& frameIn, bool remove_water, bool remove_h, - char altLocChar, std::string const& stripMask ) + char altLocChar, std::string const& stripMask, + std::string const& waterMask ) const { // Create a mask denoting which atoms will be kept. @@ -968,6 +970,19 @@ const } } if (remove_water) { + // Do not use cpptraj definition of solvent in case we have e.g. bound HOH + AtomMask mask; + if (mask.SetMaskString( waterMask )) { + mprinterr("Error: Invalid solvent mask string '%s'\n", waterMask.c_str()); + return 1; + } + if (topIn.SetupIntegerMask( mask )) return 1; + mask.MaskInfo(); + if (!mask.None()) { + for (AtomMask::const_iterator atm = mask.begin(); atm != mask.end(); ++atm) + atomsToKeep[*atm] = false; + } +/* unsigned int nRemoved = 0; for (Topology::mol_iterator mol = topIn.MolStart(); mol != topIn.MolEnd(); ++mol) { if (mol->IsSolvent()) { @@ -985,6 +1000,7 @@ const mprintf("\tNo solvent to remove.\n"); else mprintf("\t# solvent removed: %u\n", nRemoved); +*/ } if (remove_h) { for (Topology::atom_iterator atom = topIn.begin(); atom != topIn.end(); ++atom) { @@ -1089,8 +1105,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tWill attempt to prepare sugars.\n"); // Deal with any coordinate modifications - bool remove_water = argIn.hasKey("nowat"); - bool remove_h = argIn.hasKey("noh"); + bool remove_water = argIn.hasKey("nowat"); + std::string waterMask = argIn.GetStringKey("watermask", ":HOH"); + bool remove_h = argIn.hasKey("noh"); std::string altLocArg = argIn.GetStringKey("keepaltloc"); char altLocChar = '\0'; if (!altLocArg.empty()) @@ -1123,14 +1140,14 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } if (remove_water) - mprintf("\tRemoving solvent.\n"); + mprintf("\tRemoving solvent. Solvent mask= '%s'\n", waterMask.c_str()); if (remove_h) mprintf("\tRemoving hydrogens.\n"); if (altLocChar != '\0') mprintf("\tIf present, keeping only alternate atom locations denoted by '%c'\n", altLocChar); if (!stripMask.empty()) mprintf("\tRemoving atoms in mask '%s'\n", stripMask.c_str()); - if (ModifyCoords( topIn, frameIn, remove_water, remove_h, altLocChar, stripMask )) + if (ModifyCoords( topIn, frameIn, remove_water, remove_h, altLocChar, stripMask, waterMask )) { mprinterr("Error: Modification of '%s' failed.\n", coords.legend()); return CpptrajState::ERR; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 96b5879e12..754baa686d 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -31,7 +31,7 @@ class Exec_PrepareForLeap : public Exec { int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*) const; - int ModifyCoords(Topology&, Frame&, bool, bool, char, std::string const&) const; + int ModifyCoords(Topology&, Frame&, bool, bool, char, std::string const&, std::string const&) const; std::string leapunitname_; typedef std::pair PairType; From c6d2838aa60e84bba510237c0ce5816851ce5203 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 14:28:22 -0400 Subject: [PATCH 077/368] Start adding HIS protonation detection --- src/Exec_PrepareForLeap.cpp | 69 +++++++++++++++++++++++++++++++++++-- src/Exec_PrepareForLeap.h | 3 ++ 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e8641da078..dbc92a3b91 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1048,6 +1048,58 @@ const return 0; } +/** Try to determine histidine protonation. + * \param HisResNames Array containing final histidine residue names. + * \param HisResIdxs Array containing residue indices of histidine residues (correspond to HisResNames). + * \param topIn Input topology. + * \param ND1 ND1 atom name. + * \param NE2 NE2 atom name. + * \param HisName PDB histidine name. + * \param HieName Name for epsilon-protonated His. + * \param HidName Name for delta-protonated His. + * \param HipName Name for doubly-protonated His. + */ +int Exec_PrepareForLeap::DetermineHisProt( std::vector& HisResNames, + std::vector& HisResIdxs, + Topology const& topIn, + NameType const& ND1, + NameType const& NE2, + NameType const& HisName, + NameType const& HieName, + NameType const& HidName, + NameType const& HipName ) +const +{ + std::string hisMaskStr = ":" + HisName.Truncated(); + AtomMask mask; + if (mask.SetMaskString( hisMaskStr )) { + mprinterr("Error: Invalid His mask string: %s\n", hisMaskStr.c_str()); + return 1; + } + if ( topIn.SetupIntegerMask( mask )) return 1; + mask.MaskInfo(); + HisResIdxs = topIn.ResnumsSelectedBy( mask ); + + for (std::vector::const_iterator rnum = HisResIdxs.begin(); + rnum != HisResIdxs.end(); ++rnum) + { + int nd1idx = -1; + int ne2idx = -1; + Residue const& hisRes = topIn.Res( *rnum ); + for (int at = hisRes.FirstAtom(); at < hisRes.LastAtom(); ++at) + { + if ( (topIn[at].Name() == ND1 ) ) + nd1idx = at; + else if ( (topIn[at].Name() == NE2 ) ) + ne2idx = at; + } + mprintf("DEBUG: %s nd1idx= %i ne2idx= %i\n", + topIn.TruncResNameNum( *rnum ).c_str(), nd1idx+1, ne2idx+1); + } + + return 0; +} + // Exec_PrepareForLeap::Execute() Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { @@ -1104,6 +1156,17 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else mprintf("\tWill attempt to prepare sugars.\n"); + // Do histidine detection before any atoms are removed so we keep H if present + std::vector HisResIdxs; + std::vector HisResNames; + if (!argIn.hasKey("nohisdetect")) { + if (DetermineHisProt( HisResNames, HisResIdxs, topIn, + "ND1", "NE2", "HIS", "HIE", "HID", "HIP")) { + mprinterr("Error: HIS protonation detection failed.\n"); + return CpptrajState::ERR; + } + } + // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); std::string waterMask = argIn.GetStringKey("watermask", ":HOH"); @@ -1115,11 +1178,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) std::string stripMask = argIn.GetStringKey("stripmask"); // Check if alternate atom location IDs are present - if (!coords.Top().AtomAltLoc().empty()) { + if (!topIn.AtomAltLoc().empty()) { // For LEaP, must have only 1 atom alternate location char firstAltLoc = ' '; - for (std::vector::const_iterator altLocId = coords.Top().AtomAltLoc().begin(); - altLocId != coords.Top().AtomAltLoc().end(); + for (std::vector::const_iterator altLocId = topIn.AtomAltLoc().begin(); + altLocId != topIn.AtomAltLoc().end(); ++altLocId) { if (firstAltLoc == ' ') { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 754baa686d..e514db1ff1 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -32,6 +32,9 @@ class Exec_PrepareForLeap : public Exec { int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*) const; int ModifyCoords(Topology&, Frame&, bool, bool, char, std::string const&, std::string const&) const; + int DetermineHisProt(std::vector&, std::vector&, Topology const&, + NameType const&, NameType const&, + NameType const&, NameType const&, NameType const&, NameType const&) const; std::string leapunitname_; typedef std::pair PairType; From ca325dc5c56c948b768fd4d5c381dafc313ba94f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 14:35:54 -0400 Subject: [PATCH 078/368] Add user keywords --- src/Exec_PrepareForLeap.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index dbc92a3b91..e8bab0a4c2 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -25,6 +25,9 @@ void Exec_PrepareForLeap::Help() const "\t[leapunitname ] [out [skiperrors]\n" "\t[nowat [watermask ] [noh] [keepaltloc ]\n" "\t[stripmask ]\n" + "\t[{nohisdetect |\n" + "\t [nd1 ] [ne2 ] [hiename ]\n" + "\t [hidname ] [hipname ] [disulfidecut ] [newcysname ]}]\n" @@ -1160,8 +1163,22 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) std::vector HisResIdxs; std::vector HisResNames; if (!argIn.hasKey("nohisdetect")) { + std::string nd1name = argIn.GetStringKey("nd1", "ND1"); + std::string ne2name = argIn.GetStringKey("ne2", "NE2"); + std::string hisname = argIn.GetStringKey("hisname", "HIS"); + std::string hiename = argIn.GetStringKey("hiename", "HIE"); + std::string hidname = argIn.GetStringKey("hidname", "HID"); + std::string hipname = argIn.GetStringKey("hipname", "HIP"); + mprintf("\tHistidine protonation detection:\n"); + mprintf("\t\tND1 atom name : %s\n", nd1name.c_str()); + mprintf("\t\tNE2 atom name : %s\n", ne2name.c_str()); + mprintf("\t\tHistidine original residue name : %s\n", hisname.c_str()); + mprintf("\t\tEpsilon-protonated residue name : %s\n", hiename.c_str()); + mprintf("\t\tDelta-protonated residue name : %s\n", hidname.c_str()); + mprintf("\t\tDoubly-protonated residue name : %s\n", hipname.c_str()); if (DetermineHisProt( HisResNames, HisResIdxs, topIn, - "ND1", "NE2", "HIS", "HIE", "HID", "HIP")) { + nd1name, ne2name, + hisname, hiename, hidname, hipname)) { mprinterr("Error: HIS protonation detection failed.\n"); return CpptrajState::ERR; } From 7460d3d3d21eed87b264a7e3cf998ee5fe79c37a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 14:43:19 -0400 Subject: [PATCH 079/368] Try to detect protonation by bonds to H --- src/Exec_PrepareForLeap.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e8bab0a4c2..470f5141e6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1083,6 +1083,8 @@ const mask.MaskInfo(); HisResIdxs = topIn.ResnumsSelectedBy( mask ); + HisResNames.clear(); + HisResNames.reserve( HisResIdxs.size() ); for (std::vector::const_iterator rnum = HisResIdxs.begin(); rnum != HisResIdxs.end(); ++rnum) { @@ -1098,7 +1100,39 @@ const } mprintf("DEBUG: %s nd1idx= %i ne2idx= %i\n", topIn.TruncResNameNum( *rnum ).c_str(), nd1idx+1, ne2idx+1); + // Check for H bonded to nd1/ne2 + int nd1h = 0; + for (Atom::bond_iterator bat = topIn[nd1idx].bondbegin(); + bat != topIn[nd1idx].bondend(); + ++bat) + if ( topIn[*bat].Element() == Atom::HYDROGEN) + ++nd1h; + if (nd1h > 1) { + mprinterr("Error: More than 1 hydrogen bonded to %s\n", + topIn.ResNameNumAtomNameNum(nd1idx).c_str()); + return 1; + } + int ne2h = 0; + for (Atom::bond_iterator bat = topIn[ne2idx].bondbegin(); + bat != topIn[ne2idx].bondend(); + ++bat) + if ( topIn[*bat].Element() == Atom::HYDROGEN) + ++ne2h; + if (ne2h > 1) { + mprinterr("Error: More than 1 hydrogen bonded to %s\n", + topIn.ResNameNumAtomNameNum(ne2idx).c_str()); + return 1; + } + if (nd1h > 0 && ne2h > 0) + HisResNames.push_back( HipName ); + else if (nd1h > 0) + HisResNames.push_back( HidName ); + else if (ne2h > 0) + HisResNames.push_back( HieName ); } + mprintf("\tFinal names:\n"); + for (unsigned int idx = 0; idx < HisResIdxs.size(); idx++) + mprintf("\t\t%i %s\n", HisResIdxs[idx]+1, *HisResNames[idx]); return 0; } From 0a5bdd7652b1fad0f6a0798ab1436411df85d713 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 14:46:32 -0400 Subject: [PATCH 080/368] Actually do the his name change --- src/Exec_PrepareForLeap.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 470f5141e6..9203c18c47 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1372,6 +1372,10 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } + // Change HIS res names + for (unsigned int idx = 0; idx != HisResIdxs.size(); idx++) + ChangeResName( topIn.SetRes(HisResIdxs[idx]), HisResNames[idx] ); + // Try to set terminal residues if (!molMasks.empty() || determineMolMask.MaskStringSet()) { // Reset terminal status From 9492e0469aa43d616c72fe93f217189de4b75a7a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 9 Aug 2021 15:23:55 -0400 Subject: [PATCH 081/368] Set a default his name --- src/Exec_PrepareForLeap.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9203c18c47..4f0f2a0072 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1129,6 +1129,11 @@ const HisResNames.push_back( HidName ); else if (ne2h > 0) HisResNames.push_back( HieName ); + else { + // Default to epsilon + mprintf("\tUsing default name '%s' for %s\n", *HieName, topIn.TruncResNameNum(*rnum).c_str()); + HisResNames.push_back( HieName ); + } } mprintf("\tFinal names:\n"); for (unsigned int idx = 0; idx < HisResIdxs.size(); idx++) From 3a67188d493c08a624374da720cf5acfdf92acdd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 11:26:45 -0400 Subject: [PATCH 082/368] Try to inform which residues may be problematic for leap --- dat/PDB_ResidueNames.txt | 41 ++++++++++++++ src/Exec_PrepareForLeap.cpp | 107 +++++++++++++++++++++++++++++++----- src/Exec_PrepareForLeap.h | 13 ++++- src/Makefile | 1 + 4 files changed, 145 insertions(+), 17 deletions(-) create mode 100644 dat/PDB_ResidueNames.txt diff --git a/dat/PDB_ResidueNames.txt b/dat/PDB_ResidueNames.txt new file mode 100644 index 0000000000..3d4fb5e201 --- /dev/null +++ b/dat/PDB_ResidueNames.txt @@ -0,0 +1,41 @@ +# A list of PDB residue names that Amber FFs will recognize. +# Protein +ACE +ALA +ARG +ASH +ASN +ASP +CYM +CYS +CYX +GLH +GLN +GLU +GLY +HIE +HIP +HIS +ILE +LEU +LYN +LYS +MET +NME +PHE +PRO +SER +THR +TRP +TYR +VAL +# DNA +DA +DC +DG +DT +# RNA +A +C +G +U diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4f0f2a0072..e57ce9d04f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -116,6 +116,50 @@ void Exec_PrepareForLeap::SetGlycamPdbResMap() { pdb_to_glycam_.insert( PairType("MAN", 'M') ); } +/** Load PDB residue names recognized by Amber FFs from file. */ +int Exec_PrepareForLeap::LoadPdbResNames(std::string const& fnameIn) +{ + std::string fname; + if (fnameIn.empty()) { + // Check CPPTRAJHOME + const char* env = getenv("CPPTRAJHOME"); + if (env != 0) { + fname.assign(env); + fname += "/dat/PDB_ResidueNames.txt"; + } + mprintf("Info: Parameter file path from CPPTRAJHOME variable: '%s'\n", fname.c_str()); + } + if (fname.empty()) { + mprintf("Warning: No PDB residue name file specified and/or CPPTRAJHOME not set.\n"); + //SetGlycamPdbResMap(); + return 0; + } + mprintf("\tReading PDB residue names from '%s'\n", fname.c_str()); + + CpptrajFile infile; + if (infile.OpenRead(fname)) { + mprinterr("Error: Could not open PDB residue name file.\n"); + return 1; + } + const char* ptr = 0; + while ( (ptr = infile.NextLine()) != 0 ) { + ArgList argline( ptr, " " ); + if (argline.Nargs() > 0) { + if (argline[0][0] != '#') { + pdb_res_names_.insert( argline[0] ); + } + } + } + infile.CloseFile(); + + // DEBUG + mprintf("\tPDB residue names recognized by Amber FF:\n"); + for (SetType::const_iterator it = pdb_res_names_.begin(); it != pdb_res_names_.end(); ++it) + mprintf("\t %s\n", *(*it)); + + return 0; +} + /** Load PDB to Glycam residue map from file. */ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) { @@ -411,7 +455,6 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector& sugarBondsToRemove) -const { Residue& res = topIn.SetRes(rnum); // Try to ID the base sugar type from the input name. @@ -645,12 +688,16 @@ const Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); if ( pres.Name() == "SER" ) { ChangeResName( pres, "OLS" ); + resStat_[topIn[*bat].ResNum()] = VALIDATED; } else if ( pres.Name() == "THR" ) { ChangeResName( pres, "OLT" ); + resStat_[topIn[*bat].ResNum()] = VALIDATED; } else if ( pres.Name() == "HYP" ) { ChangeResName( pres, "OLP" ); + resStat_[topIn[*bat].ResNum()] = VALIDATED; } else if ( pres.Name() == "ASN" ) { ChangeResName( pres, "NLN" ); + resStat_[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); } @@ -697,13 +744,13 @@ const NameType newResName( linkcode + std::string(1,resChar) + formStr ); mprintf("\t Glycam resname: %s\n", *newResName); ChangeResName(res, newResName); + resStat_[rnum] = VALIDATED; return 0; } /** Prepare sugars for leap. */ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, Frame const& frameIn, CpptrajFile* outfile) -const { std::set sugarBondsToRemove; mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); @@ -822,7 +869,6 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co std::string const& cysmaskstr, bool searchForNewDisulfides, Topology& topIn, Frame const& frameIn, CpptrajFile* outfile) -const { // Disulfide search NameType newcysname(newcysnamestr); @@ -942,6 +988,7 @@ const LeapBond(at1, at2, topIn, outfile); } ChangeResName(topIn.SetRes(topIn[at1].ResNum()), newcysname); + resStat_[topIn[at1].ResNum()] = VALIDATED; } } mprintf("\tDetected %i disulfide bonds.\n", nDisulfides); @@ -1081,12 +1128,14 @@ const } if ( topIn.SetupIntegerMask( mask )) return 1; mask.MaskInfo(); - HisResIdxs = topIn.ResnumsSelectedBy( mask ); + std::vector resIdxs = topIn.ResnumsSelectedBy( mask ); + HisResIdxs.clear(); + HisResIdxs.reserve( resIdxs.size() ); HisResNames.clear(); - HisResNames.reserve( HisResIdxs.size() ); - for (std::vector::const_iterator rnum = HisResIdxs.begin(); - rnum != HisResIdxs.end(); ++rnum) + HisResNames.reserve( resIdxs.size() ); + for (std::vector::const_iterator rnum = resIdxs.begin(); + rnum != resIdxs.end(); ++rnum) { int nd1idx = -1; int ne2idx = -1; @@ -1123,17 +1172,21 @@ const topIn.ResNameNumAtomNameNum(ne2idx).c_str()); return 1; } - if (nd1h > 0 && ne2h > 0) + if (nd1h > 0 && ne2h > 0) { HisResNames.push_back( HipName ); - else if (nd1h > 0) + HisResIdxs.push_back( *rnum ); + } else if (nd1h > 0) { HisResNames.push_back( HidName ); - else if (ne2h > 0) - HisResNames.push_back( HieName ); - else { - // Default to epsilon - mprintf("\tUsing default name '%s' for %s\n", *HieName, topIn.TruncResNameNum(*rnum).c_str()); + HisResIdxs.push_back( *rnum ); + } else if (ne2h > 0) { HisResNames.push_back( HieName ); + HisResIdxs.push_back( *rnum ); } + //else { + // // Default to epsilon + // mprintf("\tUsing default name '%s' for %s\n", *HieName, topIn.TruncResNameNum(*rnum).c_str()); + // HisResNames.push_back( HieName ); + //} } mprintf("\tFinal names:\n"); for (unsigned int idx = 0; idx < HisResIdxs.size(); idx++) @@ -1272,6 +1325,15 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } + // Each residue starts out unknown. + resStat_.assign( topIn.Nres(), UNKNOWN ); + + // Load PDB residue names recognized by amber + if (LoadPdbResNames( argIn.GetStringKey("resnamefile" ) )) { + mprinterr("Error: PDB residue name file load failed.\n"); + return CpptrajState::ERR; + } + // Load PDB to glycam residue name map if (prepare_sugars) { if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { @@ -1377,6 +1439,23 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } + // Residue validation. + mprintf("\tResidue status:\n"); + for (ResStatArray::iterator it = resStat_.begin(); it != resStat_.end(); ++it) + { + //if ( *it == VALIDATED ) + // mprintf("\t\t%s VALIDATED\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + //else + // mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + if ( *it != VALIDATED ) { + SetType::const_iterator pname = pdb_res_names_.find( topIn.Res(it-resStat_.begin()).Name() ); + if (pname == pdb_res_names_.end()) + mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + else + *it = VALIDATED; + } + } + // Change HIS res names for (unsigned int idx = 0; idx != HisResIdxs.size(); idx++) ChangeResName( topIn.SetRes(HisResIdxs[idx]), HisResNames[idx] ); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index e514db1ff1..a6aae12520 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -19,6 +19,8 @@ class Exec_PrepareForLeap : public Exec { void SetGlycamPdbResMap(); /// Load PDB res to glycam map from dat file int LoadGlycamPdbResMap(std::string const&); + // Load PDB residue names recognized by Amber FFs from dat file + int LoadPdbResNames(std::string const&); void LeapBond(int,int,Topology const&, CpptrajFile*) const; int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; @@ -26,11 +28,11 @@ class Exec_PrepareForLeap : public Exec { int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; - int IdentifySugar(int, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&) const; - int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*) const; + int IdentifySugar(int, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); + int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, - Topology&, Frame const&, CpptrajFile*) const; + Topology&, Frame const&, CpptrajFile*); int ModifyCoords(Topology&, Frame&, bool, bool, char, std::string const&, std::string const&) const; int DetermineHisProt(std::vector&, std::vector&, Topology const&, NameType const&, NameType const&, @@ -40,6 +42,11 @@ class Exec_PrepareForLeap : public Exec { typedef std::pair PairType; typedef std::map MapType; MapType pdb_to_glycam_; ///< Map PDB residue names to Glycam 1 char names + typedef std::set SetType; + SetType pdb_res_names_; ///< PDB residue names recognized by Amber FFs bool errorsAreFatal_; ///< If false, try to skip errors. + enum ResStatType { UNKNOWN = 0, VALIDATED }; + typedef std::vector ResStatArray; + ResStatArray resStat_; ///< Contain status of each residue }; #endif diff --git a/src/Makefile b/src/Makefile index d912f1cb46..eef12e45a6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -37,6 +37,7 @@ install_dat: cp ../dat/Karplus.txt $(CPPTRAJDAT)/ cp ../dat/README $(CPPTRAJDAT)/ cp ../dat/Carbohydrate_PDB_Glycam_Names.txt $(CPPTRAJDAT)/ + cp ../dat/PDB_ResidueNames.txt $(CPPTRAJDAT)/ # Static libraries --------------------- #$(CPPTRAJLIB)/libcpptraj.a: $(LIBCPPTRAJ_OBJECTS) $(FFT_TARGET) $(CUDA_TARGET) From b804f35f857704dc47434db407f8ea60f7208479 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 12:43:03 -0400 Subject: [PATCH 083/368] Report on unreognized sugar linkages --- src/Exec_PrepareForLeap.cpp | 6 +++++- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e57ce9d04f..3e4c6cd0d2 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -700,6 +700,7 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, resStat_[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); + resStat_[topIn[*bat].ResNum()] = UNRECOGNIZED_SUGAR_LINKAGE; } } else { mprintf("\t Sugar %s bonded to sugar %s\n", @@ -1447,12 +1448,15 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // mprintf("\t\t%s VALIDATED\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); //else // mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); - if ( *it != VALIDATED ) { + if ( *it == UNKNOWN ) { SetType::const_iterator pname = pdb_res_names_.find( topIn.Res(it-resStat_.begin()).Name() ); if (pname == pdb_res_names_.end()) mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); else *it = VALIDATED; + } else if ( *it == UNRECOGNIZED_SUGAR_LINKAGE ) { + mprintf("\t\t%s is linked to a sugar but has no sugar-linkage form.\n", + topIn.TruncResNameNum(it-resStat_.begin()).c_str()); } } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index a6aae12520..132fe03e90 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -45,7 +45,7 @@ class Exec_PrepareForLeap : public Exec { typedef std::set SetType; SetType pdb_res_names_; ///< PDB residue names recognized by Amber FFs bool errorsAreFatal_; ///< If false, try to skip errors. - enum ResStatType { UNKNOWN = 0, VALIDATED }; + enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE }; typedef std::vector ResStatArray; ResStatArray resStat_; ///< Contain status of each residue }; From 3df676b0261e3415b01c49f4143d1b94bf7866a7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 12:57:34 -0400 Subject: [PATCH 084/368] Add status for missing C1 substituent --- src/Exec_PrepareForLeap.cpp | 6 +++++- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3e4c6cd0d2..8d359c153d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -595,6 +595,7 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, int ret = CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, topIn, frameIn, IsRingAtom); if (ret < 0) { // This means C1 X substituent missing; non-fatal. + resStat_[rnum] = SUGAR_MISSING_C1X; return 0; } else if (ret > 0) { // Error @@ -1441,7 +1442,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // Residue validation. - mprintf("\tResidue status:\n"); + mprintf("\tResidues with potential problems:\n"); for (ResStatArray::iterator it = resStat_.begin(); it != resStat_.end(); ++it) { //if ( *it == VALIDATED ) @@ -1457,6 +1458,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } else if ( *it == UNRECOGNIZED_SUGAR_LINKAGE ) { mprintf("\t\t%s is linked to a sugar but has no sugar-linkage form.\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + } else if ( *it == SUGAR_MISSING_C1X ) { + mprintf("\t\t%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", + topIn.TruncResNameNum(it-resStat_.begin()).c_str()); } } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 132fe03e90..c3ea09bf19 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -45,7 +45,7 @@ class Exec_PrepareForLeap : public Exec { typedef std::set SetType; SetType pdb_res_names_; ///< PDB residue names recognized by Amber FFs bool errorsAreFatal_; ///< If false, try to skip errors. - enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE }; + enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X }; typedef std::vector ResStatArray; ResStatArray resStat_; ///< Contain status of each residue }; From bb912a88357e17518b035b3bd0d5cd2521fa46c0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 13:10:30 -0400 Subject: [PATCH 085/368] Fix output message --- src/Exec_PrepareForLeap.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8d359c153d..9d1244e562 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1327,6 +1327,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } + // TODO new bond grid search? + // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); @@ -1452,7 +1454,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if ( *it == UNKNOWN ) { SetType::const_iterator pname = pdb_res_names_.find( topIn.Res(it-resStat_.begin()).Name() ); if (pname == pdb_res_names_.end()) - mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + mprintf("\t\t%s is an unrecognized name and may not have parameters.\n", + topIn.TruncResNameNum(it-resStat_.begin()).c_str()); else *it = VALIDATED; } else if ( *it == UNRECOGNIZED_SUGAR_LINKAGE ) { From ecf12ac4a4411010150f3942320cbc534ccfcb61 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 13:31:25 -0400 Subject: [PATCH 086/368] Add status for sugar ring oxygen missing --- src/Exec_PrepareForLeap.cpp | 9 +++++++-- src/Exec_PrepareForLeap.h | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9d1244e562..9aac4e0231 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -512,8 +512,10 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, } // TODO handle case where multiple potential ring start atoms exist if (potentialRingStartAtoms.empty()) { - mprinterr("Error: Ring oxygen could not be identified\n"); - return 1; + mprintf("Warning: Ring oxygen could not be identified for %s\n", + topIn.TruncResNameNum(rnum).c_str()); + resStat_[rnum] = SUGAR_MISSING_RING_O; + return 0; } else if (potentialRingStartAtoms.size() > 1) { mprinterr("Error: Multiple potential ring start atoms:\n"); for (std::vector::const_iterator it = potentialRingStartAtoms.begin(); @@ -1464,6 +1466,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } else if ( *it == SUGAR_MISSING_C1X ) { mprintf("\t\t%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + } else if ( *it == SUGAR_MISSING_RING_O ) { + mprintf("\t\t%s Sugar is missing ring oxygen and cannot be identified.\n", + topIn.TruncResNameNum(it-resStat_.begin()).c_str()); } } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c3ea09bf19..d942063ddc 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -45,7 +45,8 @@ class Exec_PrepareForLeap : public Exec { typedef std::set SetType; SetType pdb_res_names_; ///< PDB residue names recognized by Amber FFs bool errorsAreFatal_; ///< If false, try to skip errors. - enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X }; + enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, + SUGAR_MISSING_RING_O }; typedef std::vector ResStatArray; ResStatArray resStat_; ///< Contain status of each residue }; From e907119383284fef8ada70ea2bc4e52c69f2cdcc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 13:35:52 -0400 Subject: [PATCH 087/368] Start cleaning up output, use a debug level --- src/Exec_PrepareForLeap.cpp | 17 +++++++++++------ src/Exec_PrepareForLeap.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9aac4e0231..2e1f331584 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1124,6 +1124,7 @@ int Exec_PrepareForLeap::DetermineHisProt( std::vector& HisResNames, NameType const& HipName ) const { + mprintf("\tAttempting to determine histidine form from any existing H atoms.\n"); std::string hisMaskStr = ":" + HisName.Truncated(); AtomMask mask; if (mask.SetMaskString( hisMaskStr )) { @@ -1151,8 +1152,9 @@ const else if ( (topIn[at].Name() == NE2 ) ) ne2idx = at; } - mprintf("DEBUG: %s nd1idx= %i ne2idx= %i\n", - topIn.TruncResNameNum( *rnum ).c_str(), nd1idx+1, ne2idx+1); + if (debug_ > 1) + mprintf("DEBUG: %s nd1idx= %i ne2idx= %i\n", + topIn.TruncResNameNum( *rnum ).c_str(), nd1idx+1, ne2idx+1); // Check for H bonded to nd1/ne2 int nd1h = 0; for (Atom::bond_iterator bat = topIn[nd1idx].bondbegin(); @@ -1192,16 +1194,19 @@ const // HisResNames.push_back( HieName ); //} } - mprintf("\tFinal names:\n"); - for (unsigned int idx = 0; idx < HisResIdxs.size(); idx++) - mprintf("\t\t%i %s\n", HisResIdxs[idx]+1, *HisResNames[idx]); - + if (!HisResIdxs.empty()) { + mprintf("\tChanged histidine names:\n"); + for (unsigned int idx = 0; idx < HisResIdxs.size(); idx++) + mprintf("\t\t%i %s\n", HisResIdxs[idx]+1, *HisResNames[idx]); + } else + mprintf("\tNo histidine names were changed.\n"); return 0; } // Exec_PrepareForLeap::Execute() Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { + debug_ = State.Debug(); errorsAreFatal_ = !argIn.hasKey("skiperrors"); // Get input coords std::string crdset = argIn.GetStringKey("crdset"); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index d942063ddc..eb86f990a9 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -49,5 +49,6 @@ class Exec_PrepareForLeap : public Exec { SUGAR_MISSING_RING_O }; typedef std::vector ResStatArray; ResStatArray resStat_; ///< Contain status of each residue + int debug_; ///< Debug level }; #endif From aa2b17bae8805fe9eb83909598551248d9e651e8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 13:50:57 -0400 Subject: [PATCH 088/368] Add standard set of pdb residue names if file not found --- src/Exec_PrepareForLeap.cpp | 64 +++++++++++++++++++++++++++++++------ src/Exec_PrepareForLeap.h | 4 ++- 2 files changed, 58 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2e1f331584..b24d00e83e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -107,13 +107,48 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag return linkcode; } -/** Load reduced interal PDB to Glycam map. */ -void Exec_PrepareForLeap::SetGlycamPdbResMap() { - pdb_to_glycam_.insert( PairType("NAG", 'Y') ); - pdb_to_glycam_.insert( PairType("FUC", 'F') ); - pdb_to_glycam_.insert( PairType("GAL", 'L') ); - pdb_to_glycam_.insert( PairType("BMA", 'M') ); - pdb_to_glycam_.insert( PairType("MAN", 'M') ); +/** If file not present, use a default set of residue names. */ +void Exec_PrepareForLeap::SetPdbResNames() { + //Protein + pdb_res_names_.insert("ACE"); + pdb_res_names_.insert("ALA"); + pdb_res_names_.insert("ARG"); + pdb_res_names_.insert("ASH"); + pdb_res_names_.insert("ASN"); + pdb_res_names_.insert("ASP"); + pdb_res_names_.insert("CYM"); + pdb_res_names_.insert("CYS"); + pdb_res_names_.insert("CYX"); + pdb_res_names_.insert("GLH"); + pdb_res_names_.insert("GLN"); + pdb_res_names_.insert("GLU"); + pdb_res_names_.insert("GLY"); + pdb_res_names_.insert("HIE"); + pdb_res_names_.insert("HIP"); + pdb_res_names_.insert("HIS"); + pdb_res_names_.insert("ILE"); + pdb_res_names_.insert("LEU"); + pdb_res_names_.insert("LYN"); + pdb_res_names_.insert("LYS"); + pdb_res_names_.insert("MET"); + pdb_res_names_.insert("NME"); + pdb_res_names_.insert("PHE"); + pdb_res_names_.insert("PRO"); + pdb_res_names_.insert("SER"); + pdb_res_names_.insert("THR"); + pdb_res_names_.insert("TRP"); + pdb_res_names_.insert("TYR"); + pdb_res_names_.insert("VAL"); + // DNA + pdb_res_names_.insert("DA"); + pdb_res_names_.insert("DC"); + pdb_res_names_.insert("DG"); + pdb_res_names_.insert("DT"); + // RNA + pdb_res_names_.insert("A"); + pdb_res_names_.insert("C"); + pdb_res_names_.insert("G"); + pdb_res_names_.insert("U"); } /** Load PDB residue names recognized by Amber FFs from file. */ @@ -130,8 +165,9 @@ int Exec_PrepareForLeap::LoadPdbResNames(std::string const& fnameIn) mprintf("Info: Parameter file path from CPPTRAJHOME variable: '%s'\n", fname.c_str()); } if (fname.empty()) { - mprintf("Warning: No PDB residue name file specified and/or CPPTRAJHOME not set.\n"); - //SetGlycamPdbResMap(); + mprintf("Warning: No PDB residue name file specified and/or CPPTRAJHOME not set.\n" + "Warning: Using standard set of PDB residue names.\n"); + SetPdbResNames(); return 0; } mprintf("\tReading PDB residue names from '%s'\n", fname.c_str()); @@ -160,6 +196,15 @@ int Exec_PrepareForLeap::LoadPdbResNames(std::string const& fnameIn) return 0; } +/** Load reduced interal PDB to Glycam map. */ +void Exec_PrepareForLeap::SetGlycamPdbResMap() { + pdb_to_glycam_.insert( PairType("NAG", 'Y') ); + pdb_to_glycam_.insert( PairType("FUC", 'F') ); + pdb_to_glycam_.insert( PairType("GAL", 'L') ); + pdb_to_glycam_.insert( PairType("BMA", 'M') ); + pdb_to_glycam_.insert( PairType("MAN", 'M') ); +} + /** Load PDB to Glycam residue map from file. */ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) { @@ -1261,6 +1306,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tWill attempt to prepare sugars.\n"); // Do histidine detection before any atoms are removed so we keep H if present + // TODO if any histidines are removed, this will fail. std::vector HisResIdxs; std::vector HisResNames; if (!argIn.hasKey("nohisdetect")) { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index eb86f990a9..5b24b1dbe5 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -19,7 +19,9 @@ class Exec_PrepareForLeap : public Exec { void SetGlycamPdbResMap(); /// Load PDB res to glycam map from dat file int LoadGlycamPdbResMap(std::string const&); - // Load PDB residue names recognized by Amber FFs from dat file + /// Set PDB residue names recognized by Amber FFs + void SetPdbResNames(); + /// Load PDB residue names recognized by Amber FFs from dat file int LoadPdbResNames(std::string const&); void LeapBond(int,int,Topology const&, CpptrajFile*) const; From 12cabedda3c147a5ac02d051265d240f269c7204 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 13:54:55 -0400 Subject: [PATCH 089/368] Cleanup file load output --- src/Exec_PrepareForLeap.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b24d00e83e..f27b690ce6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -188,11 +188,6 @@ int Exec_PrepareForLeap::LoadPdbResNames(std::string const& fnameIn) } infile.CloseFile(); - // DEBUG - mprintf("\tPDB residue names recognized by Amber FF:\n"); - for (SetType::const_iterator it = pdb_res_names_.begin(); it != pdb_res_names_.end(); ++it) - mprintf("\t %s\n", *(*it)); - return 0; } @@ -1390,6 +1385,13 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprinterr("Error: PDB residue name file load failed.\n"); return CpptrajState::ERR; } + mprintf("\t%zu PDB residue names recognized by Amber FFs.\n", pdb_res_names_.size()); + // DEBUG + if (debug_ > 0) { + mprintf("\tPDB residue names recognized by Amber FFs:\n"); + for (SetType::const_iterator it = pdb_res_names_.begin(); it != pdb_res_names_.end(); ++it) + mprintf("\t %s\n", *(*it)); + } // Load PDB to glycam residue name map if (prepare_sugars) { @@ -1397,10 +1399,13 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprinterr("Error: PDB to glycam name map load failed.\n"); return CpptrajState::ERR; } + mprintf("\t%zu entries in PDB to glycam name map.\n", pdb_to_glycam_.size()); // DEBUG - print residue name map - mprintf("\tResidue name map:\n"); - for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) - mprintf("\t %4s -> %c\n", *(mit->first), mit->second); + if (debug_ > 0) { + mprintf("\tResidue name map:\n"); + for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) + mprintf("\t %4s -> %c\n", *(mit->first), mit->second); + } } // Get sugar mask or default sugar mask From fe55e4f5f81b2af971572f2d5817ecbf8eadcade Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 14:10:53 -0400 Subject: [PATCH 090/368] More output cleanup --- src/Exec_PrepareForLeap.cpp | 120 ++++++++++++++++++++---------------- src/Exec_PrepareForLeap.h | 3 + 2 files changed, 71 insertions(+), 52 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f27b690ce6..972037f6cb 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -46,17 +46,17 @@ void Exec_PrepareForLeap::Help() const } /// Used to change residue name to nameIn -static inline void ChangeResName(Residue& res, NameType const& nameIn) { +void Exec_PrepareForLeap::ChangeResName(Residue& res, NameType const& nameIn) const { if (res.Name() != nameIn) { - mprintf("\t Changing residue %s to %s\n", *(res.Name()), *nameIn); + if (debug_ > 0) mprintf("\t Changing residue %s to %s\n", *(res.Name()), *nameIn); res.SetName( nameIn ); } } /// Used to change atom name to nameIn -static inline void ChangeAtomName(Atom& atm, NameType const& nameIn) { +void Exec_PrepareForLeap::ChangeAtomName(Atom& atm, NameType const& nameIn) const { if (atm.Name() != nameIn) { - mprintf("\t Changing atom %s to %s\n", *(atm.Name()), *nameIn); + if (debug_ > 0) mprintf("\t Changing atom %s to %s\n", *(atm.Name()), *nameIn); atm.SetName( nameIn ); } } @@ -78,7 +78,7 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag std::string linkstr; for (std::set::const_iterator it = linkages.begin(); it != linkages.end(); ++it) linkstr.append( it->Truncated() ); - mprintf("\t linkstr= '%s'\n", linkstr.c_str()); + //mprintf("\t linkstr= '%s'\n", linkstr.c_str()); switch (glycamChar) { case 'S': if (linkstr == "C2") linkcode = "0"; @@ -340,23 +340,27 @@ const ano_ref_atom_C = *bat; } } - mprintf("\t Anomeric ref carbon : %s\n", - topIn.ResNameNumAtomNameNum(ano_ref_atom).c_str()); + if (debug_ > 0) + mprintf("\t Anomeric ref carbon : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom).c_str()); if (ano_ref_atom_Y == -1) { mprinterr("Error: Anomeric reference Y substituent could not be identified.\n"); return 1; } - mprintf("\t Anomeric reference substituent : %s\n", - topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); + if (debug_ > 0) + mprintf("\t Anomeric reference substituent : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); if (ano_ref_atom_C == -1) { mprinterr("Error: Anomeric reference ring C previous ring atom could not be identified.\n"); return 1; } - mprintf("\t Anomeric reference previous ring atom : %s\n", - topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); + if (debug_ > 0) + mprintf("\t Anomeric reference previous ring atom : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); torsion = Torsion( frameIn.XYZ(ano_ref_atom_C), frameIn.XYZ(ano_ref_atom), frameIn.XYZ(ano_ref_atom_Y), frameIn.XYZ(ring_oxygen_atom) ); - mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); + if (debug_ > 0) + mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); return 0; } @@ -402,7 +406,8 @@ const anomeric_atom_C = *bat; } } - mprintf("\t Anomeric carbon : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom).c_str()); + if (debug_ > 0) + mprintf("\t Anomeric carbon : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom).c_str()); if (anomeric_atom_X == -1) { // If the Cx (C1 substituent, usually a different residue) index is // not found this usually means missing inter-residue bond. @@ -417,17 +422,20 @@ const "Warning: may need to be generated.\n"); return -1; } - mprintf("\t Anomeric X substituent : %s\n", - topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); + if (debug_ > 0) + mprintf("\t Anomeric X substituent : %s\n", + topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); if (anomeric_atom_C == -1) { mprinterr("Error: Next ring atom after anomeric C could not be identified.\n"); return 1; } - mprintf("\t Anomeric C ring substituent : %s\n", - topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); + if (debug_ > 0) + mprintf("\t Anomeric C ring substituent : %s\n", + topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); torsion = Torsion( frameIn.XYZ(anomeric_atom_X), frameIn.XYZ(anomeric_atom), frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(ring_oxygen_atom) ); - mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); + if (debug_ > 0) + mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); return 0; } @@ -472,9 +480,9 @@ const static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector& ring_atoms, int tgt_atom, std::vector& Visited, bool& found) { Visited[atm] = true; - for (int i = 0; i != idx; i++) - mprintf("\t"); - mprintf("At atom %s\n", topIn.ResNameNumAtomNameNum(atm).c_str()); + //for (int i = 0; i != idx; i++) + // mprintf("\t"); + //mprintf("At atom %s\n", topIn.ResNameNumAtomNameNum(atm).c_str()); ring_atoms[idx] = atm; // Assume we have started at the target atom if (idx > 0 && atm == tgt_atom) { @@ -601,8 +609,9 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, } FollowBonds(c_beg, topIn, 0, ring_atoms, c_end, Visited, ring_complete); - mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", - topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); + if (debug_ > 0) + mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", + topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); // TODO handle the case where multiple potential ring start atoms exist if (ring_complete) { ring_oxygen_atom = *ringat; @@ -612,15 +621,15 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, IsRingAtom.assign( topIn.Natom(), false ); IsRingAtom[ring_oxygen_atom] = true; n_ring_atoms = 1; - mprintf(" :"); // DEBUG + if (debug_ > 0) mprintf(" :"); // DEBUG for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { - mprintf(" %i", *it + 1); + if (debug_ > 0) mprintf(" %i", *it + 1); if (*it == -1) break; IsRingAtom[*it] = true; ++n_ring_atoms; } - mprintf("\n"); // DEBUG + if (debug_ > 0) mprintf("\n"); // DEBUG } } mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); @@ -628,7 +637,8 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, mprinterr("Error: Sugar ring atoms could not be identified.\n"); return 1; } - mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); + if (debug_ > 0) + mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); double t_c1 = 0; double t_c5 = 0; @@ -666,12 +676,12 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, std::vector remainingChainCarbons; if (FindRemainingChainCarbons(remainingChainCarbons, ano_ref_atom, topIn, rnum, IsRingAtom)) return 1; - mprintf("\t Remaining chain carbons:\n"); + if (debug_ > 0) mprintf("\t Remaining chain carbons:\n"); for (std::vector::const_iterator it = remainingChainCarbons.begin(); it != remainingChainCarbons.end(); ++it) { - mprintf("\t\t%s", topIn.ResNameNumAtomNameNum(*it).c_str()); + if (debug_ > 0) mprintf("\t\t%s", topIn.ResNameNumAtomNameNum(*it).c_str()); // Count number of bonds to heavy atoms. Atom const& currentAtom = topIn[*it]; int n_heavyat_bonds = 0; @@ -681,11 +691,11 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, ++n_heavyat_bonds; } if (n_heavyat_bonds == 3) { - mprintf(" Potential stereocenter"); + if (debug_ > 0) mprintf(" Potential stereocenter"); if (*it > highest_stereocenter) // Is absolute index the best way to do this? highest_stereocenter = *it; } - mprintf("\n"); + if (debug_ > 0) mprintf("\n"); } if (highest_stereocenter == -1) { // This means that ano_ref_atom is the highest stereocenter. @@ -761,13 +771,15 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, } // END loop over residue atoms // Determine linkage - mprintf("\t Link atoms:"); - for (std::set::const_iterator it = linkages.begin(); - it != linkages.end(); ++it) - mprintf(" %4s", *(*it)); - mprintf("\n"); + if (debug_ > 0) { + mprintf("\t Link atoms:"); + for (std::set::const_iterator it = linkages.begin(); + it != linkages.end(); ++it) + mprintf(" %4s", *(*it)); + mprintf("\n"); + } std::string linkcode = LinkageCode(resChar, linkages); - mprintf("\t Linkage code: %s\n", linkcode.c_str()); + if (debug_ > 0) mprintf("\t Linkage code: %s\n", linkcode.c_str()); if (linkcode.empty()) { mprinterr("Error: Unrecognized sugar linkage.\n"); return 1; @@ -786,7 +798,7 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, } // Set new residue name NameType newResName( linkcode + std::string(1,resChar) + formStr ); - mprintf("\t Glycam resname: %s\n", *newResName); + mprintf("\t Changing %s to Glycam resname: %s\n", topIn.TruncResNameNum(rnum).c_str(), *newResName); ChangeResName(res, newResName); resStat_[rnum] = VALIDATED; return 0; @@ -954,14 +966,16 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co } } // DEBUG - Print current array - mprintf("DEBUG: Disulfide partner array after existing:\n"); - for (std::vector::const_iterator it = disulfidePartner.begin(); it != disulfidePartner.end(); ++it) - { - mprintf(" S %i [%li]", cysmask[it-disulfidePartner.begin()]+1, it-disulfidePartner.begin()); - if (*it == -1) - mprintf(" None.\n"); - else - mprintf(" to S %i [%i]\n", cysmask[*it]+1, *it); + if (debug_ > 1) { + mprintf("DEBUG: Disulfide partner array after existing:\n"); + for (std::vector::const_iterator it = disulfidePartner.begin(); it != disulfidePartner.end(); ++it) + { + mprintf(" S %i [%li]", cysmask[it-disulfidePartner.begin()]+1, it-disulfidePartner.begin()); + if (*it == -1) + mprintf(" None.\n"); + else + mprintf(" to S %i [%i]\n", cysmask[*it]+1, *it); + } } // Second, search for new disulfides from remaining sulfurs. if (searchForNewDisulfides) { @@ -995,12 +1009,14 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co } } std::sort(D2.begin(), D2.end()); - mprintf("DEBUG: Sorted S-S array:\n"); - for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) - { - int at1 = cysmask[it->second.first]; - int at2 = cysmask[it->second.second]; - mprintf(" %8i - %8i = %g Ang.\n", at1+1, at2+2, sqrt(it->first)); + if (debug_ > 1) { + mprintf("DEBUG: Sorted S-S array:\n"); + for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) + { + int at1 = cysmask[it->second.first]; + int at2 = cysmask[it->second.second]; + mprintf(" %8i - %8i = %g Ang.\n", at1+1, at2+2, sqrt(it->first)); + } } // All distances in D2 are below the cutoff for (D2Array::const_iterator it = D2.begin(); it != D2.end(); ++it) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 5b24b1dbe5..3ee104fca8 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -15,6 +15,9 @@ class Exec_PrepareForLeap : public Exec { DispatchObject* Alloc() const { return (DispatchObject*)new Exec_PrepareForLeap(); } RetType Execute(CpptrajState&, ArgList&); private: + inline void ChangeResName(Residue&, NameType const&) const; + inline void ChangeAtomName(Atom&, NameType const&) const; + /// Set a reduced PDB res to glycam map when dat file not found. void SetGlycamPdbResMap(); /// Load PDB res to glycam map from dat file From 27b342b42584220415532042c984e453e5d59af8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 14:15:37 -0400 Subject: [PATCH 091/368] Add a bond search by grid since this is not done by default and we can miss things like sugar linkages --- src/Exec_PrepareForLeap.cpp | 7 ++++++- src/cpptrajdepend | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 972037f6cb..226d56b091 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -7,6 +7,7 @@ #include "CpptrajFile.h" #include "Trajout_Single.h" #include "DataSet_Coords_CRD.h" +#include "BondSearch.h" #include #include // tolower #include // sort @@ -1391,7 +1392,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } - // TODO new bond grid search? + // new bond grid search + mprintf("\tUpdating bond information using grid search.\n"); + // NOTE: Using default offset of 0.2 Ang + if (BondSearch(topIn, SEARCH_GRID, frameIn, 0.2, debug_)) + return CpptrajState::ERR; // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 3e3420feb0..e441f47711 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -279,7 +279,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h BondSearch.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From 9168f9058d3017b6c708b16f45cc671d1f198847 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 14:23:23 -0400 Subject: [PATCH 092/368] Update warning; searchtype grid now done inside prepareforleap command. --- src/Exec_PrepareForLeap.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 226d56b091..6bc8f4073c 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -415,12 +415,9 @@ const // Alternatively, this could be an isolated sugar missing an -OH // group, so make this non-fatal. mprintf("Warning: Anomeric C non-ring substituent could not be identified.\n" - "Warning: If '%s' is from a topology without complete bonding information\n" - "Warning: (e.g. a PDB file), try loading the topology with the\n" - "Warning: 'searchtype grid' keywords instead.\n", topIn.c_str()); - mprintf("Warning: This can also happen for isolated sugars missing e.g. a -OH\n" - "Warning: group. In that case coordinates for the missing sugar atoms\n" - "Warning: may need to be generated.\n"); + "Warning: This can happen if the sugar is bonded to something that\n" + "Warning: is missing, e.g. a -OH group. In that case the coordinates\n" + "Warning for the missing atoms may need to be generated.\n"); return -1; } if (debug_ > 0) From 6d9be205cd4e9db12bccd720fafadbfa15b6afa6 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 10 Aug 2021 15:12:00 -0400 Subject: [PATCH 093/368] Split removal of hydrogen atoms from removing other atoms; this way histidine recognition can proceeed after other atom removal but before hydrogen atom removal and his residue indices wont be invalidated. --- src/Exec_PrepareForLeap.cpp | 107 ++++++++++++++++++++++++------------ src/Exec_PrepareForLeap.h | 3 +- 2 files changed, 75 insertions(+), 35 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6bc8f4073c..48ce2b7622 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1056,7 +1056,7 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co /** Modify coords according to user wishes. */ int Exec_PrepareForLeap::ModifyCoords( Topology& topIn, Frame& frameIn, - bool remove_water, bool remove_h, + bool remove_water, char altLocChar, std::string const& stripMask, std::string const& waterMask ) const @@ -1110,12 +1110,12 @@ const mprintf("\t# solvent removed: %u\n", nRemoved); */ } - if (remove_h) { - for (Topology::atom_iterator atom = topIn.begin(); atom != topIn.end(); ++atom) { - if (atom->Element() == Atom::HYDROGEN) - atomsToKeep[atom - topIn.begin()] = false; - } - } + //if (remove_h) { + // for (Topology::atom_iterator atom = topIn.begin(); atom != topIn.end(); ++atom) { + // if (atom->Element() == Atom::HYDROGEN) + // atomsToKeep[atom - topIn.begin()] = false; + // } + //} if (altLocChar != '\0') { if (topIn.AtomAltLoc().empty()) { mprintf("\tNo alternate atom locations.\n"); @@ -1156,6 +1156,39 @@ const return 0; } +/** Remove any hydrogen atoms. This is done separately from ModifyCoords + * so that hydrogen atom info can be used to e.g. ID histidine + * protonation. + */ +int Exec_PrepareForLeap::RemoveHydrogens(Topology& topIn, Frame& frameIn) const { + AtomMask keptAtoms; + keptAtoms.SetNatoms( topIn.Natom() ); + for (int idx = 0; idx != topIn.Natom(); idx++) + { + if (topIn[idx].Element() != Atom::HYDROGEN) + keptAtoms.AddSelectedAtom(idx); + } + if (keptAtoms.Nselected() == topIn.Natom()) + // Keeping everything, no modification + return 0; + // Modify top/frame + Topology* newTop = topIn.modifyStateByMask( keptAtoms ); + if (newTop == 0) { + mprinterr("Error: Could not create new topology with no hydrogens.\n"); + return 1; + } + newTop->Brief("After removing hydrogen atoms:"); + Frame newFrame; + newFrame.SetupFrameV(newTop->Atoms(), frameIn.CoordsInfo()); + newFrame.SetFrame(frameIn, keptAtoms); + + topIn = *newTop; + frameIn = newFrame; + delete newTop; + + return 0; +} + /** Try to determine histidine protonation. * \param HisResNames Array containing final histidine residue names. * \param HisResIdxs Array containing residue indices of histidine residues (correspond to HisResNames). @@ -1196,6 +1229,8 @@ const for (std::vector::const_iterator rnum = resIdxs.begin(); rnum != resIdxs.end(); ++rnum) { + if (debug_ > 1) + mprintf("DEBUG: %s (%i) (%c)\n", topIn.TruncResNameNum(*rnum).c_str(), topIn.Res(*rnum).OriginalResNum(), topIn.Res(*rnum).ChainId()); int nd1idx = -1; int ne2idx = -1; Residue const& hisRes = topIn.Res( *rnum ); @@ -1314,32 +1349,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else mprintf("\tWill attempt to prepare sugars.\n"); - // Do histidine detection before any atoms are removed so we keep H if present - // TODO if any histidines are removed, this will fail. - std::vector HisResIdxs; - std::vector HisResNames; - if (!argIn.hasKey("nohisdetect")) { - std::string nd1name = argIn.GetStringKey("nd1", "ND1"); - std::string ne2name = argIn.GetStringKey("ne2", "NE2"); - std::string hisname = argIn.GetStringKey("hisname", "HIS"); - std::string hiename = argIn.GetStringKey("hiename", "HIE"); - std::string hidname = argIn.GetStringKey("hidname", "HID"); - std::string hipname = argIn.GetStringKey("hipname", "HIP"); - mprintf("\tHistidine protonation detection:\n"); - mprintf("\t\tND1 atom name : %s\n", nd1name.c_str()); - mprintf("\t\tNE2 atom name : %s\n", ne2name.c_str()); - mprintf("\t\tHistidine original residue name : %s\n", hisname.c_str()); - mprintf("\t\tEpsilon-protonated residue name : %s\n", hiename.c_str()); - mprintf("\t\tDelta-protonated residue name : %s\n", hidname.c_str()); - mprintf("\t\tDoubly-protonated residue name : %s\n", hipname.c_str()); - if (DetermineHisProt( HisResNames, HisResIdxs, topIn, - nd1name, ne2name, - hisname, hiename, hidname, hipname)) { - mprinterr("Error: HIS protonation detection failed.\n"); - return CpptrajState::ERR; - } - } - // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); std::string waterMask = argIn.GetStringKey("watermask", ":HOH"); @@ -1383,12 +1392,42 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tIf present, keeping only alternate atom locations denoted by '%c'\n", altLocChar); if (!stripMask.empty()) mprintf("\tRemoving atoms in mask '%s'\n", stripMask.c_str()); - if (ModifyCoords( topIn, frameIn, remove_water, remove_h, altLocChar, stripMask, waterMask )) + if (ModifyCoords( topIn, frameIn, remove_water, altLocChar, stripMask, waterMask )) { mprinterr("Error: Modification of '%s' failed.\n", coords.legend()); return CpptrajState::ERR; } + // Do histidine detection before H atoms are removed + std::vector HisResIdxs; + std::vector HisResNames; + if (!argIn.hasKey("nohisdetect")) { + std::string nd1name = argIn.GetStringKey("nd1", "ND1"); + std::string ne2name = argIn.GetStringKey("ne2", "NE2"); + std::string hisname = argIn.GetStringKey("hisname", "HIS"); + std::string hiename = argIn.GetStringKey("hiename", "HIE"); + std::string hidname = argIn.GetStringKey("hidname", "HID"); + std::string hipname = argIn.GetStringKey("hipname", "HIP"); + mprintf("\tHistidine protonation detection:\n"); + mprintf("\t\tND1 atom name : %s\n", nd1name.c_str()); + mprintf("\t\tNE2 atom name : %s\n", ne2name.c_str()); + mprintf("\t\tHistidine original residue name : %s\n", hisname.c_str()); + mprintf("\t\tEpsilon-protonated residue name : %s\n", hiename.c_str()); + mprintf("\t\tDelta-protonated residue name : %s\n", hidname.c_str()); + mprintf("\t\tDoubly-protonated residue name : %s\n", hipname.c_str()); + if (DetermineHisProt( HisResNames, HisResIdxs, topIn, + nd1name, ne2name, + hisname, hiename, hidname, hipname)) { + mprinterr("Error: HIS protonation detection failed.\n"); + return CpptrajState::ERR; + } + } + + // Remove hydrogens + if (remove_h) { + if (RemoveHydrogens(topIn, frameIn)) return CpptrajState::ERR; + } + // new bond grid search mprintf("\tUpdating bond information using grid search.\n"); // NOTE: Using default offset of 0.2 Ang diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 3ee104fca8..fa9e5fdd8b 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -38,7 +38,8 @@ class Exec_PrepareForLeap : public Exec { int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*); - int ModifyCoords(Topology&, Frame&, bool, bool, char, std::string const&, std::string const&) const; + int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, std::string const&) const; + int RemoveHydrogens(Topology&, Frame&) const; int DetermineHisProt(std::vector&, std::vector&, Topology const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&) const; From b48c8facfc906e9120a63c0e8e562c25ec946637 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 11 Aug 2021 12:52:48 -0400 Subject: [PATCH 094/368] Add nobondsearch option. Treat blank symop as no symop --- src/Exec_PrepareForLeap.cpp | 26 +++++++++++++++++++------- src/PDBfile.cpp | 26 ++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 48ce2b7622..76698dddf6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -25,7 +25,7 @@ void Exec_PrepareForLeap::Help() const mprintf("\tcrdset [frame <#>] name [pdbout ]\n" "\t[leapunitname ] [out [skiperrors]\n" "\t[nowat [watermask ] [noh] [keepaltloc ]\n" - "\t[stripmask ]\n" + "\t[stripmask ] [nobondsearch]\n" "\t[{nohisdetect |\n" "\t [nd1 ] [ne2 ] [hiename ]\n" "\t [hidname ] [hipname const& linkag break; } if (linkcode.empty()) - mprintf("Warning: Could not determine link code.\n"); + mprintf("Warning: Could not determine link code for link atoms '%s'.\n", linkstr.c_str()); return linkcode; } @@ -1241,6 +1241,14 @@ const else if ( (topIn[at].Name() == NE2 ) ) ne2idx = at; } + if (nd1idx == -1) { + mprintf("Warning: Atom %s not found for %s; skipping residue.\n", *ND1, topIn.TruncResNameNum(*rnum).c_str()); + continue; + } + if (ne2idx == -1) { + mprintf("Warning: Atom %s not found for %s; skipping residue,\n", *NE2, topIn.TruncResNameNum(*rnum).c_str()); + continue; + } if (debug_ > 1) mprintf("DEBUG: %s nd1idx= %i ne2idx= %i\n", topIn.TruncResNameNum( *rnum ).c_str(), nd1idx+1, ne2idx+1); @@ -1428,11 +1436,15 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (RemoveHydrogens(topIn, frameIn)) return CpptrajState::ERR; } - // new bond grid search - mprintf("\tUpdating bond information using grid search.\n"); - // NOTE: Using default offset of 0.2 Ang - if (BondSearch(topIn, SEARCH_GRID, frameIn, 0.2, debug_)) - return CpptrajState::ERR; + // See if we want to search for potential bonds. + if (!argIn.hasKey("nobondsearch")) { + mprintf("\tUpdating bond information using grid search.\n"); + // NOTE: Using default offset of 0.2 Ang + if (BondSearch(topIn, SEARCH_GRID, frameIn, 0.2, debug_)) + return CpptrajState::ERR; + } else { + mprintf("\tNot searching for new bonds; using existing bond information.\n"); + } // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); diff --git a/src/PDBfile.cpp b/src/PDBfile.cpp index d3b41c76a2..dc82a8acab 100644 --- a/src/PDBfile.cpp +++ b/src/PDBfile.cpp @@ -62,6 +62,15 @@ PDBfile::SymOp::SymOp() : idx_(1), ix_(5), iy_(5), iz_(5) PDBfile::SymOp::SymOp(const char* ptr) : idx_(1), ix_(5), iy_(5), iz_(5) { if (ptr == 0) return; + if (ptr[0] == ' ' && ptr[1] == ' ' && ptr[2] == ' ' && + ptr[3] == ' ' && ptr[4] == ' ' && ptr[5] == ' ') + { + idx_ = 1; + ix_ = 5; + iy_ = 5; + iz_ = 5; + return; + } // DO NNN char numstr[4]; numstr[0] = ptr[0]; @@ -445,6 +454,17 @@ int PDBfile::pdb_Bonds(int* bnd) { return Nscan; } +/// Set with default no sym op link string +static inline void NoSymOp(char* ptr) { + ptr[0] = ' '; + ptr[1] = ' '; + ptr[2] = '1'; + ptr[3] = '5'; + ptr[4] = '5'; + ptr[5] = '5'; + ptr[6] = '\0'; +} + /** \return PDB LINK record. */ PDBfile::Link PDBfile::pdb_Link() { // 1 2 3 4 5 6 7 8 @@ -464,10 +484,8 @@ PDBfile::Link PDBfile::pdb_Link() { } char a1[4], a2[4], r1[3], r2[3], alt1, alt2, ch1, ch2, code1, code2; char sym1[7], sym2[7]; - std::fill(sym1, sym1+6, ' '); - std::fill(sym2, sym2+6, ' '); - sym1[6] = '\0'; - sym2[6] = '\0'; + NoSymOp( sym1 ); + NoSymOp( sym2 ); int rnum1, rnum2; // Site 1 std::copy(linebuffer_+12, linebuffer_+16, a1); From 8a10b9150851ffd4558c278b6696ded4f4a803c5 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 12 Aug 2021 09:29:11 -0400 Subject: [PATCH 095/368] Always report lowest-indexed atom first for bonds --- src/TopInfo.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/TopInfo.cpp b/src/TopInfo.cpp index 1eac24028c..4db24322ea 100644 --- a/src/TopInfo.cpp +++ b/src/TopInfo.cpp @@ -400,8 +400,14 @@ void TopInfo::PrintBonds(BondArray const& barray, BondParmArray const& bondparm, for (BondArray::const_iterator batom = barray.begin(); batom != barray.end(); ++batom) { - int atom1 = batom->A1(); - int atom2 = batom->A2(); + int atom1, atom2; + if (batom->A1() < batom->A2()) { + atom1 = batom->A1(); + atom2 = batom->A2(); + } else { + atom1 = batom->A2(); + atom2 = batom->A1(); + } bool printBond = false; if (mask2.MaskStringSet()) printBond = (mask1.AtomInCharMask(atom1) && mask2.AtomInCharMask(atom2)); From 29d6050e57265d5d64c242ff8800c26fec4d3e35 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 12 Aug 2021 10:37:55 -0400 Subject: [PATCH 096/368] Remove the generic bond search by grid with more focused search for missing linkages to sugar anomeric carbons since the grid search can sometimes find bonds that shouldn't exist. --- src/Exec_PrepareForLeap.cpp | 136 +++++++++++++++++++++++++++++++----- src/Exec_PrepareForLeap.h | 4 +- src/cpptrajdepend | 2 +- 3 files changed, 123 insertions(+), 19 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 76698dddf6..1acdc1ebe6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -7,14 +7,14 @@ #include "CpptrajFile.h" #include "Trajout_Single.h" #include "DataSet_Coords_CRD.h" -#include "BondSearch.h" #include #include // tolower #include // sort /** CONSTRUCTOR */ Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), - errorsAreFatal_(true) + errorsAreFatal_(true), + debug_(0) { SetHidden(true); } @@ -25,14 +25,14 @@ void Exec_PrepareForLeap::Help() const mprintf("\tcrdset [frame <#>] name [pdbout ]\n" "\t[leapunitname ] [out [skiperrors]\n" "\t[nowat [watermask ] [noh] [keepaltloc ]\n" - "\t[stripmask ] [nobondsearch]\n" + "\t[stripmask ] [solventresname ]\n" "\t[{nohisdetect |\n" "\t [nd1 ] [ne2 ] [hiename ]\n" "\t [hidname ] [hipname ] [disulfidecut ] [newcysname ]}]\n" - "\t[{nosugars | sugarmask }] [resmapfile ]\n" + "\t[{nosugars | sugarmask [noc1search]}] [resmapfile ]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" " with the LEaP program from AmberTools. Any existing/potential\n" @@ -497,6 +497,98 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector 0) + mprintf("DEBUG: Anomeric ring carbon: %s\n", topIn.ResNameNumAtomNameNum(c_beg).c_str()); + // Loop over other residues + for (int rnum2 = 0; rnum2 < topIn.Nres(); rnum2++) + { + if (rnum2 != rnum1) { + Residue const& res2 = topIn.Res(rnum2); + // Ignore solvent residues + if (res2.Name() != solventResName_) { + int at1 = res1.FirstAtom(); + int at2 = res2.FirstAtom(); + // Initial residue-residue distance based on first atoms in each residue + double dist2_1 = DIST2_NoImage( frameIn.XYZ(at1), frameIn.XYZ(at2) ); + if (dist2_1 < rescut2) { + if (debug_ > 1) + mprintf("DEBUG: %s to %s = %f\n", + topIn.TruncResNameNum(rnum1).c_str(), topIn.TruncResNameNum(rnum2).c_str(), + sqrt(dist2_1)); + // Do the rest of the atoms in res2 to the anomeric carbon + for (; at2 != res2.LastAtom(); ++at2) + { + if (!topIn[c_beg].IsBondedTo(at2)) { + double D2 = DIST2_NoImage( frameIn.XYZ(c_beg), frameIn.XYZ(at2) ); + Atom::AtomicElementType a2Elt = topIn[at2].Element(); + double cutoff2 = Atom::GetBondLength(a1Elt, a2Elt) + offset; + cutoff2 *= cutoff2; + if (D2 < cutoff2) { + mprintf("\t Adding bond between %s and %s\n", + topIn.ResNameNumAtomNameNum(c_beg).c_str(), + topIn.ResNameNumAtomNameNum(at2).c_str()); + topIn.AddBond(c_beg, at2); + } + } + } // END loop over res2 atoms + } // END res1-res2 distance cutoff + } // END res2 is not solvent + } // END res1 != res2 + } // END res2 loop over other residues + + return 0; +} + /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, Frame const& frameIn, CharMask const& cmask, @@ -804,7 +896,8 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, /** Prepare sugars for leap. */ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, - Frame const& frameIn, CpptrajFile* outfile) + Frame const& frameIn, CpptrajFile* outfile, + bool findC1linkages) { std::set sugarBondsToRemove; mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); @@ -816,6 +909,23 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); // Get sugar residue numbers std::vector sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); + // For each sugar residue, try to fill in missing linkages + if (findC1linkages) { + mprintf("\tAttempting to identify missing linkages to sugar anomeric carbons.\n"); + for (std::vector::const_iterator rnum = sugarResNums.begin(); + rnum != sugarResNums.end(); ++rnum) + { + if (FindSugarC1Linkages(*rnum, topIn, frameIn)) { + if (errorsAreFatal_) + return 1; + else + mprintf("Warning: Finding anomeric C linkages for %s failed, skipping.\n", + topIn.TruncResNameNum( *rnum ).c_str()); + } + } + } else { + mprintf("\tNot attempting to identify missing linkages to sugar anomeric carbons.\n"); + } // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. for (std::vector::const_iterator rnum = sugarResNums.begin(); @@ -1350,6 +1460,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) leapunitname_ = argIn.GetStringKey("leapunitname", "m"); mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); + solventResName_ = argIn.GetStringKey("solventresname", "HOH"); + mprintf("\tSolvent residue name: %s\n", solventResName_.c_str()); bool prepare_sugars = !argIn.hasKey("nosugars"); if (!prepare_sugars) @@ -1359,7 +1471,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); - std::string waterMask = argIn.GetStringKey("watermask", ":HOH"); + std::string waterMask = argIn.GetStringKey("watermask", ":" + solventResName_); bool remove_h = argIn.hasKey("noh"); std::string altLocArg = argIn.GetStringKey("keepaltloc"); char altLocChar = '\0'; @@ -1436,16 +1548,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (RemoveHydrogens(topIn, frameIn)) return CpptrajState::ERR; } - // See if we want to search for potential bonds. - if (!argIn.hasKey("nobondsearch")) { - mprintf("\tUpdating bond information using grid search.\n"); - // NOTE: Using default offset of 0.2 Ang - if (BondSearch(topIn, SEARCH_GRID, frameIn, 0.2, debug_)) - return CpptrajState::ERR; - } else { - mprintf("\tNot searching for new bonds; using existing bond information.\n"); - } - // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); @@ -1564,7 +1666,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (prepare_sugars) { - if (PrepareSugars(sugarMask, topIn, frameIn, outfile)) { + if (PrepareSugars(sugarMask, topIn, frameIn, outfile, !argIn.hasKey("noc1search"))) { mprinterr("Error: Sugar preparation failed.\n"); return CpptrajState::ERR; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index fa9e5fdd8b..d63068e795 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -33,8 +33,9 @@ class Exec_PrepareForLeap : public Exec { int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; + int FindSugarC1Linkages(int, Topology&, Frame const&) const; int IdentifySugar(int, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); - int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*); + int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*); @@ -56,5 +57,6 @@ class Exec_PrepareForLeap : public Exec { typedef std::vector ResStatArray; ResStatArray resStat_; ///< Contain status of each residue int debug_; ///< Debug level + std::string solventResName_; ///< Solvent residue name }; #endif diff --git a/src/cpptrajdepend b/src/cpptrajdepend index e441f47711..3e3420feb0 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -279,7 +279,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h BondSearch.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From 2fd7808dc545940d93b7e55099ddd4e6526edb36 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 13 Aug 2021 10:41:28 -0400 Subject: [PATCH 097/368] Start making sugar class for holding ring indices --- src/Exec_PrepareForLeap.cpp | 169 ++++++++++++++++++++++++++++++++++++ src/Exec_PrepareForLeap.h | 19 ++++ 2 files changed, 188 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1acdc1ebe6..a86161c7ea 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -11,6 +11,39 @@ #include // tolower #include // sort +// ----- Sugar Class ----------------------------------------------------------- +Exec_PrepareForLeap::Sugar::Sugar(int rn) : + rnum_(rn), + ring_oxygen_atom_(-1), + anomeric_atom_(-1), + ano_ref_atom_(-1) +{} + +Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, std::vector const& RA) : + rnum_(rn), + ring_oxygen_atom_(roa), + anomeric_atom_(aa), + ano_ref_atom_(ara), + ring_atoms_(RA) +{} + +void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { + if (NotSet()) { + mprintf("\t%s : Not Set.\n", topIn.TruncResNameNum(rnum_).c_str()); + } else { + mprintf("\t%s :\n", topIn.TruncResNameNum(rnum_).c_str()); + mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); + mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); + mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); + mprintf("\t\tRing atoms :"); + for (std::vector::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) + mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); + mprintf("\n"); + } +} + +// ----------------------------------------------------------------------------- + /** CONSTRUCTOR */ Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), errorsAreFatal_(true), @@ -589,6 +622,123 @@ const return 0; } +/** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ +Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, + int& err) +{ + err = 0; + Residue const& res = topIn.Res(rnum); + // Try to identify the sugar ring. Potential starting atoms are oxygens + // bonded to two carbon atoms. Also save potential stereocenter indices + // (i.e. carbons bonded to 4 other atoms). Since input structure may not + // have any hydrogens, count bonds to heavy atoms only, must make at + // least 3 bonds (otherwise e.g. likely 2 hydrogens). + std::vector potentialRingStartAtoms; + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + { + Atom const& currentAtom = topIn[at]; + if (currentAtom.Element() == Atom::OXYGEN) { + if (currentAtom.Nbonds() == 2) { + if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(0)].ResNum() == rnum && + topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(1)].ResNum() == rnum ) + { + potentialRingStartAtoms.push_back( at ); + } + } + } + } + // TODO handle case where multiple potential ring start atoms exist + if (potentialRingStartAtoms.empty()) { + mprintf("Warning: Ring oxygen could not be identified for %s\n", + topIn.TruncResNameNum(rnum).c_str()); + resStat_[rnum] = SUGAR_MISSING_RING_O; + return Sugar(rnum); + } else if (potentialRingStartAtoms.size() > 1) { + mprinterr("Error: Multiple potential ring start atoms:\n"); + for (std::vector::const_iterator it = potentialRingStartAtoms.begin(); + it != potentialRingStartAtoms.end(); + ++it) + mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + err = 1; + return Sugar(rnum); + } + + // The anomeric carbon is the carbon that was part of the carbonyl group + // in the straight chain. It is therefore typically the carbon bonded + // to the ring oxygen with the lower index. + int anomeric_atom = -1; // e.g. C1 + // The anomeric reference carbon is the stereocenter farthest from the + // anomeric carbon in the ring. + int ano_ref_atom = -1; // e.g. C5 + // Out of the potential ring start atoms, see which ones are actually + // part of a ring. Potential ring start atoms only have 2 bonds, + // each one to a carbon. + int n_ring_atoms = 0; + int ring_oxygen_atom = -1; // e.g. O5 + // This will hold ring atoms, not including the ring oxygen + std::vector RA; + std::vector IsRingAtom; + for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); + ringat != potentialRingStartAtoms.end(); + ++ringat) + { + std::vector Visited( topIn.Natom(), true ); + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + if (at != *ringat) + Visited[at] = false; + std::vector ring_atoms( topIn.Res(rnum).NumAtoms(), -1 ); + bool ring_complete = false; + // Since we have already established that *ringat is an oxygen bonded + // to two carbons, just start at the first carbon to see if we can + // get to the second carbon. + int c_beg, c_end; + if (topIn[*ringat].Bond(0) < topIn[*ringat].Bond(1)) { + c_beg = topIn[*ringat].Bond(0); + c_end = topIn[*ringat].Bond(1); + } else { + c_beg = topIn[*ringat].Bond(1); + c_end = topIn[*ringat].Bond(0); + } + FollowBonds(c_beg, topIn, 0, ring_atoms, + c_end, Visited, ring_complete); + if (debug_ > 0) + mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", + topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); + // TODO handle the case where multiple potential ring start atoms exist + if (ring_complete) { + ring_oxygen_atom = *ringat; + anomeric_atom = c_beg; + ano_ref_atom = c_end; + // Use IsRingAtom as a mask with ring atoms set to true + IsRingAtom.assign( topIn.Natom(), false ); + IsRingAtom[ring_oxygen_atom] = true; + n_ring_atoms = 1; + RA.clear(); + if (debug_ > 0) mprintf(" :"); // DEBUG + for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) + { + if (debug_ > 0) mprintf(" %i", *it + 1); + if (*it == -1) break; + IsRingAtom[*it] = true; + RA.push_back( *it ); + ++n_ring_atoms; + } + if (debug_ > 0) mprintf("\n"); // DEBUG + } + } + mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); + if (n_ring_atoms == 0 || ring_oxygen_atom == -1) { + mprinterr("Error: Sugar ring atoms could not be identified.\n"); + err = 1; + return Sugar(rnum); + } + if (debug_ > 0) + mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, RA); +} + /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, Frame const& frameIn, CharMask const& cmask, @@ -909,6 +1059,25 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); // Get sugar residue numbers std::vector sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); + // Try to identify sugar rings + std::vector Sugars; + Sugars.reserve( sugarResNums.size() ); + for (std::vector::const_iterator rnum = sugarResNums.begin(); + rnum != sugarResNums.end(); ++rnum) + { + int err = 0; + Sugars.push_back( IdSugarRing(*rnum, topIn, err) ); + if (err != 0) { + if (errorsAreFatal_) { + mprinterr("Error: Problem identifying sugar ring for %s\n", + topIn.TruncResNameNum(*rnum).c_str()); + return 1; + } else + mprintf("Warning: Problem identifying sugar ring for %s\n", + topIn.TruncResNameNum(*rnum).c_str()); + } + Sugars.back().PrintInfo( topIn ); + } // For each sugar residue, try to fill in missing linkages if (findC1linkages) { mprintf("\tAttempting to identify missing linkages to sugar anomeric carbons.\n"); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index d63068e795..9650064005 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -15,6 +15,9 @@ class Exec_PrepareForLeap : public Exec { DispatchObject* Alloc() const { return (DispatchObject*)new Exec_PrepareForLeap(); } RetType Execute(CpptrajState&, ArgList&); private: + /// Hold indices for sugar + class Sugar; + inline void ChangeResName(Residue&, NameType const&) const; inline void ChangeAtomName(Atom&, NameType const&) const; @@ -34,6 +37,7 @@ class Exec_PrepareForLeap : public Exec { int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; int FindSugarC1Linkages(int, Topology&, Frame const&) const; + Sugar IdSugarRing(int, Topology const&, int&); int IdentifySugar(int, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; @@ -59,4 +63,19 @@ class Exec_PrepareForLeap : public Exec { int debug_; ///< Debug level std::string solventResName_; ///< Solvent residue name }; +// ----- Sugar class ---------------------------------------------------------- +class Exec_PrepareForLeap::Sugar { + public: + Sugar(int); + Sugar(int,int,int,int,std::vector const&); + + bool NotSet() const { return (ring_oxygen_atom_ == -1); } + void PrintInfo(Topology const&) const; + private: + int rnum_; ///< Residue index + int ring_oxygen_atom_; ///< Index of the ring oxygen atom + int anomeric_atom_; ///< Index of the anomeric C atom + int ano_ref_atom_; ///< Index of the anomeric reference C atom + std::vector ring_atoms_; ///< Index of all non-oxygen ring atoms +}; #endif From fb7992ef638afd6966072d0e0c6bfa08866840f3 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 13 Aug 2021 10:48:38 -0400 Subject: [PATCH 098/368] Add num ring atoms calc. Remove unneeded vars from function --- src/Exec_PrepareForLeap.cpp | 34 ++++++++++++++++++++-------------- src/Exec_PrepareForLeap.h | 2 ++ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a86161c7ea..613e94b47e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -32,16 +32,22 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { mprintf("\t%s : Not Set.\n", topIn.TruncResNameNum(rnum_).c_str()); } else { mprintf("\t%s :\n", topIn.TruncResNameNum(rnum_).c_str()); - mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); - mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); - mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); - mprintf("\t\tRing atoms :"); + mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); + mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); + mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); + mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); + mprintf("\t\tNon-O Ring atoms :"); for (std::vector::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); mprintf("\n"); } } +unsigned int Exec_PrepareForLeap::Sugar::NumRingAtoms() const { + if (NotSet()) return 0; + return ring_atoms_.size() + 1; +} + // ----------------------------------------------------------------------------- /** CONSTRUCTOR */ @@ -675,11 +681,11 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // Out of the potential ring start atoms, see which ones are actually // part of a ring. Potential ring start atoms only have 2 bonds, // each one to a carbon. - int n_ring_atoms = 0; +// int n_ring_atoms = 0; int ring_oxygen_atom = -1; // e.g. O5 // This will hold ring atoms, not including the ring oxygen std::vector RA; - std::vector IsRingAtom; +// std::vector IsRingAtom; for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); ++ringat) @@ -711,25 +717,25 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c ring_oxygen_atom = *ringat; anomeric_atom = c_beg; ano_ref_atom = c_end; - // Use IsRingAtom as a mask with ring atoms set to true - IsRingAtom.assign( topIn.Natom(), false ); - IsRingAtom[ring_oxygen_atom] = true; - n_ring_atoms = 1; +// // Use IsRingAtom as a mask with ring atoms set to true +// IsRingAtom.assign( topIn.Natom(), false ); +// IsRingAtom[ring_oxygen_atom] = true; +// n_ring_atoms = 1; RA.clear(); if (debug_ > 0) mprintf(" :"); // DEBUG for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { if (debug_ > 0) mprintf(" %i", *it + 1); if (*it == -1) break; - IsRingAtom[*it] = true; +// IsRingAtom[*it] = true; RA.push_back( *it ); - ++n_ring_atoms; +// ++n_ring_atoms; } if (debug_ > 0) mprintf("\n"); // DEBUG } } - mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); - if (n_ring_atoms == 0 || ring_oxygen_atom == -1) { + //mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); + if (RA.empty() || ring_oxygen_atom == -1) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); err = 1; return Sugar(rnum); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 9650064005..b3aa674c41 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -70,6 +70,8 @@ class Exec_PrepareForLeap::Sugar { Sugar(int,int,int,int,std::vector const&); bool NotSet() const { return (ring_oxygen_atom_ == -1); } + /// \return Number of ring atoms + unsigned int NumRingAtoms() const; void PrintInfo(Topology const&) const; private: int rnum_; ///< Residue index From 130329e0e265fc8d2e630d15757a709b71b20bc2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 13 Aug 2021 11:09:25 -0400 Subject: [PATCH 099/368] Use Sugar class in linkage determination. --- src/Exec_PrepareForLeap.cpp | 55 ++++++++----------------------------- src/Exec_PrepareForLeap.h | 11 +++++++- 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 613e94b47e..233dd95b46 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -537,9 +537,16 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector 0) mprintf("DEBUG: Anomeric ring carbon: %s\n", topIn.ResNameNumAtomNameNum(c_beg).c_str()); @@ -1087,15 +1056,15 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, // For each sugar residue, try to fill in missing linkages if (findC1linkages) { mprintf("\tAttempting to identify missing linkages to sugar anomeric carbons.\n"); - for (std::vector::const_iterator rnum = sugarResNums.begin(); - rnum != sugarResNums.end(); ++rnum) + for (std::vector::const_iterator sugar = Sugars.begin(); + sugar != Sugars.end(); ++sugar) { - if (FindSugarC1Linkages(*rnum, topIn, frameIn)) { + if (FindSugarC1Linkages(*sugar, topIn, frameIn)) { if (errorsAreFatal_) return 1; else mprintf("Warning: Finding anomeric C linkages for %s failed, skipping.\n", - topIn.TruncResNameNum( *rnum ).c_str()); + topIn.TruncResNameNum( sugar->ResNum() ).c_str()); } } } else { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index b3aa674c41..27c535213e 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -36,7 +36,7 @@ class Exec_PrepareForLeap : public Exec { int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; - int FindSugarC1Linkages(int, Topology&, Frame const&) const; + int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; Sugar IdSugarRing(int, Topology const&, int&); int IdentifySugar(int, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); @@ -69,6 +69,15 @@ class Exec_PrepareForLeap::Sugar { Sugar(int); Sugar(int,int,int,int,std::vector const&); + int ResNum() const { return rnum_; } + int RingOxygenAtom() const { return ring_oxygen_atom_; } + int AnomericAtom() const { return anomeric_atom_; } + int AnomericRefAtom() const { return ano_ref_atom_; } + + typedef std::vector::const_iterator const_iterator; + const_iterator ringbegin() const { return ring_atoms_.begin(); } + const_iterator ringend() const { return ring_atoms_.end(); } + bool NotSet() const { return (ring_oxygen_atom_ == -1); } /// \return Number of ring atoms unsigned int NumRingAtoms() const; From 618ea52ce06a5d523618501e3c8dd82b18ce28fb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 13 Aug 2021 11:28:31 -0400 Subject: [PATCH 100/368] Use Sugar in IdentifySugar --- src/Exec_PrepareForLeap.cpp | 39 ++++++++++++++++++++++++++----------- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 233dd95b46..177ef25a87 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -715,10 +715,17 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } /** Attempt to identify sugar residue, form, and linkages. */ -int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, +int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, Frame const& frameIn, CharMask const& cmask, CpptrajFile* outfile, std::set& sugarBondsToRemove) { + if (sugar.NotSet()) { + mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", + topIn.TruncResNameNum(sugar.ResNum()).c_str()); + return 0; // TODO return 1? + } + + int rnum = sugar.ResNum(); Residue& res = topIn.SetRes(rnum); // Try to ID the base sugar type from the input name. char resChar = ' '; @@ -751,7 +758,7 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, ChangeAtomName(topIn.SetAtom(at), "CME"); } } - +/* // Try to identify the sugar ring. Potential starting atoms are oxygens // bonded to two carbon atoms. Also save potential stereocenter indices // (i.e. carbons bonded to 4 other atoms). Since input structure may not @@ -854,12 +861,20 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); +*/ + // Create an array with all ring atoms set to true + std::vector IsRingAtom; + IsRingAtom.assign( topIn.Natom(), false ); + IsRingAtom[sugar.RingOxygenAtom()] = true; + for (Sugar::const_iterator it = sugar.ringbegin(); it != sugar.ringend(); ++it) + IsRingAtom[ *it ] = true; double t_c1 = 0; double t_c5 = 0; // Calculate torsion around anomeric carbon: - int ret = CalcAnomericTorsion(t_c1, ring_oxygen_atom, anomeric_atom, rnum, topIn, frameIn, IsRingAtom); + int ret = CalcAnomericTorsion(t_c1, sugar.RingOxygenAtom(), sugar.AnomericAtom(), + rnum, topIn, frameIn, IsRingAtom); if (ret < 0) { // This means C1 X substituent missing; non-fatal. resStat_[rnum] = SUGAR_MISSING_C1X; @@ -870,7 +885,8 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, } // Calculate torsion around anomeric reference: - if (CalcAnomericRefTorsion(t_c5, ano_ref_atom, ring_oxygen_atom, topIn, frameIn, IsRingAtom)) + if (CalcAnomericRefTorsion(t_c5, sugar.AnomericRefAtom(), sugar.RingOxygenAtom(), + topIn, frameIn, IsRingAtom)) return 1; // Determine alpha/beta @@ -889,7 +905,8 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, // stereocenter with the highest index. Start from final ring carbon. int highest_stereocenter = -1; std::vector remainingChainCarbons; - if (FindRemainingChainCarbons(remainingChainCarbons, ano_ref_atom, topIn, rnum, IsRingAtom)) + if (FindRemainingChainCarbons(remainingChainCarbons, sugar.AnomericRefAtom(), + topIn, rnum, IsRingAtom)) return 1; if (debug_ > 0) mprintf("\t Remaining chain carbons:\n"); for (std::vector::const_iterator it = remainingChainCarbons.begin(); @@ -914,12 +931,12 @@ int Exec_PrepareForLeap::IdentifySugar(int rnum, Topology& topIn, } if (highest_stereocenter == -1) { // This means that ano_ref_atom is the highest stereocenter. - highest_stereocenter = ano_ref_atom; + highest_stereocenter = sugar.AnomericRefAtom(); } mprintf("\t Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); // Determine D/L bool isDform; - if (highest_stereocenter != ano_ref_atom) { + if (highest_stereocenter != sugar.AnomericRefAtom()) { double stereo_t = 0; if (CalcStereocenterTorsion(stereo_t, highest_stereocenter, topIn, frameIn)) return 1; @@ -1072,18 +1089,18 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, } // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. - for (std::vector::const_iterator rnum = sugarResNums.begin(); - rnum != sugarResNums.end(); ++rnum) + for (std::vector::const_iterator sugar = Sugars.begin(); + sugar != Sugars.end(); ++sugar) { //Residue const& Res = coords.Top().Res(*rnum); // See if we recognize this sugar. - if (IdentifySugar(*rnum, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) + if (IdentifySugar(*sugar, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) { if (errorsAreFatal_) return 1; else mprintf("Warning: Preparation of sugar %s failed, skipping.\n", - topIn.TruncResNameNum( *rnum ).c_str()); + topIn.TruncResNameNum( sugar->ResNum() ).c_str()); } } // END loop over sugar residues // Remove bonds between sugars diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 27c535213e..3d356bb7a2 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -38,7 +38,7 @@ class Exec_PrepareForLeap : public Exec { std::vector const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; Sugar IdSugarRing(int, Topology const&, int&); - int IdentifySugar(int, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); + int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, From b68dc99f1331549121ad8b9eede71ac940c794e3 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 13 Aug 2021 11:31:10 -0400 Subject: [PATCH 101/368] Remove obsolete code --- src/Exec_PrepareForLeap.cpp | 112 ------------------------------------ 1 file changed, 112 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 177ef25a87..a698e207ab 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -650,11 +650,9 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // Out of the potential ring start atoms, see which ones are actually // part of a ring. Potential ring start atoms only have 2 bonds, // each one to a carbon. -// int n_ring_atoms = 0; int ring_oxygen_atom = -1; // e.g. O5 // This will hold ring atoms, not including the ring oxygen std::vector RA; -// std::vector IsRingAtom; for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); ++ringat) @@ -686,24 +684,17 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c ring_oxygen_atom = *ringat; anomeric_atom = c_beg; ano_ref_atom = c_end; -// // Use IsRingAtom as a mask with ring atoms set to true -// IsRingAtom.assign( topIn.Natom(), false ); -// IsRingAtom[ring_oxygen_atom] = true; -// n_ring_atoms = 1; RA.clear(); if (debug_ > 0) mprintf(" :"); // DEBUG for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { if (debug_ > 0) mprintf(" %i", *it + 1); if (*it == -1) break; -// IsRingAtom[*it] = true; RA.push_back( *it ); -// ++n_ring_atoms; } if (debug_ > 0) mprintf("\n"); // DEBUG } } - //mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); if (RA.empty() || ring_oxygen_atom == -1) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); err = 1; @@ -758,110 +749,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, ChangeAtomName(topIn.SetAtom(at), "CME"); } } -/* - // Try to identify the sugar ring. Potential starting atoms are oxygens - // bonded to two carbon atoms. Also save potential stereocenter indices - // (i.e. carbons bonded to 4 other atoms). Since input structure may not - // have any hydrogens, count bonds to heavy atoms only, must make at - // least 3 bonds (otherwise e.g. likely 2 hydrogens). - std::vector potentialRingStartAtoms; - for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - { - Atom const& currentAtom = topIn[at]; - if (currentAtom.Element() == Atom::OXYGEN) { - if (currentAtom.Nbonds() == 2) { - if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(0)].ResNum() == rnum && - topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(1)].ResNum() == rnum ) - { - potentialRingStartAtoms.push_back( at ); - } - } - } - } - // TODO handle case where multiple potential ring start atoms exist - if (potentialRingStartAtoms.empty()) { - mprintf("Warning: Ring oxygen could not be identified for %s\n", - topIn.TruncResNameNum(rnum).c_str()); - resStat_[rnum] = SUGAR_MISSING_RING_O; - return 0; - } else if (potentialRingStartAtoms.size() > 1) { - mprinterr("Error: Multiple potential ring start atoms:\n"); - for (std::vector::const_iterator it = potentialRingStartAtoms.begin(); - it != potentialRingStartAtoms.end(); - ++it) - mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - return 1; - } - // The anomeric carbon is the carbon that was part of the carbonyl group - // in the straight chain. It is therefore typically the carbon bonded - // to the ring oxygen with the lower index. - int anomeric_atom = -1; // e.g. C1 - // The anomeric reference carbon is the stereocenter farthest from the - // anomeric carbon in the ring. - int ano_ref_atom = -1; // e.g. C5 - // Out of the potential ring start atoms, see which ones are actually - // part of a ring. Potential ring start atoms only have 2 bonds, - // each one to a carbon. - int n_ring_atoms = 0; - int ring_oxygen_atom = -1; // e.g. O5 - std::vector IsRingAtom; - for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); - ringat != potentialRingStartAtoms.end(); - ++ringat) - { - std::vector Visited( topIn.Natom(), true ); - for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - if (at != *ringat) - Visited[at] = false; - std::vector ring_atoms( topIn.Res(rnum).NumAtoms(), -1 ); - bool ring_complete = false; - // Since we have already established that *ringat is an oxygen bonded - // to two carbons, just start at the first carbon to see if we can - // get to the second carbon. - int c_beg, c_end; - if (topIn[*ringat].Bond(0) < topIn[*ringat].Bond(1)) { - c_beg = topIn[*ringat].Bond(0); - c_end = topIn[*ringat].Bond(1); - } else { - c_beg = topIn[*ringat].Bond(1); - c_end = topIn[*ringat].Bond(0); - } - FollowBonds(c_beg, topIn, 0, ring_atoms, - c_end, Visited, ring_complete); - if (debug_ > 0) - mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", - topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); - // TODO handle the case where multiple potential ring start atoms exist - if (ring_complete) { - ring_oxygen_atom = *ringat; - anomeric_atom = c_beg; - ano_ref_atom = c_end; - // Use IsRingAtom as a mask with ring atoms set to true - IsRingAtom.assign( topIn.Natom(), false ); - IsRingAtom[ring_oxygen_atom] = true; - n_ring_atoms = 1; - if (debug_ > 0) mprintf(" :"); // DEBUG - for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) - { - if (debug_ > 0) mprintf(" %i", *it + 1); - if (*it == -1) break; - IsRingAtom[*it] = true; - ++n_ring_atoms; - } - if (debug_ > 0) mprintf("\n"); // DEBUG - } - } - mprintf("\t Number of ring atoms= %i\n", n_ring_atoms); - if (n_ring_atoms == 0 || ring_oxygen_atom == -1) { - mprinterr("Error: Sugar ring atoms could not be identified.\n"); - return 1; - } - if (debug_ > 0) - mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); -*/ // Create an array with all ring atoms set to true std::vector IsRingAtom; IsRingAtom.assign( topIn.Natom(), false ); From 33cf119f992ca886af09d7ed7610c990962750e0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 13 Aug 2021 14:41:21 -0400 Subject: [PATCH 102/368] Preface potential problem messages with standard header to make it easier to grep --- src/Exec_PrepareForLeap.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a698e207ab..c186b22165 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1722,7 +1722,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // Residue validation. - mprintf("\tResidues with potential problems:\n"); + //mprintf("\tResidues with potential problems:\n"); + static const char* msg = "Potential problem: "; for (ResStatArray::iterator it = resStat_.begin(); it != resStat_.end(); ++it) { //if ( *it == VALIDATED ) @@ -1732,19 +1733,19 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if ( *it == UNKNOWN ) { SetType::const_iterator pname = pdb_res_names_.find( topIn.Res(it-resStat_.begin()).Name() ); if (pname == pdb_res_names_.end()) - mprintf("\t\t%s is an unrecognized name and may not have parameters.\n", - topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + mprintf("\t%s%s is an unrecognized name and may not have parameters.\n", + msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); else *it = VALIDATED; } else if ( *it == UNRECOGNIZED_SUGAR_LINKAGE ) { - mprintf("\t\t%s is linked to a sugar but has no sugar-linkage form.\n", - topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + mprintf("\t%s%s is linked to a sugar but has no sugar-linkage form.\n", + msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); } else if ( *it == SUGAR_MISSING_C1X ) { - mprintf("\t\t%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", - topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", + msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); } else if ( *it == SUGAR_MISSING_RING_O ) { - mprintf("\t\t%s Sugar is missing ring oxygen and cannot be identified.\n", - topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + mprintf("\t%s%s Sugar is missing ring oxygen and cannot be identified.\n", + msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); } } From 24d39acfa538bd75e6af8f44add1b8b3187bfbc5 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 13 Aug 2021 14:48:35 -0400 Subject: [PATCH 103/368] Count recognized solvent residues, mark them as validated --- src/Exec_PrepareForLeap.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index c186b22165..7baa1d5797 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1721,6 +1721,19 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } + // Count any solvent molecules + if (!remove_water) { + NameType solvName(solventResName_); + unsigned int nsolvent = 0; + for (Topology::res_iterator res = topIn.ResStart(); res != topIn.ResEnd(); ++res) { + if ( res->Name() == solvName) { + nsolvent++; + resStat_[res-topIn.ResStart()] = VALIDATED; + } + } + if (nsolvent > 0) mprintf("\t%u solvent residues.\n", nsolvent); + } + // Residue validation. //mprintf("\tResidues with potential problems:\n"); static const char* msg = "Potential problem: "; From 889002cafb6cdf564a5cd959b3de4270ce984790 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 31 Aug 2021 08:45:17 -0400 Subject: [PATCH 104/368] Change 'watermask' to 'watername' since it is not really a mask expression --- src/Exec_PrepareForLeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7baa1d5797..5b6ecb62c6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -63,7 +63,7 @@ void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] name [pdbout ]\n" "\t[leapunitname ] [out [skiperrors]\n" - "\t[nowat [watermask ] [noh] [keepaltloc ]\n" + "\t[nowat [watername ] [noh] [keepaltloc ]\n" "\t[stripmask ] [solventresname ]\n" "\t[{nohisdetect |\n" "\t [nd1 ] [ne2 ] [hiename ]\n" @@ -1520,7 +1520,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); - std::string waterMask = argIn.GetStringKey("watermask", ":" + solventResName_); + std::string waterMask = argIn.GetStringKey("watername", ":" + solventResName_); bool remove_h = argIn.hasKey("noh"); std::string altLocArg = argIn.GetStringKey("keepaltloc"); char altLocChar = '\0'; From 8ba1d5f927c676af378e4d4f9d26ea6303a3bd83 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 31 Aug 2021 10:36:17 -0400 Subject: [PATCH 105/368] Start adding code to handle custom pdb to glycam atom name map --- src/Exec_PrepareForLeap.cpp | 66 ++++++++++++++++++++++++++++--------- src/Exec_PrepareForLeap.h | 18 ++++++++-- 2 files changed, 67 insertions(+), 17 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 5b6ecb62c6..7638b2f952 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -267,25 +267,61 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) return 1; } const char* ptr = 0; + // Describe which section of the file we are in + enum SectionType { PDB_RESMAP_SECTION = 0, PDB_ATOMMAP_SECTION }; + SectionType section = PDB_RESMAP_SECTION; while ( (ptr = infile.NextLine()) != 0 ) { ArgList argline( ptr, " " ); if (argline[0][0] != '#') { - if (argline.Nargs() != 3) { - mprinterr("Error: Expected only 3 data columns in '%s', got %i\n", - infile.Filename().full(), argline.Nargs()); - mprinterr("Error: %s\n", ptr); - return 1; - } - ArgList pdbnames( argline[2], "," ); - if (pdbnames.Nargs() < 1) { - mprinterr("Error: No pdb names found.\n"); - mprinterr("Error: %s\n", ptr); - return 1; + + if (section == PDB_RESMAP_SECTION) { + // "" + if (argline.Nargs() != 3) { + mprinterr("Error: Expected only 3 columns in '%s' res map section, got %i\n", + infile.Filename().full(), argline.Nargs()); + mprinterr("Error: %s\n", ptr); + return 1; + } + ArgList pdbnames( argline[2], "," ); + if (pdbnames.Nargs() < 1) { + mprinterr("Error: No pdb names found.\n"); + mprinterr("Error: %s\n", ptr); + return 1; + } + // TODO handle glycam res names with > 1 char + for (int n = 0; n < pdbnames.Nargs(); n++) + pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) ); + } else if (section == PDB_ATOMMAP_SECTION) { + // ... + if (argline.Nargs() < 2) { + mprinterr("Error: Expected at least 2 columns in '%s' atom map section, got %i\n", + infile.Filename().full(), argline.Nargs()); + mprinterr("Error: %s\n", ptr); + return 1; + } + // TODO handle glycam res names with > 1 char + ArgList glycamnames( argline[0], "," ); + if (glycamnames.Nargs() < 1) { + mprinterr("Error: No Glycam names found.\n"); + mprinterr("Error: %s\n", ptr); + return 1; + } + int glycam_map_idx = (int)pdb_glycam_name_maps_.size(); + pdb_glycam_name_maps_.push_back(NameMapType()); + NameMapType& currentMap = pdb_glycam_name_maps_.back(); + for (int col = 1; col < argline.Nargs(); col++) { + ArgList namepair( argline[col], "," ); + if (namepair.Nargs() != 2) { + mprinterr("Error: Expected only 2 names for name pair, got %i\n", namepair.Nargs()); + mprinterr("Error: %s\n", ptr); + } + currentMap.insert( NamePairType(NameType(namepair[0]), NameType(namepair[1])) ); + } // END loop over name pair columns + // Map will be for each glycam res + for (ArgList::const_iterator gres = glycamnames.begin(); gres != glycamnames.end(); ++gres) + glycam_res_idx_map_.insert( ResIdxPairType( (*gres)[0], glycam_map_idx ) ); } - // TODO handle glycam res names with > 1 char - for (int n = 0; n < pdbnames.Nargs(); n++) - pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) ); - } + } // END not comment } // END loop over file infile.CloseFile(); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 3d356bb7a2..74c9aa7d41 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -49,17 +49,31 @@ class Exec_PrepareForLeap : public Exec { NameType const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&) const; - std::string leapunitname_; + typedef std::pair PairType; typedef std::map MapType; MapType pdb_to_glycam_; ///< Map PDB residue names to Glycam 1 char names + typedef std::set SetType; SetType pdb_res_names_; ///< PDB residue names recognized by Amber FFs - bool errorsAreFatal_; ///< If false, try to skip errors. + enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, SUGAR_MISSING_RING_O }; typedef std::vector ResStatArray; ResStatArray resStat_; ///< Contain status of each residue + + typedef std::pair NamePairType; + typedef std::map NameMapType; + /// Hold maps of pdb atom names to glycam atom names + std::vector pdb_glycam_name_maps_; + + typedef std::pair ResIdxPairType; + typedef std::map ResIdxMapType; + /// Map glycam residue chars to pdb-glycam atom name maps + ResIdxMapType glycam_res_idx_map_; + + std::string leapunitname_; + bool errorsAreFatal_; ///< If false, try to skip errors. int debug_; ///< Debug level std::string solventResName_; ///< Solvent residue name }; From 65ede0ffffdcac543e517fa9f4c45b195db534c5 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 31 Aug 2021 10:53:50 -0400 Subject: [PATCH 106/368] Add PDB to glycam atom name maps --- dat/Carbohydrate_PDB_Glycam_Names.txt | 4 ++++ .../glycam.csv.to.dat/glycam.csv.to.dat.cpp | 6 +++++ src/Exec_PrepareForLeap.cpp | 23 +++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 14a983a941..0292c7e8e5 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -29,3 +29,7 @@ "Sorbose" B SOR "Psicose" P PSI "N-Acetyl Neuraminic Acid" S SIA + +# PDB to glycam atom name maps +V,W,Y C7,C2N O7,O2N C8,CME +S C10,C5N O10,O5N C11,CME diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp index 5e6795afac..979274965f 100644 --- a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -63,6 +63,12 @@ int main(int argc, char** argv) { } lineNum++; } + + // Add name map section manually + fprintf(outfile, "\n# PDB to glycam atom name maps\n"); + fprintf(outfile, "V,W,Y C7,C2N O7,O2N C8,CME\n"); + fprintf(outfile, "S C10,C5N O10,O5N C11,CME\n"); + fclose( infile ); return err; diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7638b2f952..a6fd2eaf13 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -272,8 +272,14 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) SectionType section = PDB_RESMAP_SECTION; while ( (ptr = infile.NextLine()) != 0 ) { ArgList argline( ptr, " " ); - if (argline[0][0] != '#') { - + // Check for section change first + if (argline.Nargs() < 1) { + if (section == PDB_RESMAP_SECTION) { + mprintf("DEBUG: Section change.\n"); + section = PDB_ATOMMAP_SECTION; + } + } else if (argline[0][0] != '#') { + // Skipping comments, read sections if (section == PDB_RESMAP_SECTION) { // "" if (argline.Nargs() != 3) { @@ -292,6 +298,7 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) for (int n = 0; n < pdbnames.Nargs(); n++) pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) ); } else if (section == PDB_ATOMMAP_SECTION) { + mprintf("DEBUG: line %s\n", ptr); // ... if (argline.Nargs() < 2) { mprinterr("Error: Expected at least 2 columns in '%s' atom map section, got %i\n", @@ -1662,6 +1669,18 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) mprintf("\t %4s -> %c\n", *(mit->first), mit->second); } + // DEBUG - print atom name map + mprintf("\tRes char to atom map index map:\n"); + for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) + mprintf("\t %c -> %i\n", mit->first, mit->second); + mprintf("\tAtom name maps:\n"); + for (std::vector::const_iterator it = pdb_glycam_name_maps_.begin(); it != pdb_glycam_name_maps_.end(); ++it) + { + mprintf(" %li)", it - pdb_glycam_name_maps_.begin()); + for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) + mprintf(" %s:%s", *(mit->first), *(mit->second)); + mprintf("\n"); + } } // Get sugar mask or default sugar mask From 62311b6d2dcc2886c94797067a02154cb6551ddc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 31 Aug 2021 11:07:30 -0400 Subject: [PATCH 107/368] Use new atom name map code --- src/Exec_PrepareForLeap.cpp | 29 ++++++++++++++++++++++++++++- src/Exec_PrepareForLeap.h | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a6fd2eaf13..637bd21f1b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -748,6 +748,28 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, RA); } +/** Change PDB atom names in residue to glycam ones. */ +int Exec_PrepareForLeap::ChangePdbAtomNamesToGlycam(char resChar, Residue const& res, Topology& topIn) +const +{ + // Get the appropriate map + ResIdxMapType::const_iterator resIdxPair = glycam_res_idx_map_.find( resChar ); + if (resIdxPair == glycam_res_idx_map_.end()) { + // No map needed for this residue + mprintf("DEBUG: No atom map for residue '%c'.\n", resChar); + return 0; + } + NameMapType const& currentMap = pdb_glycam_name_maps_[resIdxPair->second]; + // Change PDB names to Glycam ones + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + { + NameMapType::const_iterator namePair = currentMap.find( topIn[at].Name() ); + if (namePair != currentMap.end()) + ChangeAtomName( topIn.SetAtom(at), namePair->second ); + } + return 0; +} + /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, Frame const& frameIn, CharMask const& cmask, @@ -774,6 +796,11 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); // Change PDB names to Glycam ones + if (ChangePdbAtomNamesToGlycam(resChar, res, topIn)) { + mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); + return 1; + } +/* for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { if (resChar == 'Y') { @@ -791,7 +818,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, else if ( topIn[at].Name() == "C11" ) ChangeAtomName(topIn.SetAtom(at), "CME"); } - } + }*/ // Create an array with all ring atoms set to true std::vector IsRingAtom; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 74c9aa7d41..3bd48ead5a 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -38,6 +38,7 @@ class Exec_PrepareForLeap : public Exec { std::vector const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; Sugar IdSugarRing(int, Topology const&, int&); + int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; From 01242ef1fde8aacffbad98a6c983199db917707a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 31 Aug 2021 11:10:11 -0400 Subject: [PATCH 108/368] Remove old code --- src/Exec_PrepareForLeap.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 637bd21f1b..7616e73eda 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -238,6 +238,7 @@ void Exec_PrepareForLeap::SetGlycamPdbResMap() { pdb_to_glycam_.insert( PairType("GAL", 'L') ); pdb_to_glycam_.insert( PairType("BMA", 'M') ); pdb_to_glycam_.insert( PairType("MAN", 'M') ); + // TODO internal atom name map } /** Load PDB to Glycam residue map from file. */ @@ -800,25 +801,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); return 1; } -/* - for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - { - if (resChar == 'Y') { - if ( topIn[at].Name() == "C7" ) - ChangeAtomName(topIn.SetAtom(at), "C2N"); - else if ( topIn[at].Name() == "O7" ) - ChangeAtomName(topIn.SetAtom(at), "O2N"); - else if ( topIn[at].Name() == "C8" ) - ChangeAtomName(topIn.SetAtom(at), "CME"); - } else if (resChar == 'S') { - if ( topIn[at].Name() == "C10" ) - ChangeAtomName(topIn.SetAtom(at), "C5N"); - else if ( topIn[at].Name() == "O10" ) - ChangeAtomName(topIn.SetAtom(at), "O5N"); - else if ( topIn[at].Name() == "C11" ) - ChangeAtomName(topIn.SetAtom(at), "CME"); - } - }*/ // Create an array with all ring atoms set to true std::vector IsRingAtom; From 806e24b53235220796fc744b7947b66629011d8c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Sep 2021 09:52:48 -0400 Subject: [PATCH 109/368] Add linkage res name map read --- dat/Carbohydrate_PDB_Glycam_Names.txt | 6 ++++++ src/Exec_PrepareForLeap.cpp | 23 +++++++++++++++++++---- src/Exec_PrepareForLeap.h | 3 +++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 0292c7e8e5..1bfc35117b 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -33,3 +33,9 @@ # PDB to glycam atom name maps V,W,Y C7,C2N O7,O2N C8,CME S C10,C5N O10,O5N C11,CME + +# PDB to glycame linkage residue name maps +SER OLS +THR OLT +HYP OLP +ASN NLN diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7616e73eda..358f2d6495 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -269,16 +269,18 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) } const char* ptr = 0; // Describe which section of the file we are in - enum SectionType { PDB_RESMAP_SECTION = 0, PDB_ATOMMAP_SECTION }; + enum SectionType { PDB_RESMAP_SECTION = 0, PDB_ATOMMAP_SECTION, PDB_LINKAGE_RES_SECTION }; SectionType section = PDB_RESMAP_SECTION; while ( (ptr = infile.NextLine()) != 0 ) { ArgList argline( ptr, " " ); // Check for section change first if (argline.Nargs() < 1) { if (section == PDB_RESMAP_SECTION) { - mprintf("DEBUG: Section change.\n"); + //mprintf("DEBUG: Section change.\n"); section = PDB_ATOMMAP_SECTION; - } + } else if (section == PDB_ATOMMAP_SECTION) { + section = PDB_LINKAGE_RES_SECTION; + } } else if (argline[0][0] != '#') { // Skipping comments, read sections if (section == PDB_RESMAP_SECTION) { @@ -328,6 +330,15 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) // Map will be for each glycam res for (ArgList::const_iterator gres = glycamnames.begin(); gres != glycamnames.end(); ++gres) glycam_res_idx_map_.insert( ResIdxPairType( (*gres)[0], glycam_map_idx ) ); + } else if (section == PDB_LINKAGE_RES_SECTION) { + // + if (argline.Nargs() != 2) { + mprinterr("Error: Expected only 2 columns in '%s' linkage res map section, got %i\n", + infile.Filename().full(), argline.Nargs()); + mprinterr("Error: %s\n", ptr); + } + pdb_glycam_linkageRes_map_.insert( NamePairType(NameType(argline[0]), + NameType(argline[1])) ); } } // END not comment } // END loop over file @@ -1685,11 +1696,15 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tAtom name maps:\n"); for (std::vector::const_iterator it = pdb_glycam_name_maps_.begin(); it != pdb_glycam_name_maps_.end(); ++it) { - mprintf(" %li)", it - pdb_glycam_name_maps_.begin()); + mprintf("\t %li)", it - pdb_glycam_name_maps_.begin()); for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) mprintf(" %s:%s", *(mit->first), *(mit->second)); mprintf("\n"); } + // DEBUG - print linkage res map + mprintf("\tLinkage res name map:\n"); + for (NameMapType::const_iterator mit = pdb_glycam_linkageRes_map_.begin(); mit != pdb_glycam_linkageRes_map_.end(); ++mit) + mprintf("\t %s -> %s\n", *(mit->first), *(mit->second)); } // Get sugar mask or default sugar mask diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 3bd48ead5a..6e66b08c6a 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -73,6 +73,9 @@ class Exec_PrepareForLeap : public Exec { /// Map glycam residue chars to pdb-glycam atom name maps ResIdxMapType glycam_res_idx_map_; + /// Map pdb residue names to glycam linkage residue names + NameMapType pdb_glycam_linkageRes_map_; + std::string leapunitname_; bool errorsAreFatal_; ///< If false, try to skip errors. int debug_; ///< Debug level From c62dc7fd29882276777d6b38bd6357199abcc839 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Sep 2021 09:58:57 -0400 Subject: [PATCH 110/368] Use linkage res name map --- src/Exec_PrepareForLeap.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 358f2d6495..08ca844b59 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -768,7 +768,7 @@ const ResIdxMapType::const_iterator resIdxPair = glycam_res_idx_map_.find( resChar ); if (resIdxPair == glycam_res_idx_map_.end()) { // No map needed for this residue - mprintf("DEBUG: No atom map for residue '%c'.\n", resChar); + //mprintf("DEBUG: No atom map for residue '%c'.\n", resChar); return 0; } NameMapType const& currentMap = pdb_glycam_name_maps_[resIdxPair->second]; @@ -920,19 +920,12 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, topIn.ResNameNumAtomNameNum(*bat).c_str()); linkages.insert( topIn[at].Name() ); bondsToRemove.push_back( BondType(at, *bat, -1) ); - // Check if this is a recognized linkage to non-sugar TODO put in another file? + // Check if this is a recognized linkage to non-sugar Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); - if ( pres.Name() == "SER" ) { - ChangeResName( pres, "OLS" ); - resStat_[topIn[*bat].ResNum()] = VALIDATED; - } else if ( pres.Name() == "THR" ) { - ChangeResName( pres, "OLT" ); - resStat_[topIn[*bat].ResNum()] = VALIDATED; - } else if ( pres.Name() == "HYP" ) { - ChangeResName( pres, "OLP" ); - resStat_[topIn[*bat].ResNum()] = VALIDATED; - } else if ( pres.Name() == "ASN" ) { - ChangeResName( pres, "NLN" ); + NameMapType::const_iterator lname = pdb_glycam_linkageRes_map_.find( pres.Name() ); + if (lname != pdb_glycam_linkageRes_map_.end()) { + mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); + ChangeResName( pres, lname->second ); resStat_[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); From 2c0dfc8a7a9eb8095283d5ec6d00922b01b412d1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Sep 2021 10:00:58 -0400 Subject: [PATCH 111/368] Add res name linkage map section --- .../converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp index 979274965f..7dcc3fc59b 100644 --- a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -69,6 +69,13 @@ int main(int argc, char** argv) { fprintf(outfile, "V,W,Y C7,C2N O7,O2N C8,CME\n"); fprintf(outfile, "S C10,C5N O10,O5N C11,CME\n"); + // Add linkage res name map section manually + fprintf(outfile, "\n# PDB to glycame linkage residue name maps\n"); + fprintf(outfile, "SER OLS\n"); + fprintf(outfile, "THR OLT\n"); + fprintf(outfile, "HYP OLP\n"); + fprintf(outfile, "ASN NLN\n"); + fclose( infile ); return err; From 63af6216f294734cabff1330a71e44c440b2b92d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Sep 2021 10:01:54 -0400 Subject: [PATCH 112/368] Update the time stamp --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 1bfc35117b..dbcab0650b 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -1,6 +1,6 @@ # This file contains the mapping from common PDB names to Glycam residue codes. # Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB -# Last updated 07/28/21 10:42:50 +# Last updated 09/01/21 10:01:41 "Glucose" G GLC,MAL,BGC "N-Acetyl Glucosamine" Y NAG,4YS,SGN,BGLN,NDG "Glucosamine" Y GCS From 6f20be81334c1e25ae30e6d71c774a3394a52c68 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Sep 2021 10:15:41 -0400 Subject: [PATCH 113/368] Hide some debug info --- src/Exec_PrepareForLeap.cpp | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 08ca844b59..30291027cc 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -301,7 +301,6 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) for (int n = 0; n < pdbnames.Nargs(); n++) pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) ); } else if (section == PDB_ATOMMAP_SECTION) { - mprintf("DEBUG: line %s\n", ptr); // ... if (argline.Nargs() < 2) { mprinterr("Error: Expected at least 2 columns in '%s' atom map section, got %i\n", @@ -1676,28 +1675,28 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } mprintf("\t%zu entries in PDB to glycam name map.\n", pdb_to_glycam_.size()); - // DEBUG - print residue name map if (debug_ > 0) { + // DEBUG - print residue name map mprintf("\tResidue name map:\n"); for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) mprintf("\t %4s -> %c\n", *(mit->first), mit->second); + // DEBUG - print atom name maps + mprintf("\tRes char to atom map index map:\n"); + for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) + mprintf("\t %c -> %i\n", mit->first, mit->second); + mprintf("\tAtom name maps:\n"); + for (std::vector::const_iterator it = pdb_glycam_name_maps_.begin(); it != pdb_glycam_name_maps_.end(); ++it) + { + mprintf("\t %li)", it - pdb_glycam_name_maps_.begin()); + for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) + mprintf(" %s:%s", *(mit->first), *(mit->second)); + mprintf("\n"); + } + // DEBUG - print linkage res map + mprintf("\tLinkage res name map:\n"); + for (NameMapType::const_iterator mit = pdb_glycam_linkageRes_map_.begin(); mit != pdb_glycam_linkageRes_map_.end(); ++mit) + mprintf("\t %s -> %s\n", *(mit->first), *(mit->second)); } - // DEBUG - print atom name map - mprintf("\tRes char to atom map index map:\n"); - for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) - mprintf("\t %c -> %i\n", mit->first, mit->second); - mprintf("\tAtom name maps:\n"); - for (std::vector::const_iterator it = pdb_glycam_name_maps_.begin(); it != pdb_glycam_name_maps_.end(); ++it) - { - mprintf("\t %li)", it - pdb_glycam_name_maps_.begin()); - for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) - mprintf(" %s:%s", *(mit->first), *(mit->second)); - mprintf("\n"); - } - // DEBUG - print linkage res map - mprintf("\tLinkage res name map:\n"); - for (NameMapType::const_iterator mit = pdb_glycam_linkageRes_map_.begin(); mit != pdb_glycam_linkageRes_map_.end(); ++mit) - mprintf("\t %s -> %s\n", *(mit->first), *(mit->second)); } // Get sugar mask or default sugar mask From 7081b4596199e208e7a47624c05c4527e8fffcb3 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 5 Oct 2021 10:16:23 -0400 Subject: [PATCH 114/368] Fix typo --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index dbcab0650b..0c927d01e7 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -34,7 +34,7 @@ V,W,Y C7,C2N O7,O2N C8,CME S C10,C5N O10,O5N C11,CME -# PDB to glycame linkage residue name maps +# PDB to glycam linkage residue name maps SER OLS THR OLT HYP OLP From 857faaa8f405088ae6005f0e3eac09700b531ae4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 5 Oct 2021 11:27:35 -0400 Subject: [PATCH 115/368] Cannot always assume the anomeric carbon has the lowest index --- src/Exec_PrepareForLeap.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 30291027cc..a460a6e1de 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -695,8 +695,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } // The anomeric carbon is the carbon that was part of the carbonyl group - // in the straight chain. It is therefore typically the carbon bonded - // to the ring oxygen with the lower index. + // in the straight chain. It is therefore typically the carbon with fewer + // bonds to other carbons. int anomeric_atom = -1; // e.g. C1 // The anomeric reference carbon is the stereocenter farthest from the // anomeric carbon in the ring. @@ -736,8 +736,27 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // TODO handle the case where multiple potential ring start atoms exist if (ring_complete) { ring_oxygen_atom = *ringat; - anomeric_atom = c_beg; - ano_ref_atom = c_end; + // Try to ascertain which carbon might be the anomeric carbon (i.e. the + // carbon that originally started the chain). Tie goes to lower index. + int c_beg_bonds_to_C = 0; + for (Atom::bond_iterator bat = topIn[c_beg].bondbegin(); bat != topIn[c_beg].bondend(); ++bat) + if (topIn[*bat].Element() == Atom::CARBON) + c_beg_bonds_to_C++; + int c_end_bonds_to_C = 0; + for (Atom::bond_iterator bat = topIn[c_end].bondbegin(); bat != topIn[c_end].bondend(); ++bat) + if (topIn[*bat].Element() == Atom::CARBON) + c_end_bonds_to_C++; + if (debug_ > 0) + mprintf("(%s bonds to C= %i, %s bonds to C = %i)", // DEBUG + topIn.ResNameNumAtomNameNum(c_beg).c_str(), c_beg_bonds_to_C, + topIn.ResNameNumAtomNameNum(c_end).c_str(), c_end_bonds_to_C); + if (c_beg_bonds_to_C <= c_end_bonds_to_C) { + anomeric_atom = c_beg; + ano_ref_atom = c_end; + } else { + anomeric_atom = c_end; + ano_ref_atom = c_beg; + } RA.clear(); if (debug_ > 0) mprintf(" :"); // DEBUG for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) From 396e92380c1d0f8ad797f2d39f1f48d9750e73af Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 5 Oct 2021 12:06:30 -0400 Subject: [PATCH 116/368] Add some debug info --- src/Exec_PrepareForLeap.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a460a6e1de..a4cc2a1802 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -824,6 +824,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, resChar = pdb_glycam->second; mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); + if (debug_ > 0) + mprintf("DEBUG:\tOriginal #= %i chain %c\n", res.OriginalResNum(), res.ChainId()); // Change PDB names to Glycam ones if (ChangePdbAtomNamesToGlycam(resChar, res, topIn)) { From 5c006e26b4e9b446c1494a546a792633807e089c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 5 Oct 2021 13:47:57 -0400 Subject: [PATCH 117/368] Hide debug --- src/Exec_PrepareForLeap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a4cc2a1802..2f896f6cb6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -30,6 +30,7 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, std::vector< void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { if (NotSet()) { mprintf("\t%s : Not Set.\n", topIn.TruncResNameNum(rnum_).c_str()); + //mprintf("DEBUG:\tres=%i %c\n", topIn.Res(rnum_).OriginalResNum(), topIn.Res(rnum_).ChainId()); } else { mprintf("\t%s :\n", topIn.TruncResNameNum(rnum_).c_str()); mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); From ca17e2daa8d03eec2c09e685d90aec4008e3eb49 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 5 Oct 2021 14:05:50 -0400 Subject: [PATCH 118/368] Add print function that uses original res num and chain ID --- src/Exec_PrepareForLeap.cpp | 2 +- src/Topology.cpp | 16 +++++++++++++++- src/Topology.h | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2f896f6cb6..c584bb3f5b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -682,7 +682,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // TODO handle case where multiple potential ring start atoms exist if (potentialRingStartAtoms.empty()) { mprintf("Warning: Ring oxygen could not be identified for %s\n", - topIn.TruncResNameNum(rnum).c_str()); + topIn.TruncResNameOnumId(rnum).c_str()); resStat_[rnum] = SUGAR_MISSING_RING_O; return Sugar(rnum); } else if (potentialRingStartAtoms.size() > 1) { diff --git a/src/Topology.cpp b/src/Topology.cpp index 443fad2fd1..014dc2caf7 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -239,7 +239,7 @@ std::string Topology::TruncAtomNameNum(int atom) const { } // Topology::TruncResNameNum() -/** Given a residue number (starting from 0), return a string containing +/** Given a residue index (starting from 0), return a string containing * residue name and number (starting from 1) with format: * ":", e.g. "ARG:11". * Truncate residue name so there are no blanks. @@ -250,6 +250,20 @@ std::string Topology::TruncResNameNum(int res) const { return residues_[res].Name().Truncated() + ":" + integerToString( res+1 ); } +/** Given a residue index, return a string containing residue name, + * original residue number, and (optionally) chain ID with format: + * "_[_]". + * Truncate residue name so there are no blanks. + */ +std::string Topology::TruncResNameOnumId(int res) const { + if (res < 0 || res >= (int)residues_.size()) return std::string(""); + std::string name = residues_[res].Name().Truncated() + "_" + + integerToString(residues_[res].OriginalResNum()); + if (residues_[res].HasChainID()) + name.append( "_" + std::string(1, residues_[res].ChainId()) ); + return name; +} + // Topology::FindAtomInResidue() /** Find the atom # of the specified atom name in the given residue. * \param res Residue number to search. diff --git a/src/Topology.h b/src/Topology.h index d94f71bbfc..e3f1b62c2d 100644 --- a/src/Topology.h +++ b/src/Topology.h @@ -173,6 +173,8 @@ class Topology { std::string TruncAtomNameNum(int) const; /// Format: : std::string TruncResNameNum(int) const; + /// Format: _[_] + std::string TruncResNameOnumId(int) const; /// \return index of atom with given name in specified residue. int FindAtomInResidue(int, NameType const&) const; /// Mark all molecules matching given mask expression as solvent. From 29c674110b2d9bcdf51e56ff6848a3fef66f0481 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 5 Oct 2021 15:39:09 -0400 Subject: [PATCH 119/368] Use name function with original num and chain id --- src/Exec_PrepareForLeap.cpp | 47 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index c584bb3f5b..959e795d95 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -29,10 +29,9 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, std::vector< void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { if (NotSet()) { - mprintf("\t%s : Not Set.\n", topIn.TruncResNameNum(rnum_).c_str()); - //mprintf("DEBUG:\tres=%i %c\n", topIn.Res(rnum_).OriginalResNum(), topIn.Res(rnum_).ChainId()); + mprintf("\t%s : Not Set.\n", topIn.TruncResNameOnumId(rnum_).c_str()); } else { - mprintf("\t%s :\n", topIn.TruncResNameNum(rnum_).c_str()); + mprintf("\t%s :\n", topIn.TruncResNameOnumId(rnum_).c_str()); mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); @@ -597,7 +596,7 @@ const { if (sugar.NotSet()) { mprintf("Warning: Sugar %s is not set up. Skipping linkage detection.\n", - topIn.TruncResNameNum(sugar.ResNum()).c_str()); + topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); return 0; // TODO return 1? } int rnum1 = sugar.ResNum(); @@ -626,7 +625,7 @@ const if (dist2_1 < rescut2) { if (debug_ > 1) mprintf("DEBUG: %s to %s = %f\n", - topIn.TruncResNameNum(rnum1).c_str(), topIn.TruncResNameNum(rnum2).c_str(), + topIn.TruncResNameOnumId(rnum1).c_str(), topIn.TruncResNameOnumId(rnum2).c_str(), sqrt(dist2_1)); // Do the rest of the atoms in res2 to the anomeric carbon for (; at2 != res2.LastAtom(); ++at2) @@ -808,7 +807,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, { if (sugar.NotSet()) { mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", - topIn.TruncResNameNum(sugar.ResNum()).c_str()); + topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); return 0; // TODO return 1? } @@ -995,7 +994,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, } // Set new residue name NameType newResName( linkcode + std::string(1,resChar) + formStr ); - mprintf("\t Changing %s to Glycam resname: %s\n", topIn.TruncResNameNum(rnum).c_str(), *newResName); + mprintf("\t Changing %s to Glycam resname: %s\n", topIn.TruncResNameOnumId(rnum).c_str(), *newResName); ChangeResName(res, newResName); resStat_[rnum] = VALIDATED; return 0; @@ -1027,11 +1026,11 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, if (err != 0) { if (errorsAreFatal_) { mprinterr("Error: Problem identifying sugar ring for %s\n", - topIn.TruncResNameNum(*rnum).c_str()); + topIn.TruncResNameOnumId(*rnum).c_str()); return 1; } else mprintf("Warning: Problem identifying sugar ring for %s\n", - topIn.TruncResNameNum(*rnum).c_str()); + topIn.TruncResNameOnumId(*rnum).c_str()); } Sugars.back().PrintInfo( topIn ); } @@ -1046,7 +1045,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, return 1; else mprintf("Warning: Finding anomeric C linkages for %s failed, skipping.\n", - topIn.TruncResNameNum( sugar->ResNum() ).c_str()); + topIn.TruncResNameOnumId( sugar->ResNum() ).c_str()); } } } else { @@ -1065,7 +1064,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, return 1; else mprintf("Warning: Preparation of sugar %s failed, skipping.\n", - topIn.TruncResNameNum( sugar->ResNum() ).c_str()); + topIn.TruncResNameOnumId( sugar->ResNum() ).c_str()); } } // END loop over sugar residues // Remove bonds between sugars @@ -1147,7 +1146,7 @@ const // The previous atom is the end int lastRes = topIn[at-1].ResNum(); mprintf("\tSetting residue %s as terminal.\n", - topIn.TruncResNameNum(lastRes).c_str()); + topIn.TruncResNameOnumId(lastRes).c_str()); topIn.SetRes(lastRes).SetTerminal( true ); } } @@ -1466,7 +1465,7 @@ const rnum != resIdxs.end(); ++rnum) { if (debug_ > 1) - mprintf("DEBUG: %s (%i) (%c)\n", topIn.TruncResNameNum(*rnum).c_str(), topIn.Res(*rnum).OriginalResNum(), topIn.Res(*rnum).ChainId()); + mprintf("DEBUG: %s (%i) (%c)\n", topIn.TruncResNameOnumId(*rnum).c_str(), topIn.Res(*rnum).OriginalResNum(), topIn.Res(*rnum).ChainId()); int nd1idx = -1; int ne2idx = -1; Residue const& hisRes = topIn.Res( *rnum ); @@ -1478,16 +1477,16 @@ const ne2idx = at; } if (nd1idx == -1) { - mprintf("Warning: Atom %s not found for %s; skipping residue.\n", *ND1, topIn.TruncResNameNum(*rnum).c_str()); + mprintf("Warning: Atom %s not found for %s; skipping residue.\n", *ND1, topIn.TruncResNameOnumId(*rnum).c_str()); continue; } if (ne2idx == -1) { - mprintf("Warning: Atom %s not found for %s; skipping residue,\n", *NE2, topIn.TruncResNameNum(*rnum).c_str()); + mprintf("Warning: Atom %s not found for %s; skipping residue,\n", *NE2, topIn.TruncResNameOnumId(*rnum).c_str()); continue; } if (debug_ > 1) mprintf("DEBUG: %s nd1idx= %i ne2idx= %i\n", - topIn.TruncResNameNum( *rnum ).c_str(), nd1idx+1, ne2idx+1); + topIn.TruncResNameOnumId( *rnum ).c_str(), nd1idx+1, ne2idx+1); // Check for H bonded to nd1/ne2 int nd1h = 0; for (Atom::bond_iterator bat = topIn[nd1idx].bondbegin(); @@ -1523,7 +1522,7 @@ const } //else { // // Default to epsilon - // mprintf("\tUsing default name '%s' for %s\n", *HieName, topIn.TruncResNameNum(*rnum).c_str()); + // mprintf("\tUsing default name '%s' for %s\n", *HieName, topIn.TruncResNameOnumId(*rnum).c_str()); // HisResNames.push_back( HieName ); //} } @@ -1833,25 +1832,25 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) for (ResStatArray::iterator it = resStat_.begin(); it != resStat_.end(); ++it) { //if ( *it == VALIDATED ) - // mprintf("\t\t%s VALIDATED\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + // mprintf("\t\t%s VALIDATED\n", topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); //else - // mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + // mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); if ( *it == UNKNOWN ) { SetType::const_iterator pname = pdb_res_names_.find( topIn.Res(it-resStat_.begin()).Name() ); if (pname == pdb_res_names_.end()) mprintf("\t%s%s is an unrecognized name and may not have parameters.\n", - msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); else *it = VALIDATED; } else if ( *it == UNRECOGNIZED_SUGAR_LINKAGE ) { mprintf("\t%s%s is linked to a sugar but has no sugar-linkage form.\n", - msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); } else if ( *it == SUGAR_MISSING_C1X ) { mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", - msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); } else if ( *it == SUGAR_MISSING_RING_O ) { mprintf("\t%s%s Sugar is missing ring oxygen and cannot be identified.\n", - msg, topIn.TruncResNameNum(it-resStat_.begin()).c_str()); + msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); } } @@ -1872,7 +1871,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) int lastAtom = mask->back(); int lastRes = topIn[lastAtom].ResNum(); mprintf("\tSetting residue %s as terminal.\n", - topIn.TruncResNameNum(lastRes).c_str()); + topIn.TruncResNameOnumId(lastRes).c_str()); topIn.SetRes(lastRes).SetTerminal( true ); } // Set ter based on connectivity From a5d62476a1cfeaf454dbb87bb76db067f7b31406 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 08:22:38 -0400 Subject: [PATCH 120/368] Move loading of pdb residue names/maps to before strip --- src/Exec_PrepareForLeap.cpp | 88 ++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 959e795d95..69b1c0561f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1594,6 +1594,50 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else mprintf("\tWill attempt to prepare sugars.\n"); + // Load PDB residue names recognized by amber + if (LoadPdbResNames( argIn.GetStringKey("resnamefile" ) )) { + mprinterr("Error: PDB residue name file load failed.\n"); + return CpptrajState::ERR; + } + mprintf("\t%zu PDB residue names recognized by Amber FFs.\n", pdb_res_names_.size()); + // DEBUG + if (debug_ > 0) { + mprintf("\tPDB residue names recognized by Amber FFs:\n"); + for (SetType::const_iterator it = pdb_res_names_.begin(); it != pdb_res_names_.end(); ++it) + mprintf("\t %s\n", *(*it)); + } + + // Load PDB to glycam residue name map + if (prepare_sugars) { + if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { + mprinterr("Error: PDB to glycam name map load failed.\n"); + return CpptrajState::ERR; + } + mprintf("\t%zu entries in PDB to glycam name map.\n", pdb_to_glycam_.size()); + if (debug_ > 0) { + // DEBUG - print residue name map + mprintf("\tResidue name map:\n"); + for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) + mprintf("\t %4s -> %c\n", *(mit->first), mit->second); + // DEBUG - print atom name maps + mprintf("\tRes char to atom map index map:\n"); + for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) + mprintf("\t %c -> %i\n", mit->first, mit->second); + mprintf("\tAtom name maps:\n"); + for (std::vector::const_iterator it = pdb_glycam_name_maps_.begin(); it != pdb_glycam_name_maps_.end(); ++it) + { + mprintf("\t %li)", it - pdb_glycam_name_maps_.begin()); + for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) + mprintf(" %s:%s", *(mit->first), *(mit->second)); + mprintf("\n"); + } + // DEBUG - print linkage res map + mprintf("\tLinkage res name map:\n"); + for (NameMapType::const_iterator mit = pdb_glycam_linkageRes_map_.begin(); mit != pdb_glycam_linkageRes_map_.end(); ++mit) + mprintf("\t %s -> %s\n", *(mit->first), *(mit->second)); + } + } + // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); std::string waterMask = argIn.GetStringKey("watername", ":" + solventResName_); @@ -1676,50 +1720,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); - // Load PDB residue names recognized by amber - if (LoadPdbResNames( argIn.GetStringKey("resnamefile" ) )) { - mprinterr("Error: PDB residue name file load failed.\n"); - return CpptrajState::ERR; - } - mprintf("\t%zu PDB residue names recognized by Amber FFs.\n", pdb_res_names_.size()); - // DEBUG - if (debug_ > 0) { - mprintf("\tPDB residue names recognized by Amber FFs:\n"); - for (SetType::const_iterator it = pdb_res_names_.begin(); it != pdb_res_names_.end(); ++it) - mprintf("\t %s\n", *(*it)); - } - - // Load PDB to glycam residue name map - if (prepare_sugars) { - if (LoadGlycamPdbResMap( argIn.GetStringKey("resmapfile" ) )) { - mprinterr("Error: PDB to glycam name map load failed.\n"); - return CpptrajState::ERR; - } - mprintf("\t%zu entries in PDB to glycam name map.\n", pdb_to_glycam_.size()); - if (debug_ > 0) { - // DEBUG - print residue name map - mprintf("\tResidue name map:\n"); - for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) - mprintf("\t %4s -> %c\n", *(mit->first), mit->second); - // DEBUG - print atom name maps - mprintf("\tRes char to atom map index map:\n"); - for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) - mprintf("\t %c -> %i\n", mit->first, mit->second); - mprintf("\tAtom name maps:\n"); - for (std::vector::const_iterator it = pdb_glycam_name_maps_.begin(); it != pdb_glycam_name_maps_.end(); ++it) - { - mprintf("\t %li)", it - pdb_glycam_name_maps_.begin()); - for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) - mprintf(" %s:%s", *(mit->first), *(mit->second)); - mprintf("\n"); - } - // DEBUG - print linkage res map - mprintf("\tLinkage res name map:\n"); - for (NameMapType::const_iterator mit = pdb_glycam_linkageRes_map_.begin(); mit != pdb_glycam_linkageRes_map_.end(); ++mit) - mprintf("\t %s -> %s\n", *(mit->first), *(mit->second)); - } - } - // Get sugar mask or default sugar mask AtomMask sugarMask; std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); From aab92f89d07da96a152f90aa65760f2adedf1ec4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 08:47:48 -0400 Subject: [PATCH 121/368] Ensure original res num and chain ID are used --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 69b1c0561f..d39357bb50 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -823,7 +823,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, } resChar = pdb_glycam->second; - mprintf("\tSugar %s %i glycam name: %c\n", *res.Name(), rnum+1, resChar); + mprintf("\tSugar %s glycam name: %c\n", topIn.TruncResNameOnumId(rnum).c_str(), resChar); if (debug_ > 0) mprintf("DEBUG:\tOriginal #= %i chain %c\n", res.OriginalResNum(), res.ChainId()); From 1577ce902f6c8727983441b92d46442fe4d8ba03 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 08:57:12 -0400 Subject: [PATCH 122/368] Add function for recognizing PDB residue names --- src/Exec_PrepareForLeap.cpp | 11 +++++++++++ src/Exec_PrepareForLeap.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index d39357bb50..3ebbea2618 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1289,6 +1289,17 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co return 0; } +/** \return True if residue name is in pdb_to_glycam_ or pdb_res_names_. */ +bool Exec_PrepareForLeap::IsRecognizedPdbRes(NameType const& rname) const { + MapType::const_iterator glycamIt = pdb_to_glycam_.find( rname ); + if (glycamIt != pdb_to_glycam_.end()) + return true; + SetType::const_iterator amberIt = pdb_res_names_.find( rname ); + if (amberIt != pdb_res_names_.end()) + return true; + return false; +} + /** Modify coords according to user wishes. */ int Exec_PrepareForLeap::ModifyCoords( Topology& topIn, Frame& frameIn, bool remove_water, diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 6e66b08c6a..415aaf9e01 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -44,6 +44,9 @@ class Exec_PrepareForLeap : public Exec { int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*); + /// \return true if residue name is recognized + bool IsRecognizedPdbRes(NameType const&) const; + /// Remove specified atoms int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, std::string const&) const; int RemoveHydrogens(Topology&, Frame&) const; int DetermineHisProt(std::vector&, std::vector&, Topology const&, From 78bfcd14423db8b91fd99df4192e8c5f38a92d40 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 09:26:44 -0400 Subject: [PATCH 123/368] Add functions to get lists of unrecognized residues and isolated unrecognized residues. --- src/Exec_PrepareForLeap.cpp | 71 ++++++++++++++++++++++++++++++++++++- src/Exec_PrepareForLeap.h | 6 ++++ 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3ebbea2618..1fccf67df6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1289,7 +1289,9 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co return 0; } -/** \return True if residue name is in pdb_to_glycam_ or pdb_res_names_. */ +/** \return True if residue name is in pdb_to_glycam_ or pdb_res_names_, + * or is solvent. + */ bool Exec_PrepareForLeap::IsRecognizedPdbRes(NameType const& rname) const { MapType::const_iterator glycamIt = pdb_to_glycam_.find( rname ); if (glycamIt != pdb_to_glycam_.end()) @@ -1297,9 +1299,71 @@ bool Exec_PrepareForLeap::IsRecognizedPdbRes(NameType const& rname) const { SetType::const_iterator amberIt = pdb_res_names_.find( rname ); if (amberIt != pdb_res_names_.end()) return true; + if (rname == solventResName_) + return true; return false; } +/** \return Array of residue numbers with unrecognized PDB res names. */ +Exec_PrepareForLeap::Iarray Exec_PrepareForLeap::GetUnrecognizedPdbResidues(Topology const& topIn) +const +{ + Iarray rnums; + for (int ires = 0; ires != topIn.Nres(); ires++) + { + if (!IsRecognizedPdbRes( topIn.Res(ires).Name() )) + { + mprintf("\t%s is unrecognized.\n", topIn.TruncResNameOnumId(ires).c_str()); + rnums.push_back( ires ); + } + } + return rnums; +} + +/** Given an array of residue numbers with unrecognized PDB res names, + * generate an array with true for unrecognized residues that are + * either isolated or only bound to other unrecognized residues. + */ +Exec_PrepareForLeap::Iarray + Exec_PrepareForLeap::GetIsolatedUnrecognizedResidues(Topology const& topIn, + Iarray const& rnums) +const +{ + typedef std::vector Barray; + Barray isRecognized(topIn.Nres(), true); + for (Iarray::const_iterator it = rnums.begin(); it != rnums.end(); ++it) + isRecognized[ *it ] = false; + + Iarray isolated; + for (Iarray::const_iterator it = rnums.begin(); it != rnums.end(); ++it) + { + bool isIsolated = true; + Residue const& res = topIn.Res( *it ); + for (int at = res.FirstAtom(); at != res.LastAtom(); ++at) + { + for (Atom::bond_iterator bat = topIn[at].bondbegin(); bat != topIn[at].bondend(); ++bat) + { + if (topIn[*bat].ResNum() != *it) + { + // This bonded atom is in another residue. Is that residue recognized? + if ( isRecognized[ topIn[*bat].ResNum() ] ) { + // Residue *it is bonded to a recognized residue. Not isolated. + isIsolated = false; + break; + } + } + } // END loop over residue atoms bonded atoms + if (!isIsolated) break; + } // END loop over residue atoms + if (isIsolated) { + mprintf("\t%s is isolated and unrecognized.\n", topIn.TruncResNameOnumId(*it).c_str()); + isolated.push_back( *it ); + } + } // END loop over unrecognized residues + + return isolated; +} + /** Modify coords according to user wishes. */ int Exec_PrepareForLeap::ModifyCoords( Topology& topIn, Frame& frameIn, bool remove_water, @@ -1649,6 +1713,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } + /// Get array of residues with unrecognized PDB names. + Iarray unrecognizedPdbRes = GetUnrecognizedPdbResidues( topIn ); + /// Get array of unrecognized residues that are also isolated. + Iarray isolatedPdbRes = GetIsolatedUnrecognizedResidues( topIn, unrecognizedPdbRes ); + // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); std::string waterMask = argIn.GetStringKey("watername", ":" + solventResName_); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 415aaf9e01..700a0a3783 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -18,6 +18,8 @@ class Exec_PrepareForLeap : public Exec { /// Hold indices for sugar class Sugar; + typedef std::vector Iarray; + inline void ChangeResName(Residue&, NameType const&) const; inline void ChangeAtomName(Atom&, NameType const&) const; @@ -46,6 +48,10 @@ class Exec_PrepareForLeap : public Exec { Topology&, Frame const&, CpptrajFile*); /// \return true if residue name is recognized bool IsRecognizedPdbRes(NameType const&) const; + /// \return Array of residue nums with unrecognized names + Iarray GetUnrecognizedPdbResidues(Topology const&) const; + /// \return Array indices of isolated unrecognized residues + Iarray GetIsolatedUnrecognizedResidues(Topology const&, Iarray const&) const; /// Remove specified atoms int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, std::string const&) const; int RemoveHydrogens(Topology&, Frame&) const; From 22475d5011dbba4486a596c1b1ec26bec7483196 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 12:51:01 -0400 Subject: [PATCH 124/368] Add remove keyword for removing unrecognized/isolated residues. Use AtomMap to determine if an atom is a potential stereocenter. --- src/Exec_PrepareForLeap.cpp | 110 +++++++++++++++++++++++++----------- src/Exec_PrepareForLeap.h | 3 +- src/cpptrajdepend | 2 +- 3 files changed, 79 insertions(+), 36 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1fccf67df6..3f82b6f3c5 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -7,6 +7,7 @@ #include "CpptrajFile.h" #include "Trajout_Single.h" #include "DataSet_Coords_CRD.h" +#include "AtomMap.h" #include #include // tolower #include // sort @@ -58,33 +59,6 @@ Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), SetHidden(true); } -// Exec_PrepareForLeap::Help() -void Exec_PrepareForLeap::Help() const -{ - mprintf("\tcrdset [frame <#>] name [pdbout ]\n" - "\t[leapunitname ] [out [skiperrors]\n" - "\t[nowat [watername ] [noh] [keepaltloc ]\n" - "\t[stripmask ] [solventresname ]\n" - "\t[{nohisdetect |\n" - "\t [nd1 ] [ne2 ] [hiename ]\n" - "\t [hidname ] [hipname ] [disulfidecut ] [newcysname ]}]\n" - "\t[{nosugars | sugarmask [noc1search]}] [resmapfile ]\n" - "\t[molmask ...] [determinemolmask ]\n" - " Prepare the structure in the given coords set for easier processing\n" - " with the LEaP program from AmberTools. Any existing/potential\n" - " disulfide bonds will be identified and the residue names changed\n" - " to (CYX by default), and if specified any sugars\n" - " recognized in the region will be identified and have\n" - " their names changed to Glycam names. Disulfides and sugars will\n" - " have any inter-residue bonds removed, and the appropriate LEaP\n" - " input to add the bonds back once the structure has been loaded\n" - " into LEaP will be written to .\n" - ); -} - /// Used to change residue name to nameIn void Exec_PrepareForLeap::ChangeResName(Residue& res, NameType const& nameIn) const { if (res.Name() != nameIn) { @@ -871,6 +845,14 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("\t Alpha form\n"); formStr = "A"; } + // Set up an AtomMap for this residue to help determine stereocenters + AtomMap myMap; + myMap.SetDebug(debug_); + if (myMap.SetupResidue(topIn, frameIn, rnum)) { + mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); + return 1; + } + myMap.DetermineAtomIDs(); // Find the rest of the carbons in the chain in order to find the // stereocenter with the highest index. Start from final ring carbon. @@ -885,7 +867,15 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, ++it) { if (debug_ > 0) mprintf("\t\t%s", topIn.ResNameNumAtomNameNum(*it).c_str()); - // Count number of bonds to heavy atoms. + //mprintf("DEBUG: '%s' isChiral= %i\n", topIn.ResNameNumAtomNameNum(*it).c_str(), + // (int)myMap[*it - topIn.Res(rnum).FirstAtom()].IsChiral()); + if (myMap[*it - topIn.Res(rnum).FirstAtom()].IsChiral()) { + if (debug_ > 0) mprintf(" Potential stereocenter"); + // TODO Is absolute index the best way to do this? + if (*it > highest_stereocenter) + highest_stereocenter = *it; + } +/* // Count number of bonds to heavy atoms. Atom const& currentAtom = topIn[*it]; int n_heavyat_bonds = 0; for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) @@ -897,9 +887,9 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, if (debug_ > 0) mprintf(" Potential stereocenter"); if (*it > highest_stereocenter) // Is absolute index the best way to do this? highest_stereocenter = *it; - } + }*/ if (debug_ > 0) mprintf("\n"); - } + } // END loop over remaining chain carbons if (highest_stereocenter == -1) { // This means that ano_ref_atom is the highest stereocenter. highest_stereocenter = sugar.AnomericRefAtom(); @@ -1368,11 +1358,21 @@ const int Exec_PrepareForLeap::ModifyCoords( Topology& topIn, Frame& frameIn, bool remove_water, char altLocChar, std::string const& stripMask, - std::string const& waterMask ) + std::string const& waterMask, + Iarray const& resnumsToRemove ) const { // Create a mask denoting which atoms will be kept. std::vector atomsToKeep( topIn.Natom(), true ); + // Previously-determined array of residues to remove + for (Iarray::const_iterator rnum = resnumsToRemove.begin(); + rnum != resnumsToRemove.end(); ++rnum) + { + Residue const& res = topIn.Res( *rnum ); + mprintf("\tRemoving %s\n", topIn.TruncResNameOnumId( *rnum ).c_str()); + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + atomsToKeep[at] = false; + } // User-specified strip mask if (!stripMask.empty()) { AtomMask mask; @@ -1610,6 +1610,33 @@ const return 0; } +// Exec_PrepareForLeap::Help() +void Exec_PrepareForLeap::Help() const +{ + mprintf("\tcrdset [frame <#>] name [pdbout ]\n" + "\t[leapunitname ] [out [skiperrors]\n" + "\t[nowat [watername ] [noh] [keepaltloc ]\n" + "\t[stripmask ] [solventresname ]\n" + "\t[{nohisdetect |\n" + "\t [nd1 ] [ne2 ] [hiename ]\n" + "\t [hidname ] [hipname ] [disulfidecut ] [newcysname ]}]\n" + "\t[{nosugars | sugarmask [noc1search]}] [resmapfile ]\n" + "\t[molmask ...] [determinemolmask ]\n" + " Prepare the structure in the given coords set for easier processing\n" + " with the LEaP program from AmberTools. Any existing/potential\n" + " disulfide bonds will be identified and the residue names changed\n" + " to (CYX by default), and if specified any sugars\n" + " recognized in the region will be identified and have\n" + " their names changed to Glycam names. Disulfides and sugars will\n" + " have any inter-residue bonds removed, and the appropriate LEaP\n" + " input to add the bonds back once the structure has been loaded\n" + " into LEaP will be written to .\n" + ); +} + // Exec_PrepareForLeap::Execute() Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) { @@ -1713,10 +1740,25 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } + Iarray pdbResToRemove; + std::string removeArg = argIn.GetStringKey("remove"); + if (!removeArg.empty()) { + if (removeArg == "unrecognized") { + mprintf("\tRemoving unrecognized PDB residues.\n"); + pdbResToRemove = GetUnrecognizedPdbResidues( topIn ); + } else if (removeArg == "isolated") { + mprintf("\tRemoving unrecognized and isolated PDB residues.\n"); + Iarray unrecognizedPdbRes = GetUnrecognizedPdbResidues( topIn ); + pdbResToRemove = GetIsolatedUnrecognizedResidues( topIn, unrecognizedPdbRes ); + } else { + mprinterr("Error: Unrecognized keyword for 'remove': %s\n", removeArg.c_str()); + return CpptrajState::ERR; + } + } /// Get array of residues with unrecognized PDB names. - Iarray unrecognizedPdbRes = GetUnrecognizedPdbResidues( topIn ); + //Iarray unrecognizedPdbRes = GetUnrecognizedPdbResidues( topIn ); /// Get array of unrecognized residues that are also isolated. - Iarray isolatedPdbRes = GetIsolatedUnrecognizedResidues( topIn, unrecognizedPdbRes ); + //Iarray isolatedPdbRes = GetIsolatedUnrecognizedResidues( topIn, unrecognizedPdbRes ); // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); @@ -1761,7 +1803,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tIf present, keeping only alternate atom locations denoted by '%c'\n", altLocChar); if (!stripMask.empty()) mprintf("\tRemoving atoms in mask '%s'\n", stripMask.c_str()); - if (ModifyCoords( topIn, frameIn, remove_water, altLocChar, stripMask, waterMask )) + if (ModifyCoords(topIn, frameIn, remove_water, altLocChar, stripMask, waterMask, pdbResToRemove)) { mprinterr("Error: Modification of '%s' failed.\n", coords.legend()); return CpptrajState::ERR; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 700a0a3783..73b04511ca 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -53,7 +53,8 @@ class Exec_PrepareForLeap : public Exec { /// \return Array indices of isolated unrecognized residues Iarray GetIsolatedUnrecognizedResidues(Topology const&, Iarray const&) const; /// Remove specified atoms - int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, std::string const&) const; + int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, + std::string const&, Iarray const&) const; int RemoveHydrogens(Topology&, Frame&) const; int DetermineHisProt(std::vector&, std::vector&, Topology const&, NameType const&, NameType const&, diff --git a/src/cpptrajdepend b/src/cpptrajdepend index ae30b1b93c..e98f3e1311 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -268,7 +268,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From b999038f455e6290fa5a8d422894289e755b451e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 13:30:49 -0400 Subject: [PATCH 125/368] Store atom chirality in sugar --- src/Exec_PrepareForLeap.cpp | 36 ++++++++++++++++++++++-------------- src/Exec_PrepareForLeap.h | 7 +++++-- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3f82b6f3c5..688e9fedc7 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -20,12 +20,14 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn) : ano_ref_atom_(-1) {} -Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, std::vector const& RA) : +Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, std::vector const& RA, + std::vector const& isChiralIn) : rnum_(rn), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), - ring_atoms_(RA) + ring_atoms_(RA), + atomIsChiral_(isChiralIn) {} void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { @@ -627,7 +629,7 @@ const /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, - int& err) + Frame const& frameIn, int& err) { err = 0; Residue const& res = topIn.Res(rnum); @@ -749,7 +751,19 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, RA); + // Set up an AtomMap for this residue to help determine stereocenters + AtomMap myMap; + myMap.SetDebug(debug_); + if (myMap.SetupResidue(topIn, frameIn, rnum)) { + mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); + return 1; + } + myMap.DetermineAtomIDs(); + std::vector isChiral; + for (int iat = 0; iat != myMap.Natom(); iat++) + isChiral.push_back( myMap[iat].IsChiral() ); + + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, RA, isChiral); } /** Change PDB atom names in residue to glycam ones. */ @@ -828,6 +842,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, // Error return 1; } + mprintf("DEBUG: c1up= %i\n", (int)(t_c1 > 0)); // Calculate torsion around anomeric reference: if (CalcAnomericRefTorsion(t_c5, sugar.AnomericRefAtom(), sugar.RingOxygenAtom(), @@ -838,6 +853,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, std::string formStr; bool c5up = (t_c5 > 0); bool c1up = (t_c1 > 0); + mprintf("DEBUG: c5up= %i\n", (int)c5up); if (c1up == c5up) { mprintf("\t Beta form\n"); formStr = "B"; @@ -845,14 +861,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("\t Alpha form\n"); formStr = "A"; } - // Set up an AtomMap for this residue to help determine stereocenters - AtomMap myMap; - myMap.SetDebug(debug_); - if (myMap.SetupResidue(topIn, frameIn, rnum)) { - mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); - return 1; - } - myMap.DetermineAtomIDs(); // Find the rest of the carbons in the chain in order to find the // stereocenter with the highest index. Start from final ring carbon. @@ -869,7 +877,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, if (debug_ > 0) mprintf("\t\t%s", topIn.ResNameNumAtomNameNum(*it).c_str()); //mprintf("DEBUG: '%s' isChiral= %i\n", topIn.ResNameNumAtomNameNum(*it).c_str(), // (int)myMap[*it - topIn.Res(rnum).FirstAtom()].IsChiral()); - if (myMap[*it - topIn.Res(rnum).FirstAtom()].IsChiral()) { + if (sugar.AtomIsChiral(*it - topIn.Res(rnum).FirstAtom())) { if (debug_ > 0) mprintf(" Potential stereocenter"); // TODO Is absolute index the best way to do this? if (*it > highest_stereocenter) @@ -1012,7 +1020,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, rnum != sugarResNums.end(); ++rnum) { int err = 0; - Sugars.push_back( IdSugarRing(*rnum, topIn, err) ); + Sugars.push_back( IdSugarRing(*rnum, topIn, frameIn, err) ); if (err != 0) { if (errorsAreFatal_) { mprinterr("Error: Problem identifying sugar ring for %s\n", diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 73b04511ca..98c37ccc0a 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -39,7 +39,7 @@ class Exec_PrepareForLeap : public Exec { int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; - Sugar IdSugarRing(int, Topology const&, int&); + Sugar IdSugarRing(int, Topology const&, Frame const&, int&); int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); @@ -95,7 +95,7 @@ class Exec_PrepareForLeap : public Exec { class Exec_PrepareForLeap::Sugar { public: Sugar(int); - Sugar(int,int,int,int,std::vector const&); + Sugar(int,int,int,int,std::vector const&,std::vector const&); int ResNum() const { return rnum_; } int RingOxygenAtom() const { return ring_oxygen_atom_; } @@ -106,6 +106,8 @@ class Exec_PrepareForLeap::Sugar { const_iterator ringbegin() const { return ring_atoms_.begin(); } const_iterator ringend() const { return ring_atoms_.end(); } + bool AtomIsChiral(int idx) const { return atomIsChiral_[idx]; } + bool NotSet() const { return (ring_oxygen_atom_ == -1); } /// \return Number of ring atoms unsigned int NumRingAtoms() const; @@ -116,5 +118,6 @@ class Exec_PrepareForLeap::Sugar { int anomeric_atom_; ///< Index of the anomeric C atom int ano_ref_atom_; ///< Index of the anomeric reference C atom std::vector ring_atoms_; ///< Index of all non-oxygen ring atoms + std::vector atomIsChiral_; ///< For each sugar residue atom, whether it is chiral or not. }; #endif From 827abde6bb9405f8fb68004c34b994b2da992ad8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 14:18:25 -0400 Subject: [PATCH 126/368] Since original chiral determination assumes presence of hydrogens, do a new chiral determination that does not rely on that. --- src/Exec_PrepareForLeap.cpp | 69 ++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 688e9fedc7..302509d2e1 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -670,6 +670,61 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c return Sugar(rnum); } + // Set up an AtomMap for this residue to help determine stereocenters + AtomMap myMap; + myMap.SetDebug(10); + if (myMap.SetupResidue(topIn, frameIn, rnum)) { + mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); + err = 1; + return Sugar(rnum); + } + myMap.DetermineAtomIDs(); + std::vector atomIsChiral; + atomIsChiral.reserve( myMap.Natom() ); + // Since we cant be certain there are hydrogens, cannot rely + // on the internal mapping. Make a chiral center a carbon + // with at least 3 bonds, all must be unique. + int resat = topIn.Res(rnum).FirstAtom(); + for (int iat = 0; iat != myMap.Natom(); iat++, resat++) + { + bool chiral = false; + if (topIn[resat].Element() == Atom::CARBON && topIn[resat].Nbonds() > 2) { + mprintf("DEBUG: Atom '%s' potential chiral\n", topIn.TruncResAtomNameNum(resat).c_str()); + chiral = true; + for (Atom::bond_iterator bat1 = topIn[resat].bondbegin(); + bat1 != topIn[resat].bondend(); ++bat1) + { + std::string unique1; + if (*bat1 >= topIn.Res(rnum).FirstAtom() && *bat1 < topIn.Res(rnum).LastAtom()) + unique1 = myMap[*bat1 - topIn.Res(rnum).FirstAtom()].Unique(); + else + // Always count bonds to external as unique + unique1 = "unique1"; + for (Atom::bond_iterator bat2 = bat1 + 1; bat2 != topIn[resat].bondend(); ++bat2) + { + std::string unique2; + if (*bat2 >= topIn.Res(rnum).FirstAtom() && *bat2 < topIn.Res(rnum).LastAtom()) + unique2 = myMap[*bat2 - topIn.Res(rnum).FirstAtom()].Unique(); + else + // Always count bonds to external as unique + unique2 = "unique2"; + if (unique1 == unique2) { + // At least two of the atoms bonded to this atom look the same. Not chiral. + mprintf("DEBUG: unique strings match '%s' '%s'\n", unique1.c_str(), unique2.c_str()); + chiral = false; + break; + } + } // END inner loop over bonded atoms + if (!chiral) break; + } // END outer loop over bonded atoms + } // END atom is carbon with > 2 bonds + + atomIsChiral.push_back( chiral ); + mprintf("DEBUG: Atom '%s' isChiral= %i\n", + topIn.TruncResAtomNameNum(resat).c_str(), + (int)atomIsChiral.back()); + } + // The anomeric carbon is the carbon that was part of the carbonyl group // in the straight chain. It is therefore typically the carbon with fewer // bonds to other carbons. @@ -751,19 +806,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - // Set up an AtomMap for this residue to help determine stereocenters - AtomMap myMap; - myMap.SetDebug(debug_); - if (myMap.SetupResidue(topIn, frameIn, rnum)) { - mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); - return 1; - } - myMap.DetermineAtomIDs(); - std::vector isChiral; - for (int iat = 0; iat != myMap.Natom(); iat++) - isChiral.push_back( myMap[iat].IsChiral() ); - - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, RA, isChiral); + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, RA, atomIsChiral); } /** Change PDB atom names in residue to glycam ones. */ From dbf15cbd7396c4b5041427eda602de657c9075e0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 14:29:33 -0400 Subject: [PATCH 127/368] Set anomeric reference carbon to be the highest stereocenter in the ring (does not necessarily flank the ring oxygen) --- src/Exec_PrepareForLeap.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 302509d2e1..9f47bb4456 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -783,11 +783,24 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c topIn.ResNameNumAtomNameNum(c_end).c_str(), c_end_bonds_to_C); if (c_beg_bonds_to_C <= c_end_bonds_to_C) { anomeric_atom = c_beg; - ano_ref_atom = c_end; + // Find anomeric reference atom. Start at c_end and work down to c_beg + for (int arat = c_end; arat != c_beg; arat--) + if (atomIsChiral[arat - topIn.Res(rnum).FirstAtom()]) { + ano_ref_atom = arat; + break; + } + //ano_ref_atom = c_end; } else { anomeric_atom = c_end; - ano_ref_atom = c_beg; + // Find anomeric reference atom. Start at c_beg and work up to c_end + for (int arat = c_beg; arat != c_end; arat++) + if (atomIsChiral[arat - topIn.Res(rnum).FirstAtom()]) { + ano_ref_atom = arat; + break; + } + //ano_ref_atom = c_beg; } + // Place the ring atoms into an array without the terminating -1 RA.clear(); if (debug_ > 0) mprintf(" :"); // DEBUG for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) From 5abd839a0414213626009da6513b1378e919f47f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 14:41:23 -0400 Subject: [PATCH 128/368] Save ring end atom, may not be the same as anomeric reference atom --- src/Exec_PrepareForLeap.cpp | 13 ++++++++++--- src/Exec_PrepareForLeap.h | 6 ++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9f47bb4456..455bb5751b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -20,12 +20,14 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn) : ano_ref_atom_(-1) {} -Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, std::vector const& RA, +Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int rea, + std::vector const& RA, std::vector const& isChiralIn) : rnum_(rn), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), + ring_end_atom_(rea), ring_atoms_(RA), atomIsChiral_(isChiralIn) {} @@ -38,6 +40,7 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); + mprintf("\t\tRing end atom : %s\n", topIn.TruncAtomNameNum(ring_end_atom_).c_str()); mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); mprintf("\t\tNon-O Ring atoms :"); for (std::vector::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) @@ -725,6 +728,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c (int)atomIsChiral.back()); } + // Ring end atom is the last atom in the ring + int ring_end_atom = -1; // The anomeric carbon is the carbon that was part of the carbonyl group // in the straight chain. It is therefore typically the carbon with fewer // bonds to other carbons. @@ -783,6 +788,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c topIn.ResNameNumAtomNameNum(c_end).c_str(), c_end_bonds_to_C); if (c_beg_bonds_to_C <= c_end_bonds_to_C) { anomeric_atom = c_beg; + ring_end_atom = c_end; // Find anomeric reference atom. Start at c_end and work down to c_beg for (int arat = c_end; arat != c_beg; arat--) if (atomIsChiral[arat - topIn.Res(rnum).FirstAtom()]) { @@ -792,6 +798,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c //ano_ref_atom = c_end; } else { anomeric_atom = c_end; + ring_end_atom = c_beg; // Find anomeric reference atom. Start at c_beg and work up to c_end for (int arat = c_beg; arat != c_end; arat++) if (atomIsChiral[arat - topIn.Res(rnum).FirstAtom()]) { @@ -819,7 +826,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, RA, atomIsChiral); + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, ring_end_atom, RA, atomIsChiral); } /** Change PDB atom names in residue to glycam ones. */ @@ -922,7 +929,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, // stereocenter with the highest index. Start from final ring carbon. int highest_stereocenter = -1; std::vector remainingChainCarbons; - if (FindRemainingChainCarbons(remainingChainCarbons, sugar.AnomericRefAtom(), + if (FindRemainingChainCarbons(remainingChainCarbons, sugar.RingEndAtom(), topIn, rnum, IsRingAtom)) return 1; if (debug_ > 0) mprintf("\t Remaining chain carbons:\n"); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 98c37ccc0a..3c316209ea 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -95,12 +95,13 @@ class Exec_PrepareForLeap : public Exec { class Exec_PrepareForLeap::Sugar { public: Sugar(int); - Sugar(int,int,int,int,std::vector const&,std::vector const&); + Sugar(int,int,int,int,int,std::vector const&,std::vector const&); int ResNum() const { return rnum_; } int RingOxygenAtom() const { return ring_oxygen_atom_; } int AnomericAtom() const { return anomeric_atom_; } int AnomericRefAtom() const { return ano_ref_atom_; } + int RingEndAtom() const { return ring_end_atom_; } typedef std::vector::const_iterator const_iterator; const_iterator ringbegin() const { return ring_atoms_.begin(); } @@ -115,8 +116,9 @@ class Exec_PrepareForLeap::Sugar { private: int rnum_; ///< Residue index int ring_oxygen_atom_; ///< Index of the ring oxygen atom - int anomeric_atom_; ///< Index of the anomeric C atom + int anomeric_atom_; ///< Index of the anomeric C atom (ring start) int ano_ref_atom_; ///< Index of the anomeric reference C atom + int ring_end_atom_; ///< Index of the ring end atom std::vector ring_atoms_; ///< Index of all non-oxygen ring atoms std::vector atomIsChiral_; ///< For each sugar residue atom, whether it is chiral or not. }; From 0855f75a33916109403e4cb117f6573b5de73e25 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 15:10:07 -0400 Subject: [PATCH 129/368] Ensure ring direction is consistent in the ring index array (i.e. always starts with anomeric carbon and ends with carbon farthest from anomeric carbon). Ensure anomeric reference search uses the ring atoms. --- src/Exec_PrepareForLeap.cpp | 89 +++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 38 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 455bb5751b..f6bb902235 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -728,6 +728,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c (int)atomIsChiral.back()); } + // This will indicate ring direction + int ring_direction = 0; // Ring end atom is the last atom in the ring int ring_end_atom = -1; // The anomeric carbon is the carbon that was part of the carbonyl group @@ -764,49 +766,40 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c c_beg = topIn[*ringat].Bond(1); c_end = topIn[*ringat].Bond(0); } - FollowBonds(c_beg, topIn, 0, ring_atoms, - c_end, Visited, ring_complete); + // Try to ascertain which carbon might be the anomeric carbon (i.e. the + // carbon that originally started the chain). Tie goes to lower index. + int c_beg_bonds_to_C = 0; + for (Atom::bond_iterator bat = topIn[c_beg].bondbegin(); bat != topIn[c_beg].bondend(); ++bat) + if (topIn[*bat].Element() == Atom::CARBON) + c_beg_bonds_to_C++; + int c_end_bonds_to_C = 0; + for (Atom::bond_iterator bat = topIn[c_end].bondbegin(); bat != topIn[c_end].bondend(); ++bat) + if (topIn[*bat].Element() == Atom::CARBON) + c_end_bonds_to_C++; + if (debug_ > 0) + mprintf("(%s bonds to C= %i, %s bonds to C = %i)", // DEBUG + topIn.ResNameNumAtomNameNum(c_beg).c_str(), c_beg_bonds_to_C, + topIn.ResNameNumAtomNameNum(c_end).c_str(), c_end_bonds_to_C); + if (c_beg_bonds_to_C <= c_end_bonds_to_C) { + anomeric_atom = c_beg; + ring_end_atom = c_end; + ring_direction = 1; + } else { + anomeric_atom = c_end; + ring_end_atom = c_beg; + ring_direction = -1; + } + mprintf("DEBUG: Potential Ring direction= %i\n", ring_direction); + + FollowBonds(anomeric_atom, topIn, 0, ring_atoms, + ring_end_atom, Visited, ring_complete); if (debug_ > 0) mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); // TODO handle the case where multiple potential ring start atoms exist if (ring_complete) { ring_oxygen_atom = *ringat; - // Try to ascertain which carbon might be the anomeric carbon (i.e. the - // carbon that originally started the chain). Tie goes to lower index. - int c_beg_bonds_to_C = 0; - for (Atom::bond_iterator bat = topIn[c_beg].bondbegin(); bat != topIn[c_beg].bondend(); ++bat) - if (topIn[*bat].Element() == Atom::CARBON) - c_beg_bonds_to_C++; - int c_end_bonds_to_C = 0; - for (Atom::bond_iterator bat = topIn[c_end].bondbegin(); bat != topIn[c_end].bondend(); ++bat) - if (topIn[*bat].Element() == Atom::CARBON) - c_end_bonds_to_C++; - if (debug_ > 0) - mprintf("(%s bonds to C= %i, %s bonds to C = %i)", // DEBUG - topIn.ResNameNumAtomNameNum(c_beg).c_str(), c_beg_bonds_to_C, - topIn.ResNameNumAtomNameNum(c_end).c_str(), c_end_bonds_to_C); - if (c_beg_bonds_to_C <= c_end_bonds_to_C) { - anomeric_atom = c_beg; - ring_end_atom = c_end; - // Find anomeric reference atom. Start at c_end and work down to c_beg - for (int arat = c_end; arat != c_beg; arat--) - if (atomIsChiral[arat - topIn.Res(rnum).FirstAtom()]) { - ano_ref_atom = arat; - break; - } - //ano_ref_atom = c_end; - } else { - anomeric_atom = c_end; - ring_end_atom = c_beg; - // Find anomeric reference atom. Start at c_beg and work up to c_end - for (int arat = c_beg; arat != c_end; arat++) - if (atomIsChiral[arat - topIn.Res(rnum).FirstAtom()]) { - ano_ref_atom = arat; - break; - } - //ano_ref_atom = c_beg; - } + // Place the ring atoms into an array without the terminating -1 RA.clear(); if (debug_ > 0) mprintf(" :"); // DEBUG @@ -817,7 +810,27 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c RA.push_back( *it ); } if (debug_ > 0) mprintf("\n"); // DEBUG - } + // Find anomeric reference atom. Start at ring end and work down to anomeric atom + for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) + if (atomIsChiral[*arat - topIn.Res(rnum).FirstAtom()]) { + ano_ref_atom = *arat; + break; + } + + // Create an array with all ring atoms set to true + std::vector IsRingAtom; + IsRingAtom.assign( topIn.Natom(), false ); + IsRingAtom[ring_oxygen_atom] = true; + for (Iarray::const_iterator it = RA.begin(); it != RA.end(); ++it) + IsRingAtom[ *it ] = true; + // Get complete chain + Iarray carbon_chain = RA; + if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, IsRingAtom)) + return 1; + mprintf("DEBUG: Complete carbon chain:\n"); + for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + } // END ring_complete } if (RA.empty() || ring_oxygen_atom == -1) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); From 1ca68fd1acef4085ead63bb340c79569bf33393d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 6 Oct 2021 15:24:12 -0400 Subject: [PATCH 130/368] Move highest stereocenter calc into IdSugarRing --- src/Exec_PrepareForLeap.cpp | 30 ++++++++++++++++++++++-------- src/Exec_PrepareForLeap.h | 4 +++- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f6bb902235..8a85d752a4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -17,10 +17,12 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn) : rnum_(rn), ring_oxygen_atom_(-1), anomeric_atom_(-1), - ano_ref_atom_(-1) + ano_ref_atom_(-1), + ring_end_atom_(-1), + highest_stereocenter_(-1) {} -Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int rea, +Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int rea, int hs, std::vector const& RA, std::vector const& isChiralIn) : rnum_(rn), @@ -28,6 +30,7 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int rea, anomeric_atom_(aa), ano_ref_atom_(ara), ring_end_atom_(rea), + highest_stereocenter_(hs), ring_atoms_(RA), atomIsChiral_(isChiralIn) {} @@ -743,6 +746,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // part of a ring. Potential ring start atoms only have 2 bonds, // each one to a carbon. int ring_oxygen_atom = -1; // e.g. O5 + // This will hold the index of the highest stereocenter, e.g. C5 + int highest_stereocenter = -1; // This will hold ring atoms, not including the ring oxygen std::vector RA; for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); @@ -827,9 +832,16 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c Iarray carbon_chain = RA; if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, IsRingAtom)) return 1; + // Get the index of the highest stereocenter mprintf("DEBUG: Complete carbon chain:\n"); for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) - mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + { + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + if (atomIsChiral[*it - topIn.Res(rnum).FirstAtom()]) + highest_stereocenter = *it; + } + mprintf("DEBUG: Highest stereocenter: %s\n", + topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); } // END ring_complete } if (RA.empty() || ring_oxygen_atom == -1) { @@ -839,7 +851,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, ring_end_atom, RA, atomIsChiral); + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, ring_end_atom, + highest_stereocenter, RA, atomIsChiral); } /** Change PDB atom names in residue to glycam ones. */ @@ -940,8 +953,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, // Find the rest of the carbons in the chain in order to find the // stereocenter with the highest index. Start from final ring carbon. - int highest_stereocenter = -1; - std::vector remainingChainCarbons; + int highest_stereocenter = sugar.HighestStereocenter(); +/* std::vector remainingChainCarbons; if (FindRemainingChainCarbons(remainingChainCarbons, sugar.RingEndAtom(), topIn, rnum, IsRingAtom)) return 1; @@ -959,7 +972,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, if (*it > highest_stereocenter) highest_stereocenter = *it; } -/* // Count number of bonds to heavy atoms. +* // Count number of bonds to heavy atoms. Atom const& currentAtom = topIn[*it]; int n_heavyat_bonds = 0; for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) @@ -971,13 +984,14 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, if (debug_ > 0) mprintf(" Potential stereocenter"); if (*it > highest_stereocenter) // Is absolute index the best way to do this? highest_stereocenter = *it; - }*/ + }* if (debug_ > 0) mprintf("\n"); } // END loop over remaining chain carbons if (highest_stereocenter == -1) { // This means that ano_ref_atom is the highest stereocenter. highest_stereocenter = sugar.AnomericRefAtom(); } +*/ mprintf("\t Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); // Determine D/L bool isDform; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 3c316209ea..daa3e0275b 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -95,13 +95,14 @@ class Exec_PrepareForLeap : public Exec { class Exec_PrepareForLeap::Sugar { public: Sugar(int); - Sugar(int,int,int,int,int,std::vector const&,std::vector const&); + Sugar(int,int,int,int,int,int,std::vector const&,std::vector const&); int ResNum() const { return rnum_; } int RingOxygenAtom() const { return ring_oxygen_atom_; } int AnomericAtom() const { return anomeric_atom_; } int AnomericRefAtom() const { return ano_ref_atom_; } int RingEndAtom() const { return ring_end_atom_; } + int HighestStereocenter() const { return highest_stereocenter_; } typedef std::vector::const_iterator const_iterator; const_iterator ringbegin() const { return ring_atoms_.begin(); } @@ -119,6 +120,7 @@ class Exec_PrepareForLeap::Sugar { int anomeric_atom_; ///< Index of the anomeric C atom (ring start) int ano_ref_atom_; ///< Index of the anomeric reference C atom int ring_end_atom_; ///< Index of the ring end atom + int highest_stereocenter_; ///< Index of the highest stereocenter in the carbon chain std::vector ring_atoms_; ///< Index of all non-oxygen ring atoms std::vector atomIsChiral_; ///< For each sugar residue atom, whether it is chiral or not. }; From a01e4e2e50845a044da85b3a59cae7dcfb57e18d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 7 Oct 2021 06:17:12 -0400 Subject: [PATCH 131/368] New anomeric ref torsion calc that can handle non-ring-end position --- src/Exec_PrepareForLeap.cpp | 105 +++++++++++++++++++++++++++++++++--- src/Exec_PrepareForLeap.h | 3 ++ 2 files changed, 102 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8a85d752a4..68db1d048f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -633,6 +633,91 @@ const return 0; } +static inline bool IsRingAtom(std::vector const& RingAtoms, int tgt) +{ + for (std::vector::const_iterator it = RingAtoms.begin(); it != RingAtoms.end(); ++it) + if (*it == tgt) return true; + return false; +} + +/** Determine torsion around anomeric reference carbon. */ +int Exec_PrepareForLeap::CalcAnomericRefTorsion(double& torsion, + int ano_ref_atom, int ring_oxygen_atom, + int ring_end_atom, Iarray const& RingAtoms, + Topology const& topIn, Frame const& frameIn) +const +{ + //if (debug_ > 0) + mprintf("\t Anomeric ref carbon : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom).c_str()); + // ano_ref_atom_Y + // | + // ano_ref_atom + // | | + // ano_ref_atom_0 ano_ref_atom_1 + int ano_ref_atom_Y = -1; + int ano_ref_atom_0 = -1; + int ano_ref_atom_1 = -1; + // This will be the index of the anomeric atom in the RingAtoms array + int ar_index = -1; + // Find ring atom that precedes the anomeric reference atom TODO catch size==1? + for (unsigned int idx = 1; idx != RingAtoms.size(); idx++) { + if (RingAtoms[idx] == ano_ref_atom) { + ar_index = (int)idx; + ano_ref_atom_0 = RingAtoms[idx-1]; + break; + } + } + if (ano_ref_atom_0 == -1) { + mprinterr("Error: Anomeric reference ring C previous ring atom could not be identified.\n"); + return 1; + } + //if (debug_ > 0) + mprintf("\t Anomeric reference previous ring atom : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom_0).c_str()); + // If the anomeric reference atom is the ring end atom then ano_ref_atom_1 + // is the ring oxygen. + if (ano_ref_atom == ring_end_atom) { + ano_ref_atom_1 = ring_oxygen_atom; + } else { + // Anomeric reference atom is somewhere before the ring end atom. + ano_ref_atom_1 = RingAtoms[ar_index+1]; + } + //if (debug_ > 0) + mprintf("\t Anomeric reference next atom : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom_1).c_str()); + // Get substituent of anomeric ref (e.g. C5) that is not part of the ring (e.g. C6) + for ( Atom::bond_iterator bat = topIn[ano_ref_atom].bondbegin(); + bat != topIn[ano_ref_atom].bondend(); + ++bat ) + { + if ( *bat != ring_oxygen_atom && !IsRingAtom(RingAtoms, *bat) ) { + if (ano_ref_atom_Y != -1) { + mprinterr("Error: Two potential non-ring substituents for anomeric ref: %s and %s\n", + topIn.ResNameNumAtomNameNum(*bat).c_str(), + topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); + return 1; + } + ano_ref_atom_Y = *bat; + } + } + if (ano_ref_atom_Y == -1) { + mprinterr("Error: Anomeric reference Y substituent could not be identified.\n"); + return 1; + } + //if (debug_ > 0) + mprintf("\t Anomeric reference substituent : %s\n", + topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); + + + torsion = Torsion( frameIn.XYZ(ano_ref_atom_0), frameIn.XYZ(ano_ref_atom), + frameIn.XYZ(ano_ref_atom_Y), frameIn.XYZ(ano_ref_atom_1) ); + if (debug_ > 0) + mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); + return 0; +} + + /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, Frame const& frameIn, int& err) @@ -815,19 +900,27 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c RA.push_back( *it ); } if (debug_ > 0) mprintf("\n"); // DEBUG + // Create an array with all ring atoms set to true + std::vector IsRingAtom; + IsRingAtom.assign( topIn.Natom(), false ); + IsRingAtom[ring_oxygen_atom] = true; + for (Iarray::const_iterator it = RA.begin(); it != RA.end(); ++it) + IsRingAtom[ *it ] = true; // Find anomeric reference atom. Start at ring end and work down to anomeric atom for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) if (atomIsChiral[*arat - topIn.Res(rnum).FirstAtom()]) { ano_ref_atom = *arat; break; } + // For determining orientation around anomeric reference carbon need + // previous carbon in the chain and either next carbon in the chain + // or the ring oxygen. + double t_ar; + CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, + RA, topIn, frameIn); + + mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); - // Create an array with all ring atoms set to true - std::vector IsRingAtom; - IsRingAtom.assign( topIn.Natom(), false ); - IsRingAtom[ring_oxygen_atom] = true; - for (Iarray::const_iterator it = RA.begin(); it != RA.end(); ++it) - IsRingAtom[ *it ] = true; // Get complete chain Iarray carbon_chain = RA; if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, IsRingAtom)) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index daa3e0275b..6c110e723e 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -39,6 +39,9 @@ class Exec_PrepareForLeap : public Exec { int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; + int CalcAnomericRefTorsion(double&, int, int, int, Iarray const&, + Topology const&, Frame const&) const; + Sugar IdSugarRing(int, Topology const&, Frame const&, int&); int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); From 6493850ed508503a8bd9fc5294cecc86b8c3bfeb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 7 Oct 2021 11:27:19 -0400 Subject: [PATCH 132/368] Attempt to determine R vs S unobjectively --- src/Exec_PrepareForLeap.cpp | 244 ++++++++++++++++++++++++++++++++++-- src/Exec_PrepareForLeap.h | 8 ++ 2 files changed, 240 insertions(+), 12 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 68db1d048f..8ef47cfd37 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -640,6 +640,78 @@ static inline bool IsRingAtom(std::vector const& RingAtoms, int tgt) return false; } +/** Determine torsion around the anomeric carbon. */ +int Exec_PrepareForLeap::CalcAnomericTorsion(double& torsion, + int anomeric_atom, int ring_oxygen_atom, + int rnum, + Iarray const& RingAtoms, + Topology const& topIn, Frame const& frameIn) +const +{ + //if (debug_ > 0) { + mprintf("\t Anomeric carbon : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom).c_str()); + mprintf("\t Ring oxygen atom : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); + //} + int anomeric_atom_X = -1; + int anomeric_atom_C = -1; + // By definition the anomeric atom should be the first ring atom TODO catch size==1? + anomeric_atom_C = RingAtoms[1]; + if (anomeric_atom_C == -1) { + mprinterr("Error: Next ring atom after anomeric C could not be identified.\n"); + return 1; + } + //if (debug_ > 0) + mprintf("\t Anomeric C ring substituent : %s\n", + topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); + // Get the substituent of the anomeric C (e.g. C1) that is a non-ring atom, non hydrogen + for ( Atom::bond_iterator bat = topIn[anomeric_atom].bondbegin(); + bat != topIn[anomeric_atom].bondend(); + ++bat ) + { + if ( *bat != ring_oxygen_atom && + topIn[*bat].Element() != Atom::HYDROGEN && + !IsRingAtom(RingAtoms, *bat) ) + { + if (anomeric_atom_X != -1) { + // If there are two non-ring, non-hydrogen substituents, prioritize + // the one that is part of this residue. + bool bat_in_res = (topIn[*bat].ResNum() == rnum); + bool X_in_res = (topIn[anomeric_atom_X].ResNum() == rnum); + if ( (bat_in_res && X_in_res) || (!bat_in_res && !X_in_res) ) { + mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", + topIn.ResNameNumAtomNameNum(*bat).c_str(), + topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); + return 1; + } else if (bat_in_res) { + anomeric_atom_X = *bat; + } + } else + anomeric_atom_X = *bat; + } + } + + if (anomeric_atom_X == -1) { + // If the Cx (C1 substituent, usually a different residue) index is + // not found this usually means missing inter-residue bond. + // Alternatively, this could be an isolated sugar missing an -OH + // group, so make this non-fatal. + mprintf("Warning: Anomeric C non-ring substituent could not be identified.\n" + "Warning: This can happen if the sugar is bonded to something that\n" + "Warning: is missing, e.g. a -OH group. In that case the coordinates\n" + "Warning for the missing atoms may need to be generated.\n"); + return -1; + } + //if (debug_ > 0) + mprintf("\t Anomeric X substituent : %s\n", + topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); + + torsion = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(anomeric_atom), + frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(anomeric_atom_X) ); + if (debug_ > 0) + mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); + return 0; +} + /** Determine torsion around anomeric reference carbon. */ int Exec_PrepareForLeap::CalcAnomericRefTorsion(double& torsion, int ano_ref_atom, int ring_oxygen_atom, @@ -686,12 +758,16 @@ const //if (debug_ > 0) mprintf("\t Anomeric reference next atom : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_1).c_str()); - // Get substituent of anomeric ref (e.g. C5) that is not part of the ring (e.g. C6) + // Get non-hydrogen substituent of anomeric ref (e.g. C5) that + // is not part of the ring (e.g. C6). for ( Atom::bond_iterator bat = topIn[ano_ref_atom].bondbegin(); bat != topIn[ano_ref_atom].bondend(); ++bat ) { - if ( *bat != ring_oxygen_atom && !IsRingAtom(RingAtoms, *bat) ) { + if ( *bat != ring_oxygen_atom && + topIn[*bat].Element() != Atom::HYDROGEN && + !IsRingAtom(RingAtoms, *bat) ) + { if (ano_ref_atom_Y != -1) { mprinterr("Error: Two potential non-ring substituents for anomeric ref: %s and %s\n", topIn.ResNameNumAtomNameNum(*bat).c_str(), @@ -711,12 +787,134 @@ const torsion = Torsion( frameIn.XYZ(ano_ref_atom_0), frameIn.XYZ(ano_ref_atom), - frameIn.XYZ(ano_ref_atom_Y), frameIn.XYZ(ano_ref_atom_1) ); + frameIn.XYZ(ano_ref_atom_1), frameIn.XYZ(ano_ref_atom_Y) ); if (debug_ > 0) mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); return 0; } +/// \return Total priority (i.e. sum of atomic numbers) of atoms bonded to given atom. +int Exec_PrepareForLeap::totalPriority(Topology const& topIn, int atnum, + int depth, int tgtdepth, std::vector& Visited) +{ + if (Visited[atnum] || depth == tgtdepth) return 0; + Visited[atnum] = true; + int sum = 0; + Atom const& atom = topIn[atnum]; + for (Atom::bond_iterator bat = atom.bondbegin(); bat != atom.bondend(); ++bat) + sum += topIn[*bat].AtomicNumber() + totalPriority(topIn, *bat, depth+1, tgtdepth, Visited); + return sum; +} + +class priority_element { + public: + /// CONSTRUCT from atom number and initial priority + priority_element(int a, int p1) : atnum_(a), priority1_(p1), priority2_(-1) {} + /// Set priority 2 + void SetPriority2(int p2) { priority2_ = p2; } + /// \return Atom number + int AtNum() const { return atnum_; } + /// \return Priority 1 + int Priority1() const { return priority1_; } + /// \return Priority 2 + int Priority2() const { return priority2_; } + /// Sort on priority 1, then priority 2 + bool operator<(const priority_element& rhs) const { + if (*this != rhs) { + if (priority1_ == rhs.priority1_) { + return (priority2_ > rhs.priority2_); + } else { + return (priority1_ > rhs.priority1_); + } + } else + return false; + } + /// \return true if priorities are identical + bool operator==(const priority_element& rhs) const { + return (priority1_ == rhs.priority1_) && (priority2_ == rhs.priority2_); + } + /// \return true if priorities are not equal + bool operator!=(const priority_element& rhs) const { + if (priority2_ != rhs.priority2_ || + priority1_ != rhs.priority1_) return true; + return false; + } + private: + int atnum_; + int priority1_; + int priority2_; +}; + +/** Given an atom that is a chiral center, attempt to calculate a + * torsion that will help determine R vs S. Priorities will be + * assigned to bonded atoms as 1, 2, 3, and optionally 4. The + * torsion will then be calculated as + * 1-2-3-0 + * where 0 is the chiral center. Negative is S, positive is R. + */ +double Exec_PrepareForLeap::CalcChiralAtomTorsion(int atnum, + Topology const& topIn, + Frame const& frameIn, + int& err) +const +{ + err = 0; + Atom const& atom = topIn[atnum]; + if (atom.Nbonds() < 3) { + mprinterr("Error: CalcChiralAtomTorsion called for atom %s with less than 3 bonds.\n", + topIn.AtomMaskName(atnum).c_str()); + err = 1; + return 0; + } + // Calculate a priority score for each bonded atom. + // First just use the atomic number. + mprintf("DEBUG: Determining priorities around atom %s\n", topIn.AtomMaskName(atnum).c_str()); + std::vector priority; + for (int idx = 0; idx != atom.Nbonds(); idx++) { + priority.push_back( priority_element(atom.Bond(idx), topIn[atom.Bond(idx)].AtomicNumber()) ); + mprintf("DEBUG:\t\t%i Priority for %s is %i\n", idx, topIn.AtomMaskName(atom.Bond(idx)).c_str(), priority.back().Priority1()); + } + // For any identical priorities, need to check who they are bonded to. + for (int idx1 = 0; idx1 != atom.Nbonds(); idx1++) { + for (int idx2 = idx1+1; idx2 != atom.Nbonds(); idx2++) { + if (priority[idx1] == priority[idx2]) { + bool identical_priorities = true; + int depth = 1; + while (identical_priorities) { + mprintf("DEBUG: Priority of index %i == %i, depth %i\n", idx1, idx2, depth); + std::vector Visited(topIn.Natom(), false); + Visited[atnum] = true; + priority[idx1].SetPriority2(totalPriority(topIn, atom.Bond(idx1), 0, depth, Visited)); + mprintf("DEBUG:\tPriority2 of %i is %i\n", idx1, priority[idx1].Priority2()); + + Visited.assign(topIn.Natom(), false); + Visited[atnum] = true; + priority[idx2].SetPriority2(totalPriority(topIn, atom.Bond(idx2), 0, depth, Visited)); + mprintf("DEBUG:\tPriority2 of %i is %i\n", idx2, priority[idx2].Priority2()); + if (priority[idx1] != priority[idx2]) { + identical_priorities = false; + break; + } + if (depth == 10) { + mprinterr("Error: Could not determine priority around '%s'\n", + topIn.AtomMaskName(atnum).c_str()); + err = 1; + return 0; + } + depth++; + } // END while identical priorities + } + } + } + std::sort(priority.begin(), priority.end()); + mprintf("DEBUG: Sorted by priority:\n"); + for (std::vector::const_iterator it = priority.begin(); + it != priority.end(); ++it) + mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); + mprintf("\n"); + + return 0; +} /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, @@ -763,7 +961,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // Set up an AtomMap for this residue to help determine stereocenters AtomMap myMap; - myMap.SetDebug(10); + myMap.SetDebug(debug_); if (myMap.SetupResidue(topIn, frameIn, rnum)) { mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); err = 1; @@ -906,20 +1104,42 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c IsRingAtom[ring_oxygen_atom] = true; for (Iarray::const_iterator it = RA.begin(); it != RA.end(); ++it) IsRingAtom[ *it ] = true; + // For determining orientation around anomeric carbon need ring + // oxygen atom and next carbon in the ring. + int err; + CalcChiralAtomTorsion(anomeric_atom, topIn, frameIn, err); + double t_an; + CalcAnomericTorsion(t_an, anomeric_atom, ring_oxygen_atom, rnum, + RA, topIn, frameIn); + mprintf("DEBUG: t_an= %f\n", t_an * Constants::RADDEG); + bool t_an_up = (t_an > 0); + mprintf("DEBUG: Based on t_an %s form is", topIn.TruncResNameOnumId(rnum).c_str()); + if (t_an_up) + mprintf(" alpha\n"); // S + else + mprintf(" beta\n"); + // Find anomeric reference atom. Start at ring end and work down to anomeric atom for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) if (atomIsChiral[*arat - topIn.Res(rnum).FirstAtom()]) { ano_ref_atom = *arat; break; } - // For determining orientation around anomeric reference carbon need - // previous carbon in the chain and either next carbon in the chain - // or the ring oxygen. - double t_ar; - CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, - RA, topIn, frameIn); - - mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); + if (ano_ref_atom == ring_end_atom) { + // For determining orientation around anomeric reference carbon when + // it is the ring end atom need previous carbon in the chain and + // ring oxygen. + double t_ar; + CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, + RA, topIn, frameIn); + mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); + bool t_ar_up = (t_ar > 0); + mprintf("DEBUG: Based on t_ar and t_an %s form is", topIn.TruncResNameOnumId(rnum).c_str()); + if (t_an_up == t_ar_up) + mprintf(" beta\n"); + else + mprintf(" alpha\n"); + } // Get complete chain Iarray carbon_chain = RA; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 6c110e723e..397e687da3 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -39,9 +39,17 @@ class Exec_PrepareForLeap : public Exec { int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, std::vector const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; + /// Determine orientation around anomeric carbon + int CalcAnomericTorsion(double&, int, int, int, Iarray const&, + Topology const&, Frame const&) const; + /// Determine orientation around anomeric reference carbon int CalcAnomericRefTorsion(double&, int, int, int, Iarray const&, Topology const&, Frame const&) const; + static int totalPriority(Topology const&, int, int, int, std::vector&); + + double CalcChiralAtomTorsion(int, Topology const&, Frame const&, int&) const; + Sugar IdSugarRing(int, Topology const&, Frame const&, int&); int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); From add050dcb0fdb352e748cdedb8a792ee21876b76 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 7 Oct 2021 13:04:31 -0400 Subject: [PATCH 133/368] Only consider atoms for the residue itself, with the exception of what is bonded to the anomeric carbon --- src/Exec_PrepareForLeap.cpp | 18 +++++++++++++----- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8ef47cfd37..97b929b766 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -794,15 +794,23 @@ const } /// \return Total priority (i.e. sum of atomic numbers) of atoms bonded to given atom. -int Exec_PrepareForLeap::totalPriority(Topology const& topIn, int atnum, +int Exec_PrepareForLeap::totalPriority(Topology const& topIn, int atnum, int rnum, int depth, int tgtdepth, std::vector& Visited) { if (Visited[atnum] || depth == tgtdepth) return 0; Visited[atnum] = true; + if (topIn[atnum].ResNum() != rnum) { + if (depth == 0) + // Atom in another residue bonded to chiral atom (e.g. O to C1) + return topIn[atnum].AtomicNumber(); + else + // Atom in another residue bonded to atom bonded to chiral atom + return 0; + } int sum = 0; Atom const& atom = topIn[atnum]; for (Atom::bond_iterator bat = atom.bondbegin(); bat != atom.bondend(); ++bat) - sum += topIn[*bat].AtomicNumber() + totalPriority(topIn, *bat, depth+1, tgtdepth, Visited); + sum += topIn[*bat].AtomicNumber() + totalPriority(topIn, *bat, rnum, depth+1, tgtdepth, Visited); return sum; } @@ -884,12 +892,12 @@ const mprintf("DEBUG: Priority of index %i == %i, depth %i\n", idx1, idx2, depth); std::vector Visited(topIn.Natom(), false); Visited[atnum] = true; - priority[idx1].SetPriority2(totalPriority(topIn, atom.Bond(idx1), 0, depth, Visited)); + priority[idx1].SetPriority2(totalPriority(topIn, atom.Bond(idx1), atom.ResNum(), 0, depth, Visited)); mprintf("DEBUG:\tPriority2 of %i is %i\n", idx1, priority[idx1].Priority2()); Visited.assign(topIn.Natom(), false); Visited[atnum] = true; - priority[idx2].SetPriority2(totalPriority(topIn, atom.Bond(idx2), 0, depth, Visited)); + priority[idx2].SetPriority2(totalPriority(topIn, atom.Bond(idx2), atom.ResNum(), 0, depth, Visited)); mprintf("DEBUG:\tPriority2 of %i is %i\n", idx2, priority[idx2].Priority2()); if (priority[idx1] != priority[idx2]) { identical_priorities = false; @@ -907,7 +915,7 @@ const } } std::sort(priority.begin(), priority.end()); - mprintf("DEBUG: Sorted by priority:\n"); + mprintf("DEBUG: Sorted by priority:"); for (std::vector::const_iterator it = priority.begin(); it != priority.end(); ++it) mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 397e687da3..1a2a10430c 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -46,7 +46,7 @@ class Exec_PrepareForLeap : public Exec { int CalcAnomericRefTorsion(double&, int, int, int, Iarray const&, Topology const&, Frame const&) const; - static int totalPriority(Topology const&, int, int, int, std::vector&); + static int totalPriority(Topology const&, int, int, int, int, std::vector&); double CalcChiralAtomTorsion(int, Topology const&, Frame const&, int&) const; From 07885ede059a4042881afa5c50115958c5e0935b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 7 Oct 2021 13:10:20 -0400 Subject: [PATCH 134/368] Actually calculate the torsion --- src/Exec_PrepareForLeap.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 97b929b766..506e04f5d5 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -921,7 +921,16 @@ const mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); mprintf("\n"); - return 0; + double tors = Torsion( frameIn.XYZ(priority[0].AtNum()), + frameIn.XYZ(priority[1].AtNum()), + frameIn.XYZ(priority[2].AtNum()), + frameIn.XYZ(atnum) ); + mprintf("DEBUG: Torsion around '%s' is %f", topIn.AtomMaskName(atnum).c_str(), tors*Constants::RADDEG); + if (tors < 0) + mprintf(" (S)\n"); + else + mprintf(" (R)\n"); + return tors; } /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ From fbff6c61799cf10d124ea8b752bcd0bba97ded81 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 7 Oct 2021 14:57:26 -0400 Subject: [PATCH 135/368] Atommap the entire system to correctly determine chirality --- src/Exec_PrepareForLeap.cpp | 179 +++++++++++++++++++++--------------- src/Exec_PrepareForLeap.h | 7 +- 2 files changed, 113 insertions(+), 73 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 506e04f5d5..085d616c5f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -7,7 +7,6 @@ #include "CpptrajFile.h" #include "Trajout_Single.h" #include "DataSet_Coords_CRD.h" -#include "AtomMap.h" #include #include // tolower #include // sort @@ -860,19 +859,18 @@ class priority_element { * 1-2-3-0 * where 0 is the chiral center. Negative is S, positive is R. */ -double Exec_PrepareForLeap::CalcChiralAtomTorsion(int atnum, - Topology const& topIn, - Frame const& frameIn, - int& err) +Exec_PrepareForLeap::ChiralRetType + Exec_PrepareForLeap::CalcChiralAtomTorsion(double& tors, int atnum, + Topology const& topIn, + Frame const& frameIn) const { - err = 0; + tors = 0.0; Atom const& atom = topIn[atnum]; if (atom.Nbonds() < 3) { mprinterr("Error: CalcChiralAtomTorsion called for atom %s with less than 3 bonds.\n", topIn.AtomMaskName(atnum).c_str()); - err = 1; - return 0; + return ERR; } // Calculate a priority score for each bonded atom. // First just use the atomic number. @@ -906,8 +904,7 @@ const if (depth == 10) { mprinterr("Error: Could not determine priority around '%s'\n", topIn.AtomMaskName(atnum).c_str()); - err = 1; - return 0; + return ERR; } depth++; } // END while identical priorities @@ -921,16 +918,35 @@ const mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); mprintf("\n"); - double tors = Torsion( frameIn.XYZ(priority[0].AtNum()), - frameIn.XYZ(priority[1].AtNum()), - frameIn.XYZ(priority[2].AtNum()), - frameIn.XYZ(atnum) ); + tors = Torsion( frameIn.XYZ(priority[0].AtNum()), + frameIn.XYZ(priority[1].AtNum()), + frameIn.XYZ(priority[2].AtNum()), + frameIn.XYZ(atnum) ); mprintf("DEBUG: Torsion around '%s' is %f", topIn.AtomMaskName(atnum).c_str(), tors*Constants::RADDEG); - if (tors < 0) + ChiralRetType ret; + if (tors < 0) { + ret = IS_S; mprintf(" (S)\n"); - else + } else { + ret = IS_R; mprintf(" (R)\n"); - return tors; + } + return ret; +} + +static inline void bond_count(int& bonds_to_h, + int& bonds_to_other_res, + int rnum, Topology const& topIn, Atom const& currentAtom) +{ + bonds_to_h = 0; + bonds_to_other_res = 0; + for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::HYDROGEN) + bonds_to_h++; + else if (topIn[*bat].ResNum() != rnum) + bonds_to_other_res++; + } } /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ @@ -939,27 +955,48 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c { err = 0; Residue const& res = topIn.Res(rnum); - // Try to identify the sugar ring. Potential starting atoms are oxygens - // bonded to two carbon atoms. Also save potential stereocenter indices - // (i.e. carbons bonded to 4 other atoms). Since input structure may not - // have any hydrogens, count bonds to heavy atoms only, must make at - // least 3 bonds (otherwise e.g. likely 2 hydrogens). + + // Classify sugar residue atom types + enum RingAtomType { TERMINAL, LINK, OTHER }; + static const char* RingAtomStr[] = { "Terminal", "Link", "Other" }; + std::vector ringAtomTypes; + ringAtomTypes.reserve( res.NumAtoms() ); std::vector potentialRingStartAtoms; + int bonds_to_h = 0; + int bonds_to_other_res = 0; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = topIn[at]; - if (currentAtom.Element() == Atom::OXYGEN) { - if (currentAtom.Nbonds() == 2) { - if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(0)].ResNum() == rnum && - topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(1)].ResNum() == rnum ) - { - potentialRingStartAtoms.push_back( at ); + if ( currentAtom.Element() == Atom::HYDROGEN ) { + ringAtomTypes.push_back( TERMINAL ); + } else { + bond_count( bonds_to_h, bonds_to_other_res, rnum, topIn, currentAtom ); + if (bonds_to_other_res > 0) + ringAtomTypes.push_back( LINK ); + else if (currentAtom.Nbonds() - bonds_to_h < 2) + // At most one bond to something that is not hydrogen + ringAtomTypes.push_back( TERMINAL ); + else { + ringAtomTypes.push_back( OTHER ); + // Try to identify the sugar ring. Potential starting atoms are oxygens + // bonded to two carbon atoms. + if (currentAtom.Element() == Atom::OXYGEN) { + if (currentAtom.Nbonds() == 2) { + if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(0)].ResNum() == rnum && + topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(1)].ResNum() == rnum ) + { + potentialRingStartAtoms.push_back( at ); + } + } } } } + + mprintf("DEBUG: Atom '%s' is %s\n", topIn.AtomMaskName(at).c_str(), RingAtomStr[ringAtomTypes.back()]); } + // TODO handle case where multiple potential ring start atoms exist if (potentialRingStartAtoms.empty()) { mprintf("Warning: Ring oxygen could not be identified for %s\n", @@ -976,22 +1013,23 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c return Sugar(rnum); } + // Set up an AtomMap for this residue to help determine stereocenters - AtomMap myMap; - myMap.SetDebug(debug_); - if (myMap.SetupResidue(topIn, frameIn, rnum)) { - mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); - err = 1; - return Sugar(rnum); - } - myMap.DetermineAtomIDs(); +// AtomMap myMap; +// myMap.SetDebug(10); +// if (myMap.SetupResidue(topIn, frameIn, rnum)) { +// mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); +// err = 1; +// return Sugar(rnum); +// } +// myMap.DetermineAtomIDs(); std::vector atomIsChiral; - atomIsChiral.reserve( myMap.Natom() ); + atomIsChiral.reserve( res.NumAtoms() ); // Since we cant be certain there are hydrogens, cannot rely // on the internal mapping. Make a chiral center a carbon // with at least 3 bonds, all must be unique. - int resat = topIn.Res(rnum).FirstAtom(); - for (int iat = 0; iat != myMap.Natom(); iat++, resat++) + int resat = res.FirstAtom(); + for (int iat = 0; iat != res.NumAtoms(); iat++, resat++) { bool chiral = false; if (topIn[resat].Element() == Atom::CARBON && topIn[resat].Nbonds() > 2) { @@ -1000,20 +1038,10 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c for (Atom::bond_iterator bat1 = topIn[resat].bondbegin(); bat1 != topIn[resat].bondend(); ++bat1) { - std::string unique1; - if (*bat1 >= topIn.Res(rnum).FirstAtom() && *bat1 < topIn.Res(rnum).LastAtom()) - unique1 = myMap[*bat1 - topIn.Res(rnum).FirstAtom()].Unique(); - else - // Always count bonds to external as unique - unique1 = "unique1"; + std::string unique1 = myMap_[*bat1].Unique(); for (Atom::bond_iterator bat2 = bat1 + 1; bat2 != topIn[resat].bondend(); ++bat2) { - std::string unique2; - if (*bat2 >= topIn.Res(rnum).FirstAtom() && *bat2 < topIn.Res(rnum).LastAtom()) - unique2 = myMap[*bat2 - topIn.Res(rnum).FirstAtom()].Unique(); - else - // Always count bonds to external as unique - unique2 = "unique2"; + std::string unique2 = myMap_[*bat2].Unique(); if (unique1 == unique2) { // At least two of the atoms bonded to this atom look the same. Not chiral. mprintf("DEBUG: unique strings match '%s' '%s'\n", unique1.c_str(), unique2.c_str()); @@ -1123,18 +1151,15 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c IsRingAtom[ *it ] = true; // For determining orientation around anomeric carbon need ring // oxygen atom and next carbon in the ring. - int err; - CalcChiralAtomTorsion(anomeric_atom, topIn, frameIn, err); + static const char* chiralStr[] = {0, "S", "R"}; double t_an; - CalcAnomericTorsion(t_an, anomeric_atom, ring_oxygen_atom, rnum, - RA, topIn, frameIn); + ChiralRetType ac_chirality = CalcChiralAtomTorsion(t_an, anomeric_atom, topIn, frameIn); + //CalcAnomericTorsion(t_an, anomeric_atom, ring_oxygen_atom, rnum, + // RA, topIn, frameIn); mprintf("DEBUG: t_an= %f\n", t_an * Constants::RADDEG); - bool t_an_up = (t_an > 0); - mprintf("DEBUG: Based on t_an %s form is", topIn.TruncResNameOnumId(rnum).c_str()); - if (t_an_up) - mprintf(" alpha\n"); // S - else - mprintf(" beta\n"); + //bool t_an_up = (t_an > 0); + mprintf("DEBUG: Based on t_an %s form is %s\n", + topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ac_chirality]); // Find anomeric reference atom. Start at ring end and work down to anomeric atom for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) @@ -1142,21 +1167,23 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c ano_ref_atom = *arat; break; } - if (ano_ref_atom == ring_end_atom) { + //if (ano_ref_atom == ring_end_atom) { // For determining orientation around anomeric reference carbon when // it is the ring end atom need previous carbon in the chain and // ring oxygen. double t_ar; - CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, - RA, topIn, frameIn); + ChiralRetType ar_chirality = CalcChiralAtomTorsion(t_ar, ano_ref_atom, topIn, frameIn); + //CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, + // RA, topIn, frameIn); mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); - bool t_ar_up = (t_ar > 0); - mprintf("DEBUG: Based on t_ar and t_an %s form is", topIn.TruncResNameOnumId(rnum).c_str()); - if (t_an_up == t_ar_up) - mprintf(" beta\n"); + //bool t_ar_up = (t_ar > 0); + mprintf("DEBUG: Based on t_ar %s form is %s\n", + topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ar_chirality]); + if (ac_chirality == IS_R) + mprintf("DEBUG: Overall form is beta\n"); else - mprintf(" alpha\n"); - } + mprintf("DEBUG: Overall form is alpha\n"); + //} // Get complete chain Iarray carbon_chain = RA; @@ -2357,6 +2384,14 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (prepare_sugars) { + // Set up an AtomMap for this residue to help determine stereocenters + myMap_.SetDebug(debug_); + if (myMap_.Setup(topIn, frameIn)) { + mprinterr("Error: Atom map setup failed\n"); + return CpptrajState::ERR; + } + myMap_.DetermineAtomIDs(); + if (PrepareSugars(sugarMask, topIn, frameIn, outfile, !argIn.hasKey("noc1search"))) { mprinterr("Error: Sugar preparation failed.\n"); return CpptrajState::ERR; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 1a2a10430c..c070c552f1 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -1,6 +1,7 @@ #ifndef INC_EXEC_PREPAREFORLEAP_H #define INC_EXEC_PREPAREFORLEAP_H #include "Exec.h" +#include "AtomMap.h" #include #include #include @@ -48,7 +49,10 @@ class Exec_PrepareForLeap : public Exec { static int totalPriority(Topology const&, int, int, int, int, std::vector&); - double CalcChiralAtomTorsion(int, Topology const&, Frame const&, int&) const; + /// return type for the CalcChiralAtomTorsion routine + enum ChiralRetType { ERR = 0, IS_S, IS_R }; + + ChiralRetType CalcChiralAtomTorsion(double&, int, Topology const&, Frame const&) const; Sugar IdSugarRing(int, Topology const&, Frame const&, int&); int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; @@ -101,6 +105,7 @@ class Exec_PrepareForLeap : public Exec { bool errorsAreFatal_; ///< If false, try to skip errors. int debug_; ///< Debug level std::string solventResName_; ///< Solvent residue name + AtomMap myMap_; }; // ----- Sugar class ---------------------------------------------------------- class Exec_PrepareForLeap::Sugar { From 6a42c366af7c48f08936ea4a096c5bab696e8fa4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 10:18:49 -0400 Subject: [PATCH 136/368] Fix phrasing and error return status --- src/Exec_PrepareForLeap.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 085d616c5f..998352000d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -934,6 +934,8 @@ const return ret; } + + static inline void bond_count(int& bonds_to_h, int& bonds_to_other_res, int rnum, Topology const& topIn, Atom const& currentAtom) @@ -1143,6 +1145,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c RA.push_back( *it ); } if (debug_ > 0) mprintf("\n"); // DEBUG + // Create an array with all ring atoms set to true std::vector IsRingAtom; IsRingAtom.assign( topIn.Natom(), false ); @@ -1158,7 +1161,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // RA, topIn, frameIn); mprintf("DEBUG: t_an= %f\n", t_an * Constants::RADDEG); //bool t_an_up = (t_an > 0); - mprintf("DEBUG: Based on t_an %s form is %s\n", + mprintf("DEBUG: Based on t_an %s chirality is %s\n", topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ac_chirality]); // Find anomeric reference atom. Start at ring end and work down to anomeric atom @@ -1177,18 +1180,17 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // RA, topIn, frameIn); mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); //bool t_ar_up = (t_ar > 0); - mprintf("DEBUG: Based on t_ar %s form is %s\n", + mprintf("DEBUG: Based on t_ar %s chirality is %s\n", topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ar_chirality]); - if (ac_chirality == IS_R) - mprintf("DEBUG: Overall form is beta\n"); - else - mprintf("DEBUG: Overall form is alpha\n"); //} // Get complete chain Iarray carbon_chain = RA; - if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, IsRingAtom)) - return 1; + if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, IsRingAtom)) { + mprinterr("Error: Could not find remaining chain carbons.\n"); + err = 1; + return Sugar(rnum); + } // Get the index of the highest stereocenter mprintf("DEBUG: Complete carbon chain:\n"); for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) From 518508595843fd6b5fcce9d958398f4b4923d903 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 10:37:46 -0400 Subject: [PATCH 137/368] Just make it so when reference atom isnt the ring end atom definition is flipped? --- src/Exec_PrepareForLeap.cpp | 133 ++++++++++++++---------------------- 1 file changed, 50 insertions(+), 83 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 998352000d..af4804a00b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -934,23 +934,6 @@ const return ret; } - - -static inline void bond_count(int& bonds_to_h, - int& bonds_to_other_res, - int rnum, Topology const& topIn, Atom const& currentAtom) -{ - bonds_to_h = 0; - bonds_to_other_res = 0; - for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) - { - if (topIn[*bat].Element() == Atom::HYDROGEN) - bonds_to_h++; - else if (topIn[*bat].ResNum() != rnum) - bonds_to_other_res++; - } -} - /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, Frame const& frameIn, int& err) @@ -958,45 +941,24 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c err = 0; Residue const& res = topIn.Res(rnum); - // Classify sugar residue atom types - enum RingAtomType { TERMINAL, LINK, OTHER }; - static const char* RingAtomStr[] = { "Terminal", "Link", "Other" }; - std::vector ringAtomTypes; - ringAtomTypes.reserve( res.NumAtoms() ); + // Determine candidates for ring oxygen atoms. std::vector potentialRingStartAtoms; - int bonds_to_h = 0; - int bonds_to_other_res = 0; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = topIn[at]; - if ( currentAtom.Element() == Atom::HYDROGEN ) { - ringAtomTypes.push_back( TERMINAL ); - } else { - bond_count( bonds_to_h, bonds_to_other_res, rnum, topIn, currentAtom ); - if (bonds_to_other_res > 0) - ringAtomTypes.push_back( LINK ); - else if (currentAtom.Nbonds() - bonds_to_h < 2) - // At most one bond to something that is not hydrogen - ringAtomTypes.push_back( TERMINAL ); - else { - ringAtomTypes.push_back( OTHER ); - // Try to identify the sugar ring. Potential starting atoms are oxygens - // bonded to two carbon atoms. - if (currentAtom.Element() == Atom::OXYGEN) { - if (currentAtom.Nbonds() == 2) { - if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(0)].ResNum() == rnum && - topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(1)].ResNum() == rnum ) - { - potentialRingStartAtoms.push_back( at ); - } - } + // Try to identify the sugar ring oxygen. Candidate atoms are oxygens + // bonded to two carbon atoms in the same residue. + if (currentAtom.Element() == Atom::OXYGEN) { + if (currentAtom.Nbonds() == 2) { + if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(0)].ResNum() == rnum && + topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && + topIn[currentAtom.Bond(1)].ResNum() == rnum ) + { + potentialRingStartAtoms.push_back( at ); } } } - - mprintf("DEBUG: Atom '%s' is %s\n", topIn.AtomMaskName(at).c_str(), RingAtomStr[ringAtomTypes.back()]); } // TODO handle case where multiple potential ring start atoms exist @@ -1015,21 +977,13 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c return Sugar(rnum); } - - // Set up an AtomMap for this residue to help determine stereocenters -// AtomMap myMap; -// myMap.SetDebug(10); -// if (myMap.SetupResidue(topIn, frameIn, rnum)) { -// mprinterr("Error: Atom map setup failed for sugar %s\n", topIn.TruncResNameOnumId(rnum).c_str()); -// err = 1; -// return Sugar(rnum); -// } -// myMap.DetermineAtomIDs(); + // Use the previously-set up AtomMap to help determine stereocenters std::vector atomIsChiral; atomIsChiral.reserve( res.NumAtoms() ); - // Since we cant be certain there are hydrogens, cannot rely - // on the internal mapping. Make a chiral center a carbon - // with at least 3 bonds, all must be unique. + // Since we cannot be certain there will be hydrogens, cannot rely + // on the AtomMap chiral designations (which assumes hydrogens). + // Make a chiral center a carbon with at least 3 bonds, all must be + // to different kinds of atoms. int resat = res.FirstAtom(); for (int iat = 0; iat != res.NumAtoms(); iat++, resat++) { @@ -1061,6 +1015,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c (int)atomIsChiral.back()); } + // Using the potential ring start atoms, see if we can actually complete + // a ring. Identify important atoms as well. // This will indicate ring direction int ring_direction = 0; // Ring end atom is the last atom in the ring @@ -1078,12 +1034,13 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c int ring_oxygen_atom = -1; // e.g. O5 // This will hold the index of the highest stereocenter, e.g. C5 int highest_stereocenter = -1; - // This will hold ring atoms, not including the ring oxygen + // This will hold ring atoms, not including the ring oxygen. std::vector RA; for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); ++ringat) { + // Mark all atoms as visited except this residue (minus the ring start). std::vector Visited( topIn.Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != *ringat) @@ -1154,15 +1111,15 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c IsRingAtom[ *it ] = true; // For determining orientation around anomeric carbon need ring // oxygen atom and next carbon in the ring. - static const char* chiralStr[] = {0, "S", "R"}; double t_an; - ChiralRetType ac_chirality = CalcChiralAtomTorsion(t_an, anomeric_atom, topIn, frameIn); - //CalcAnomericTorsion(t_an, anomeric_atom, ring_oxygen_atom, rnum, - // RA, topIn, frameIn); +// ChiralRetType ac_chirality = CalcChiralAtomTorsion(t_an, anomeric_atom, topIn, frameIn); +// static const char* chiralStr[] = {0, "S", "R"}; +// mprintf("DEBUG: Based on t_an %s chirality is %s\n", +// topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ac_chirality]); + CalcAnomericTorsion(t_an, anomeric_atom, ring_oxygen_atom, rnum, + RA, topIn, frameIn); mprintf("DEBUG: t_an= %f\n", t_an * Constants::RADDEG); - //bool t_an_up = (t_an > 0); - mprintf("DEBUG: Based on t_an %s chirality is %s\n", - topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ac_chirality]); + bool t_an_up = (t_an > 0); // Find anomeric reference atom. Start at ring end and work down to anomeric atom for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) @@ -1170,19 +1127,29 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c ano_ref_atom = *arat; break; } - //if (ano_ref_atom == ring_end_atom) { - // For determining orientation around anomeric reference carbon when - // it is the ring end atom need previous carbon in the chain and - // ring oxygen. - double t_ar; - ChiralRetType ar_chirality = CalcChiralAtomTorsion(t_ar, ano_ref_atom, topIn, frameIn); - //CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, - // RA, topIn, frameIn); - mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); - //bool t_ar_up = (t_ar > 0); - mprintf("DEBUG: Based on t_ar %s chirality is %s\n", - topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ar_chirality]); - //} + // For determining orientation around anomeric reference carbon need + // previous carbon in the chain and either next carbon or ring oxygen. + double t_ar; +// ChiralRetType ar_chirality = CalcChiralAtomTorsion(t_ar, ano_ref_atom, topIn, frameIn); +// mprintf("DEBUG: Based on t_ar %s chirality is %s\n", +// topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ar_chirality]); + CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, + RA, topIn, frameIn); + mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); + bool t_ar_up = (t_ar > 0); + if (ano_ref_atom == ring_end_atom) { + // Anomeric reference is the ring end, same side is beta, opposite is alpha. + if (t_an_up == t_ar_up) + mprintf("DEBUG: Form is Beta\n"); + else + mprintf("DEBUG: Form is Alpha\n"); + } else { + // Anomeric reference isnt the ring end, definition is reversed. + if (t_an_up != t_ar_up) + mprintf("DEBUG: Form is Beta\n"); + else + mprintf("DEBUG: Form is Alpha\n"); + } // Get complete chain Iarray carbon_chain = RA; From d11e2e38778ce82c4499fa68b1d75fe6535fc160 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 10:54:36 -0400 Subject: [PATCH 138/368] Add form to Sugar class. Remove is chiral and ring end atom --- src/Exec_PrepareForLeap.cpp | 38 ++++++++++++++++++++++--------------- src/Exec_PrepareForLeap.h | 10 ++++------ 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index af4804a00b..412cd725a7 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -17,21 +17,19 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn) : ring_oxygen_atom_(-1), anomeric_atom_(-1), ano_ref_atom_(-1), - ring_end_atom_(-1), - highest_stereocenter_(-1) + highest_stereocenter_(-1), + anomer_(ALPHA) {} -Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int rea, int hs, - std::vector const& RA, - std::vector const& isChiralIn) : +Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, AnomerType anomer, + std::vector const& RA) : rnum_(rn), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), - ring_end_atom_(rea), highest_stereocenter_(hs), - ring_atoms_(RA), - atomIsChiral_(isChiralIn) + anomer_(anomer), + ring_atoms_(RA) {} void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { @@ -42,12 +40,13 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); - mprintf("\t\tRing end atom : %s\n", topIn.TruncAtomNameNum(ring_end_atom_).c_str()); mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); mprintf("\t\tNon-O Ring atoms :"); for (std::vector::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); mprintf("\n"); + static const char* AnomerStr[] = { "Alpha", "Beta" }; + mprintf("\t\tForm : %s\n", AnomerStr[anomer_]); } } @@ -1034,6 +1033,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c int ring_oxygen_atom = -1; // e.g. O5 // This will hold the index of the highest stereocenter, e.g. C5 int highest_stereocenter = -1; + // Hold the anomer + Sugar::AnomerType anomer = Sugar::ALPHA; // This will hold ring atoms, not including the ring oxygen. std::vector RA; for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); @@ -1137,18 +1138,25 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c RA, topIn, frameIn); mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); bool t_ar_up = (t_ar > 0); + if (ano_ref_atom == ring_end_atom) { // Anomeric reference is the ring end, same side is beta, opposite is alpha. - if (t_an_up == t_ar_up) + if (t_an_up == t_ar_up) { + anomer = Sugar::BETA; mprintf("DEBUG: Form is Beta\n"); - else + } else { + anomer = Sugar::ALPHA; mprintf("DEBUG: Form is Alpha\n"); + } } else { // Anomeric reference isnt the ring end, definition is reversed. - if (t_an_up != t_ar_up) + if (t_an_up != t_ar_up) { + anomer = Sugar::BETA; mprintf("DEBUG: Form is Beta\n"); - else + } else { + anomer = Sugar::ALPHA; mprintf("DEBUG: Form is Alpha\n"); + } } // Get complete chain @@ -1177,8 +1185,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, ring_end_atom, - highest_stereocenter, RA, atomIsChiral); + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, + highest_stereocenter, anomer, RA); } /** Change PDB atom names in residue to glycam ones. */ diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c070c552f1..6d61a2d519 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -111,21 +111,20 @@ class Exec_PrepareForLeap : public Exec { class Exec_PrepareForLeap::Sugar { public: Sugar(int); - Sugar(int,int,int,int,int,int,std::vector const&,std::vector const&); + enum AnomerType { ALPHA = 0, BETA }; + Sugar(int,int,int,int,int,AnomerType,std::vector const&); int ResNum() const { return rnum_; } int RingOxygenAtom() const { return ring_oxygen_atom_; } int AnomericAtom() const { return anomeric_atom_; } int AnomericRefAtom() const { return ano_ref_atom_; } - int RingEndAtom() const { return ring_end_atom_; } int HighestStereocenter() const { return highest_stereocenter_; } + AnomerType Anomer() const { return anomer_; } typedef std::vector::const_iterator const_iterator; const_iterator ringbegin() const { return ring_atoms_.begin(); } const_iterator ringend() const { return ring_atoms_.end(); } - bool AtomIsChiral(int idx) const { return atomIsChiral_[idx]; } - bool NotSet() const { return (ring_oxygen_atom_ == -1); } /// \return Number of ring atoms unsigned int NumRingAtoms() const; @@ -135,9 +134,8 @@ class Exec_PrepareForLeap::Sugar { int ring_oxygen_atom_; ///< Index of the ring oxygen atom int anomeric_atom_; ///< Index of the anomeric C atom (ring start) int ano_ref_atom_; ///< Index of the anomeric reference C atom - int ring_end_atom_; ///< Index of the ring end atom int highest_stereocenter_; ///< Index of the highest stereocenter in the carbon chain + AnomerType anomer_; ///< Anomeric form std::vector ring_atoms_; ///< Index of all non-oxygen ring atoms - std::vector atomIsChiral_; ///< For each sugar residue atom, whether it is chiral or not. }; #endif From c92b928d39d0089d8be0ecb473f37ffe1289c73e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 10:58:28 -0400 Subject: [PATCH 139/368] Remove need for IsRingAtom array --- src/Exec_PrepareForLeap.cpp | 23 ++++++++++++----------- src/Exec_PrepareForLeap.h | 3 +-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 412cd725a7..1873398290 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -525,16 +525,24 @@ static void Find_Carbons(int atm, Topology const& topIn, std::vector& Visi } } +static inline bool IsRingAtom(std::vector const& RingAtoms, int tgt) +{ + for (std::vector::const_iterator it = RingAtoms.begin(); it != RingAtoms.end(); ++it) + if (*it == tgt) return true; + return false; +} + + /** Find remaining non-ring carbons in chain starting from ring end atom. */ -int Exec_PrepareForLeap::FindRemainingChainCarbons(std::vector& remainingChainCarbons, +int Exec_PrepareForLeap::FindRemainingChainCarbons(Iarray& remainingChainCarbons, int start_c, Topology const& topIn, int rnum, - std::vector const& IsRingAtom) + Iarray const& RingAtoms) const { Residue const& res = topIn.Res(rnum); std::vector Visited(topIn.Natom(), true); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - if (!IsRingAtom[at]) + if (!IsRingAtom(RingAtoms, at)) Visited[at] = false; for (Atom::bond_iterator bat = topIn[start_c].bondbegin(); @@ -631,13 +639,6 @@ const return 0; } -static inline bool IsRingAtom(std::vector const& RingAtoms, int tgt) -{ - for (std::vector::const_iterator it = RingAtoms.begin(); it != RingAtoms.end(); ++it) - if (*it == tgt) return true; - return false; -} - /** Determine torsion around the anomeric carbon. */ int Exec_PrepareForLeap::CalcAnomericTorsion(double& torsion, int anomeric_atom, int ring_oxygen_atom, @@ -1161,7 +1162,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // Get complete chain Iarray carbon_chain = RA; - if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, IsRingAtom)) { + if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, RA)) { mprinterr("Error: Could not find remaining chain carbons.\n"); err = 1; return Sugar(rnum); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 6d61a2d519..9cbb11932d 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -37,8 +37,7 @@ class Exec_PrepareForLeap : public Exec { int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; int CalcAnomericRefTorsion(double&, int, int, Topology const&, Frame const&, std::vector const&) const; int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; - int FindRemainingChainCarbons(std::vector&, int, Topology const&, int, - std::vector const&) const; + int FindRemainingChainCarbons(Iarray&, int, Topology const&, int, Iarray const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; /// Determine orientation around anomeric carbon int CalcAnomericTorsion(double&, int, int, int, Iarray const&, From 7bab85ad349e2320c888249f1a52220ef0256726 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 10:59:08 -0400 Subject: [PATCH 140/368] Do not create IsRingAtom array --- src/Exec_PrepareForLeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1873398290..88e1d4d5a6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1105,12 +1105,12 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\n"); // DEBUG - // Create an array with all ring atoms set to true +/* // Create an array with all ring atoms set to true std::vector IsRingAtom; IsRingAtom.assign( topIn.Natom(), false ); IsRingAtom[ring_oxygen_atom] = true; for (Iarray::const_iterator it = RA.begin(); it != RA.end(); ++it) - IsRingAtom[ *it ] = true; + IsRingAtom[ *it ] = true;*/ // For determining orientation around anomeric carbon need ring // oxygen atom and next carbon in the ring. double t_an; From 52e6af39623d52de1c710b27a9b39701beb3d4d8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 12:42:08 -0400 Subject: [PATCH 141/368] Put all geometric calculation into IdentifySugar --- src/Exec_PrepareForLeap.cpp | 152 +++++++++++++++++++++++------------- src/Exec_PrepareForLeap.h | 20 +++-- 2 files changed, 109 insertions(+), 63 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 88e1d4d5a6..fea31ee640 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -17,18 +17,16 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn) : ring_oxygen_atom_(-1), anomeric_atom_(-1), ano_ref_atom_(-1), - highest_stereocenter_(-1), - anomer_(ALPHA) + highest_stereocenter_(-1) {} -Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, AnomerType anomer, +Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, std::vector const& RA) : rnum_(rn), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), highest_stereocenter_(hs), - anomer_(anomer), ring_atoms_(RA) {} @@ -45,8 +43,6 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { for (std::vector::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); mprintf("\n"); - static const char* AnomerStr[] = { "Alpha", "Beta" }; - mprintf("\t\tForm : %s\n", AnomerStr[anomer_]); } } @@ -755,7 +751,7 @@ const ano_ref_atom_1 = RingAtoms[ar_index+1]; } //if (debug_ > 0) - mprintf("\t Anomeric reference next atom : %s\n", + mprintf("\t Anomeric reference next atom : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_1).c_str()); // Get non-hydrogen substituent of anomeric ref (e.g. C5) that // is not part of the ring (e.g. C6). @@ -1034,8 +1030,6 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c int ring_oxygen_atom = -1; // e.g. O5 // This will hold the index of the highest stereocenter, e.g. C5 int highest_stereocenter = -1; - // Hold the anomer - Sugar::AnomerType anomer = Sugar::ALPHA; // This will hold ring atoms, not including the ring oxygen. std::vector RA; for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); @@ -1111,17 +1105,6 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c IsRingAtom[ring_oxygen_atom] = true; for (Iarray::const_iterator it = RA.begin(); it != RA.end(); ++it) IsRingAtom[ *it ] = true;*/ - // For determining orientation around anomeric carbon need ring - // oxygen atom and next carbon in the ring. - double t_an; -// ChiralRetType ac_chirality = CalcChiralAtomTorsion(t_an, anomeric_atom, topIn, frameIn); -// static const char* chiralStr[] = {0, "S", "R"}; -// mprintf("DEBUG: Based on t_an %s chirality is %s\n", -// topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ac_chirality]); - CalcAnomericTorsion(t_an, anomeric_atom, ring_oxygen_atom, rnum, - RA, topIn, frameIn); - mprintf("DEBUG: t_an= %f\n", t_an * Constants::RADDEG); - bool t_an_up = (t_an > 0); // Find anomeric reference atom. Start at ring end and work down to anomeric atom for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) @@ -1129,36 +1112,6 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c ano_ref_atom = *arat; break; } - // For determining orientation around anomeric reference carbon need - // previous carbon in the chain and either next carbon or ring oxygen. - double t_ar; -// ChiralRetType ar_chirality = CalcChiralAtomTorsion(t_ar, ano_ref_atom, topIn, frameIn); -// mprintf("DEBUG: Based on t_ar %s chirality is %s\n", -// topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ar_chirality]); - CalcAnomericRefTorsion(t_ar, ano_ref_atom, ring_oxygen_atom, ring_end_atom, - RA, topIn, frameIn); - mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); - bool t_ar_up = (t_ar > 0); - - if (ano_ref_atom == ring_end_atom) { - // Anomeric reference is the ring end, same side is beta, opposite is alpha. - if (t_an_up == t_ar_up) { - anomer = Sugar::BETA; - mprintf("DEBUG: Form is Beta\n"); - } else { - anomer = Sugar::ALPHA; - mprintf("DEBUG: Form is Alpha\n"); - } - } else { - // Anomeric reference isnt the ring end, definition is reversed. - if (t_an_up != t_ar_up) { - anomer = Sugar::BETA; - mprintf("DEBUG: Form is Beta\n"); - } else { - anomer = Sugar::ALPHA; - mprintf("DEBUG: Form is Alpha\n"); - } - } // Get complete chain Iarray carbon_chain = RA; @@ -1177,6 +1130,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } mprintf("DEBUG: Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); + } // END ring_complete } if (RA.empty() || ring_oxygen_atom == -1) { @@ -1186,8 +1140,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, - highest_stereocenter, anomer, RA); + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, highest_stereocenter, RA); } /** Change PDB atom names in residue to glycam ones. */ @@ -1212,6 +1165,68 @@ const return 0; } +/** Determine anomeric form of the sugar. */ +Exec_PrepareForLeap::AnomerRetType + Exec_PrepareForLeap::DetermineAnomericForm(Sugar const& sugar, + Topology const& topIn, Frame const& frameIn) +const +{ + // For determining orientation around anomeric carbon need ring + // oxygen atom and next carbon in the ring. + double t_an; +// ChiralRetType ac_chirality = CalcChiralAtomTorsion(t_an, anomeric_atom, topIn, frameIn); +// mprintf("DEBUG: Based on t_an %s chirality is %s\n", +// topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ac_chirality]); + int ret = CalcAnomericTorsion(t_an, sugar.AnomericAtom(), sugar.RingOxygenAtom(), sugar.ResNum(), + sugar.RingAtoms(), topIn, frameIn); + if (ret < 0) { + // This means C1 X substituent missing; non-fatal. + return A_WARNING; + } else if (ret > 0) { + // Error + return A_ERR; + } + + mprintf("DEBUG: t_an= %f\n", t_an * Constants::RADDEG); + bool t_an_up = (t_an > 0); + + // For determining orientation around anomeric reference carbon need + // previous carbon in the chain and either next carbon or ring oxygen. + double t_ar; +// ChiralRetType ar_chirality = CalcChiralAtomTorsion(t_ar, ano_ref_atom, topIn, frameIn); +// mprintf("DEBUG: Based on t_ar %s chirality is %s\n", +// topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ar_chirality]); + if (CalcAnomericRefTorsion(t_ar, sugar.AnomericRefAtom(), sugar.RingOxygenAtom(), sugar.RingEndAtom(), + sugar.RingAtoms(), topIn, frameIn)) + { + return A_ERR; + } + mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); + bool t_ar_up = (t_ar > 0); + + AnomerRetType form; + if (sugar.AnomericRefAtom() == sugar.RingEndAtom()) { + // Anomeric reference is the ring end, same side is beta, opposite is alpha. + if (t_an_up == t_ar_up) { + form = IS_BETA; + mprintf("DEBUG: Form is Beta\n"); + } else { + form = IS_ALPHA; + mprintf("DEBUG: Form is Alpha\n"); + } + } else { + // Anomeric reference isnt the ring end, definition is reversed. + if (t_an_up != t_ar_up) { + form = IS_BETA; + mprintf("DEBUG: Form is Beta\n"); + } else { + form = IS_ALPHA; + mprintf("DEBUG: Form is Alpha\n"); + } + } + return form; +} + /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, Frame const& frameIn, CharMask const& cmask, @@ -1244,7 +1259,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); return 1; } - +/* // Create an array with all ring atoms set to true std::vector IsRingAtom; IsRingAtom.assign( topIn.Natom(), false ); @@ -1284,7 +1299,19 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, } else { mprintf("\t Alpha form\n"); formStr = "A"; - } + }*/ + AnomerRetType form = DetermineAnomericForm(sugar, topIn, frameIn); + std::string formStr; + if (form == IS_ALPHA) + formStr = "A"; + else if (form == IS_BETA) + formStr = "B"; + else if (form == A_WARNING) { + // Sugar missing C1-X substituent, non-fatal + resStat_[rnum] = SUGAR_MISSING_C1X; + return 0; + } else + return 1; // Find the rest of the carbons in the chain in order to find the // stereocenter with the highest index. Start from final ring carbon. @@ -1329,6 +1356,21 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, */ mprintf("\t Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); // Determine D/L + double t_sc; + ChiralRetType sc_chirality = CalcChiralAtomTorsion(t_sc, highest_stereocenter, topIn, frameIn); + static const char* chiralStr[] = {0, "S", "R"}; + mprintf("DEBUG: Based on t_sc %s chirality is %s\n", + topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[sc_chirality]); + if (sc_chirality == ERR) { + mprinterr("Error: Could not determine chirality around stereocenter.\n"); + return 1; + } + bool isDform; + if (sc_chirality == IS_R) + isDform = true; + else + isDform = false; +/* bool isDform; if (highest_stereocenter != sugar.AnomericRefAtom()) { double stereo_t = 0; @@ -1337,7 +1379,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, isDform = (stereo_t > 0); } else { isDform = c5up; - } + }*/ if (isDform) { mprintf("\t D form\n"); } else { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 9cbb11932d..c71e2ada2d 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -55,6 +55,12 @@ class Exec_PrepareForLeap : public Exec { Sugar IdSugarRing(int, Topology const&, Frame const&, int&); int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; + + /// Return type for DetermineAnomericForm + enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; + /// \return Anomeric form of the sugar + AnomerRetType DetermineAnomericForm(Sugar const&, Topology const&, Frame const&) const; + int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; @@ -110,19 +116,18 @@ class Exec_PrepareForLeap : public Exec { class Exec_PrepareForLeap::Sugar { public: Sugar(int); - enum AnomerType { ALPHA = 0, BETA }; - Sugar(int,int,int,int,int,AnomerType,std::vector const&); + Sugar(int,int,int,int,int,std::vector const&); int ResNum() const { return rnum_; } int RingOxygenAtom() const { return ring_oxygen_atom_; } int AnomericAtom() const { return anomeric_atom_; } int AnomericRefAtom() const { return ano_ref_atom_; } int HighestStereocenter() const { return highest_stereocenter_; } - AnomerType Anomer() const { return anomer_; } - - typedef std::vector::const_iterator const_iterator; - const_iterator ringbegin() const { return ring_atoms_.begin(); } - const_iterator ringend() const { return ring_atoms_.end(); } + Iarray const& RingAtoms() const { return ring_atoms_; } + int RingEndAtom() const { return ring_atoms_.back(); } +// typedef std::vector::const_iterator const_iterator; +// const_iterator ringbegin() const { return ring_atoms_.begin(); } +// const_iterator ringend() const { return ring_atoms_.end(); } bool NotSet() const { return (ring_oxygen_atom_ == -1); } /// \return Number of ring atoms @@ -134,7 +139,6 @@ class Exec_PrepareForLeap::Sugar { int anomeric_atom_; ///< Index of the anomeric C atom (ring start) int ano_ref_atom_; ///< Index of the anomeric reference C atom int highest_stereocenter_; ///< Index of the highest stereocenter in the carbon chain - AnomerType anomer_; ///< Anomeric form std::vector ring_atoms_; ///< Index of all non-oxygen ring atoms }; #endif From 3b1afc4168f01c318bae4ac2cb947f656d7c4cc7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 12:44:01 -0400 Subject: [PATCH 142/368] IdSugarRing no longer needs Frame --- src/Exec_PrepareForLeap.cpp | 5 ++--- src/Exec_PrepareForLeap.h | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index fea31ee640..95bbba1b21 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -931,8 +931,7 @@ const } /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ -Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, - Frame const& frameIn, int& err) +Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, int& err) { err = 0; Residue const& res = topIn.Res(rnum); @@ -1487,7 +1486,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, rnum != sugarResNums.end(); ++rnum) { int err = 0; - Sugars.push_back( IdSugarRing(*rnum, topIn, frameIn, err) ); + Sugars.push_back( IdSugarRing(*rnum, topIn, err) ); if (err != 0) { if (errorsAreFatal_) { mprinterr("Error: Problem identifying sugar ring for %s\n", diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c71e2ada2d..7ab81a1c93 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -52,8 +52,8 @@ class Exec_PrepareForLeap : public Exec { enum ChiralRetType { ERR = 0, IS_S, IS_R }; ChiralRetType CalcChiralAtomTorsion(double&, int, Topology const&, Frame const&) const; - - Sugar IdSugarRing(int, Topology const&, Frame const&, int&); + /// \return Sugar with atom indices set up + Sugar IdSugarRing(int, Topology const&, int&); int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; /// Return type for DetermineAnomericForm From 623842a422e64651b247a4790fa7f3135b04a47e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 13:13:03 -0400 Subject: [PATCH 143/368] Remove some old routines. Go back to the old way of determining stereochemistry. --- src/Exec_PrepareForLeap.cpp | 264 ++++-------------------------------- src/Exec_PrepareForLeap.h | 4 +- 2 files changed, 28 insertions(+), 240 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 95bbba1b21..6971f2f07f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -376,136 +376,6 @@ const return 0; } - -/** Determine torsion around anomeric reference carbon. */ -int Exec_PrepareForLeap::CalcAnomericRefTorsion(double& torsion, - int ano_ref_atom, int ring_oxygen_atom, - Topology const& topIn, Frame const& frameIn, - std::vector const& IsRingAtom) -const -{ - int ano_ref_atom_Y = -1; - int ano_ref_atom_C = -1; - // Get substituent of last ring C (e.g. C5) that is not part of the ring (e.g. C6) - // Get substituent of last ring C (e.g. C5) that is part of the ring (e.g. C4) - for ( Atom::bond_iterator bat = topIn[ano_ref_atom].bondbegin(); - bat != topIn[ano_ref_atom].bondend(); - ++bat ) - { - if ( topIn[*bat].Element() == Atom::CARBON && !IsRingAtom[*bat] ) { - if (ano_ref_atom_Y != -1) { - mprinterr("Error: Two potential substituents for anomeric ref: %s and %s\n", - topIn.ResNameNumAtomNameNum(*bat).c_str(), - topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); - return 1; - } - ano_ref_atom_Y = *bat; - } else if ( topIn[*bat].Element() == Atom::CARBON && IsRingAtom[*bat] ) { - if (ano_ref_atom_C != -1) { - mprinterr("Error: Two potential ring atoms bonded to anomeric ref: %s and %s\n", - topIn.ResNameNumAtomNameNum(*bat).c_str(), - topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); - return 1; - } - ano_ref_atom_C = *bat; - } - } - if (debug_ > 0) - mprintf("\t Anomeric ref carbon : %s\n", - topIn.ResNameNumAtomNameNum(ano_ref_atom).c_str()); - if (ano_ref_atom_Y == -1) { - mprinterr("Error: Anomeric reference Y substituent could not be identified.\n"); - return 1; - } - if (debug_ > 0) - mprintf("\t Anomeric reference substituent : %s\n", - topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); - if (ano_ref_atom_C == -1) { - mprinterr("Error: Anomeric reference ring C previous ring atom could not be identified.\n"); - return 1; - } - if (debug_ > 0) - mprintf("\t Anomeric reference previous ring atom : %s\n", - topIn.ResNameNumAtomNameNum(ano_ref_atom_C).c_str()); - torsion = Torsion( frameIn.XYZ(ano_ref_atom_C), frameIn.XYZ(ano_ref_atom), - frameIn.XYZ(ano_ref_atom_Y), frameIn.XYZ(ring_oxygen_atom) ); - if (debug_ > 0) - mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); - return 0; -} - -/** Determine torsion around the anomeric carbon. */ -int Exec_PrepareForLeap::CalcAnomericTorsion(double& torsion, - int ring_oxygen_atom, int anomeric_atom, - int rnum, - Topology const& topIn, Frame const& frameIn, - std::vector const& IsRingAtom) -const -{ - int anomeric_atom_X = -1; - int anomeric_atom_C = -1; - // Get the substituent of first ring C (e.g. C1) that is to a non-ring atom, non hydrogen - // Get the substituent of first ring C (e.g. C1) that is part of the ring (e.g. C2) - for ( Atom::bond_iterator bat = topIn[anomeric_atom].bondbegin(); - bat != topIn[anomeric_atom].bondend(); - ++bat ) - { - if ( topIn[*bat].Element() != Atom::HYDROGEN && !IsRingAtom[*bat] ) { - if (anomeric_atom_X != -1) { - // If there are two non-ring, non-hydrogen substituents, prioritize - // the one that is part of this residue. - bool bat_in_res = (topIn[*bat].ResNum() == rnum); - bool X_in_res = (topIn[anomeric_atom_X].ResNum() == rnum); - if ( (bat_in_res && X_in_res) || (!bat_in_res && !X_in_res) ) { - mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", - topIn.ResNameNumAtomNameNum(*bat).c_str(), - topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); - return 1; - } else if (bat_in_res) { - anomeric_atom_X = *bat; - } - } else - anomeric_atom_X = *bat; - } else if ( topIn[*bat].Element() == Atom::CARBON && IsRingAtom[*bat] ) { - if (anomeric_atom_C != -1) { - mprinterr("Error: Two potential ring carbons bonded to anomeric carbon: %s and %s\n", - topIn.ResNameNumAtomNameNum(*bat).c_str(), - topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); - return 1; - } - anomeric_atom_C = *bat; - } - } - if (debug_ > 0) - mprintf("\t Anomeric carbon : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom).c_str()); - if (anomeric_atom_X == -1) { - // If the Cx (C1 substituent, usually a different residue) index is - // not found this usually means missing inter-residue bond. - // Alternatively, this could be an isolated sugar missing an -OH - // group, so make this non-fatal. - mprintf("Warning: Anomeric C non-ring substituent could not be identified.\n" - "Warning: This can happen if the sugar is bonded to something that\n" - "Warning: is missing, e.g. a -OH group. In that case the coordinates\n" - "Warning for the missing atoms may need to be generated.\n"); - return -1; - } - if (debug_ > 0) - mprintf("\t Anomeric X substituent : %s\n", - topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); - if (anomeric_atom_C == -1) { - mprinterr("Error: Next ring atom after anomeric C could not be identified.\n"); - return 1; - } - if (debug_ > 0) - mprintf("\t Anomeric C ring substituent : %s\n", - topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); - torsion = Torsion( frameIn.XYZ(anomeric_atom_X), frameIn.XYZ(anomeric_atom), - frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(ring_oxygen_atom) ); - if (debug_ > 0) - mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); - return 0; -} - /// Recursive function for finding and recording all carbons static void Find_Carbons(int atm, Topology const& topIn, std::vector& Visited, std::vector& remainingChainCarbons) @@ -1098,13 +968,6 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\n"); // DEBUG -/* // Create an array with all ring atoms set to true - std::vector IsRingAtom; - IsRingAtom.assign( topIn.Natom(), false ); - IsRingAtom[ring_oxygen_atom] = true; - for (Iarray::const_iterator it = RA.begin(); it != RA.end(); ++it) - IsRingAtom[ *it ] = true;*/ - // Find anomeric reference atom. Start at ring end and work down to anomeric atom for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) if (atomIsChiral[*arat - topIn.Res(rnum).FirstAtom()]) { @@ -1166,10 +1029,11 @@ const /** Determine anomeric form of the sugar. */ Exec_PrepareForLeap::AnomerRetType - Exec_PrepareForLeap::DetermineAnomericForm(Sugar const& sugar, + Exec_PrepareForLeap::DetermineAnomericForm(bool& isDform, Sugar const& sugar, Topology const& topIn, Frame const& frameIn) const { + isDform = true; // For determining orientation around anomeric carbon need ring // oxygen atom and next carbon in the ring. double t_an; @@ -1206,23 +1070,33 @@ const AnomerRetType form; if (sugar.AnomericRefAtom() == sugar.RingEndAtom()) { // Anomeric reference is the ring end, same side is beta, opposite is alpha. + isDform = !t_ar_up; if (t_an_up == t_ar_up) { form = IS_BETA; - mprintf("DEBUG: Form is Beta\n"); + //mprintf("DEBUG: Form is Beta\n"); } else { form = IS_ALPHA; - mprintf("DEBUG: Form is Alpha\n"); + //mprintf("DEBUG: Form is Alpha\n"); } } else { // Anomeric reference isnt the ring end, definition is reversed. + isDform = t_ar_up; if (t_an_up != t_ar_up) { form = IS_BETA; - mprintf("DEBUG: Form is Beta\n"); + //mprintf("DEBUG: Form is Beta\n"); } else { form = IS_ALPHA; - mprintf("DEBUG: Form is Alpha\n"); + //mprintf("DEBUG: Form is Alpha\n"); } } + + if (sugar.HighestStereocenter() != sugar.AnomericRefAtom()) { + double stereo_t = 0; + if (CalcStereocenterTorsion(stereo_t, sugar.HighestStereocenter(), topIn, frameIn)) + return A_ERR; + isDform = (stereo_t > 0); + } + return form; } @@ -1258,48 +1132,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); return 1; } -/* - // Create an array with all ring atoms set to true - std::vector IsRingAtom; - IsRingAtom.assign( topIn.Natom(), false ); - IsRingAtom[sugar.RingOxygenAtom()] = true; - for (Sugar::const_iterator it = sugar.ringbegin(); it != sugar.ringend(); ++it) - IsRingAtom[ *it ] = true; - - double t_c1 = 0; - double t_c5 = 0; - - // Calculate torsion around anomeric carbon: - int ret = CalcAnomericTorsion(t_c1, sugar.RingOxygenAtom(), sugar.AnomericAtom(), - rnum, topIn, frameIn, IsRingAtom); - if (ret < 0) { - // This means C1 X substituent missing; non-fatal. - resStat_[rnum] = SUGAR_MISSING_C1X; - return 0; - } else if (ret > 0) { - // Error - return 1; - } - mprintf("DEBUG: c1up= %i\n", (int)(t_c1 > 0)); - - // Calculate torsion around anomeric reference: - if (CalcAnomericRefTorsion(t_c5, sugar.AnomericRefAtom(), sugar.RingOxygenAtom(), - topIn, frameIn, IsRingAtom)) - return 1; - // Determine alpha/beta - std::string formStr; - bool c5up = (t_c5 > 0); - bool c1up = (t_c1 > 0); - mprintf("DEBUG: c5up= %i\n", (int)c5up); - if (c1up == c5up) { - mprintf("\t Beta form\n"); - formStr = "B"; - } else { - mprintf("\t Alpha form\n"); - formStr = "A"; - }*/ - AnomerRetType form = DetermineAnomericForm(sugar, topIn, frameIn); + // Determine alpha or beta and D or L + bool isDform; + AnomerRetType form = DetermineAnomericForm(isDform, sugar, topIn, frameIn); std::string formStr; if (form == IS_ALPHA) formStr = "A"; @@ -1314,48 +1150,11 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, // Find the rest of the carbons in the chain in order to find the // stereocenter with the highest index. Start from final ring carbon. - int highest_stereocenter = sugar.HighestStereocenter(); -/* std::vector remainingChainCarbons; - if (FindRemainingChainCarbons(remainingChainCarbons, sugar.RingEndAtom(), - topIn, rnum, IsRingAtom)) - return 1; - if (debug_ > 0) mprintf("\t Remaining chain carbons:\n"); - for (std::vector::const_iterator it = remainingChainCarbons.begin(); - it != remainingChainCarbons.end(); - ++it) - { - if (debug_ > 0) mprintf("\t\t%s", topIn.ResNameNumAtomNameNum(*it).c_str()); - //mprintf("DEBUG: '%s' isChiral= %i\n", topIn.ResNameNumAtomNameNum(*it).c_str(), - // (int)myMap[*it - topIn.Res(rnum).FirstAtom()].IsChiral()); - if (sugar.AtomIsChiral(*it - topIn.Res(rnum).FirstAtom())) { - if (debug_ > 0) mprintf(" Potential stereocenter"); - // TODO Is absolute index the best way to do this? - if (*it > highest_stereocenter) - highest_stereocenter = *it; - } -* // Count number of bonds to heavy atoms. - Atom const& currentAtom = topIn[*it]; - int n_heavyat_bonds = 0; - for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) - { - if ( topIn[*bat].Element() != Atom::HYDROGEN ) - ++n_heavyat_bonds; - } - if (n_heavyat_bonds == 3) { - if (debug_ > 0) mprintf(" Potential stereocenter"); - if (*it > highest_stereocenter) // Is absolute index the best way to do this? - highest_stereocenter = *it; - }* - if (debug_ > 0) mprintf("\n"); - } // END loop over remaining chain carbons - if (highest_stereocenter == -1) { - // This means that ano_ref_atom is the highest stereocenter. - highest_stereocenter = sugar.AnomericRefAtom(); - } -*/ - mprintf("\t Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); + //int highest_stereocenter = sugar.HighestStereocenter(); + + //mprintf("\t Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); // Determine D/L - double t_sc; +/* double t_sc; ChiralRetType sc_chirality = CalcChiralAtomTorsion(t_sc, highest_stereocenter, topIn, frameIn); static const char* chiralStr[] = {0, "S", "R"}; mprintf("DEBUG: Based on t_sc %s chirality is %s\n", @@ -1368,21 +1167,12 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, if (sc_chirality == IS_R) isDform = true; else - isDform = false; -/* - bool isDform; - if (highest_stereocenter != sugar.AnomericRefAtom()) { - double stereo_t = 0; - if (CalcStereocenterTorsion(stereo_t, highest_stereocenter, topIn, frameIn)) - return 1; - isDform = (stereo_t > 0); - } else { - isDform = c5up; - }*/ + isDform = false;*/ + if (isDform) { - mprintf("\t D form\n"); + mprintf("\t Form is %s-D\n", formStr.c_str()); } else { - mprintf("\t L form\n"); + mprintf("\t Form is %s-L\n", formStr.c_str()); } // Identify linkages to other residues. diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 7ab81a1c93..73cae1dd99 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -35,8 +35,6 @@ class Exec_PrepareForLeap : public Exec { void LeapBond(int,int,Topology const&, CpptrajFile*) const; int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; - int CalcAnomericRefTorsion(double&, int, int, Topology const&, Frame const&, std::vector const&) const; - int CalcAnomericTorsion(double&, int, int, int, Topology const&, Frame const&, std::vector const&) const; int FindRemainingChainCarbons(Iarray&, int, Topology const&, int, Iarray const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; /// Determine orientation around anomeric carbon @@ -59,7 +57,7 @@ class Exec_PrepareForLeap : public Exec { /// Return type for DetermineAnomericForm enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; /// \return Anomeric form of the sugar - AnomerRetType DetermineAnomericForm(Sugar const&, Topology const&, Frame const&) const; + AnomerRetType DetermineAnomericForm(bool&, Sugar const&, Topology const&, Frame const&) const; int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); From 17a4c64c18663ab906fc9752e5cf64746d447460 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 13:16:45 -0400 Subject: [PATCH 144/368] Save sugar name to avoid constantly calling function to generate it --- src/Exec_PrepareForLeap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6971f2f07f..cd75ba4365 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1105,9 +1105,9 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, Frame const& frameIn, CharMask const& cmask, CpptrajFile* outfile, std::set& sugarBondsToRemove) { + const std::string sugarName = topIn.TruncResNameOnumId(sugar.ResNum()); if (sugar.NotSet()) { - mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", - topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); + mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", sugarName.c_str()); return 0; // TODO return 1? } @@ -1123,7 +1123,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, } resChar = pdb_glycam->second; - mprintf("\tSugar %s glycam name: %c\n", topIn.TruncResNameOnumId(rnum).c_str(), resChar); + mprintf("\tSugar %s glycam name: %c\n", sugarName.c_str(), resChar); if (debug_ > 0) mprintf("DEBUG:\tOriginal #= %i chain %c\n", res.OriginalResNum(), res.ChainId()); @@ -1170,9 +1170,9 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, isDform = false;*/ if (isDform) { - mprintf("\t Form is %s-D\n", formStr.c_str()); + mprintf("\t %s Form is %s-D\n", sugarName.c_str(), formStr.c_str()); } else { - mprintf("\t Form is %s-L\n", formStr.c_str()); + mprintf("\t %s Form is %s-L\n", sugarName.c_str(), formStr.c_str()); } // Identify linkages to other residues. From a699f3108f343e7a26830b123635021297f7bf40 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 8 Oct 2021 13:35:11 -0400 Subject: [PATCH 145/368] Hide some debug info. Report configurational carbon (highest stereocenter) --- src/Exec_PrepareForLeap.cpp | 57 ++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index cd75ba4365..3e8526cdad 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -38,6 +38,7 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); + mprintf("\t\tConfig. C : %s\n", topIn.TruncAtomNameNum(highest_stereocenter_).c_str()); mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); mprintf("\t\tNon-O Ring atoms :"); for (std::vector::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) @@ -513,10 +514,10 @@ int Exec_PrepareForLeap::CalcAnomericTorsion(double& torsion, Topology const& topIn, Frame const& frameIn) const { - //if (debug_ > 0) { + if (debug_ > 0) { mprintf("\t Anomeric carbon : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom).c_str()); mprintf("\t Ring oxygen atom : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - //} + } int anomeric_atom_X = -1; int anomeric_atom_C = -1; // By definition the anomeric atom should be the first ring atom TODO catch size==1? @@ -525,7 +526,7 @@ const mprinterr("Error: Next ring atom after anomeric C could not be identified.\n"); return 1; } - //if (debug_ > 0) + if (debug_ > 0) mprintf("\t Anomeric C ring substituent : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom_C).c_str()); // Get the substituent of the anomeric C (e.g. C1) that is a non-ring atom, non hydrogen @@ -566,7 +567,7 @@ const "Warning for the missing atoms may need to be generated.\n"); return -1; } - //if (debug_ > 0) + if (debug_ > 0) mprintf("\t Anomeric X substituent : %s\n", topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); @@ -584,7 +585,7 @@ int Exec_PrepareForLeap::CalcAnomericRefTorsion(double& torsion, Topology const& topIn, Frame const& frameIn) const { - //if (debug_ > 0) + if (debug_ > 0) mprintf("\t Anomeric ref carbon : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom).c_str()); // ano_ref_atom_Y @@ -609,7 +610,7 @@ const mprinterr("Error: Anomeric reference ring C previous ring atom could not be identified.\n"); return 1; } - //if (debug_ > 0) + if (debug_ > 0) mprintf("\t Anomeric reference previous ring atom : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_0).c_str()); // If the anomeric reference atom is the ring end atom then ano_ref_atom_1 @@ -620,7 +621,7 @@ const // Anomeric reference atom is somewhere before the ring end atom. ano_ref_atom_1 = RingAtoms[ar_index+1]; } - //if (debug_ > 0) + if (debug_ > 0) mprintf("\t Anomeric reference next atom : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_1).c_str()); // Get non-hydrogen substituent of anomeric ref (e.g. C5) that @@ -646,11 +647,10 @@ const mprinterr("Error: Anomeric reference Y substituent could not be identified.\n"); return 1; } - //if (debug_ > 0) + if (debug_ > 0) mprintf("\t Anomeric reference substituent : %s\n", topIn.ResNameNumAtomNameNum(ano_ref_atom_Y).c_str()); - torsion = Torsion( frameIn.XYZ(ano_ref_atom_0), frameIn.XYZ(ano_ref_atom), frameIn.XYZ(ano_ref_atom_1), frameIn.XYZ(ano_ref_atom_Y) ); if (debug_ > 0) @@ -854,7 +854,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c { bool chiral = false; if (topIn[resat].Element() == Atom::CARBON && topIn[resat].Nbonds() > 2) { - mprintf("DEBUG: Atom '%s' potential chiral\n", topIn.TruncResAtomNameNum(resat).c_str()); + if (debug_ > 0) + mprintf("DEBUG: Atom '%s' potential chiral\n", topIn.TruncResAtomNameNum(resat).c_str()); chiral = true; for (Atom::bond_iterator bat1 = topIn[resat].bondbegin(); bat1 != topIn[resat].bondend(); ++bat1) @@ -865,7 +866,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c std::string unique2 = myMap_[*bat2].Unique(); if (unique1 == unique2) { // At least two of the atoms bonded to this atom look the same. Not chiral. - mprintf("DEBUG: unique strings match '%s' '%s'\n", unique1.c_str(), unique2.c_str()); + if (debug_ > 1) + mprintf("DEBUG: unique strings match '%s' '%s'\n", unique1.c_str(), unique2.c_str()); chiral = false; break; } @@ -875,15 +877,16 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } // END atom is carbon with > 2 bonds atomIsChiral.push_back( chiral ); - mprintf("DEBUG: Atom '%s' isChiral= %i\n", - topIn.TruncResAtomNameNum(resat).c_str(), - (int)atomIsChiral.back()); + if (debug_ > 0) + mprintf("DEBUG: Atom '%s' isChiral= %i\n", + topIn.TruncResAtomNameNum(resat).c_str(), + (int)atomIsChiral.back()); } // Using the potential ring start atoms, see if we can actually complete // a ring. Identify important atoms as well. // This will indicate ring direction - int ring_direction = 0; +// int ring_direction = 0; // Ring end atom is the last atom in the ring int ring_end_atom = -1; // The anomeric carbon is the carbon that was part of the carbonyl group @@ -940,13 +943,13 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c if (c_beg_bonds_to_C <= c_end_bonds_to_C) { anomeric_atom = c_beg; ring_end_atom = c_end; - ring_direction = 1; +// ring_direction = 1; } else { anomeric_atom = c_end; ring_end_atom = c_beg; - ring_direction = -1; +// ring_direction = -1; } - mprintf("DEBUG: Potential Ring direction= %i\n", ring_direction); +// mprintf("DEBUG: Potential Ring direction= %i\n", ring_direction); FollowBonds(anomeric_atom, topIn, 0, ring_atoms, ring_end_atom, Visited, ring_complete); @@ -982,16 +985,20 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c err = 1; return Sugar(rnum); } + if (debug_ > 0) { + mprintf("DEBUG: Complete carbon chain:\n"); + for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + } // Get the index of the highest stereocenter - mprintf("DEBUG: Complete carbon chain:\n"); for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) { - mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); if (atomIsChiral[*it - topIn.Res(rnum).FirstAtom()]) highest_stereocenter = *it; } - mprintf("DEBUG: Highest stereocenter: %s\n", - topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); + if (debug_ > 0) + mprintf("DEBUG: Index of highest stereocenter: %s\n", + topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); } // END ring_complete } @@ -1049,8 +1056,6 @@ const // Error return A_ERR; } - - mprintf("DEBUG: t_an= %f\n", t_an * Constants::RADDEG); bool t_an_up = (t_an > 0); // For determining orientation around anomeric reference carbon need @@ -1064,7 +1069,6 @@ const { return A_ERR; } - mprintf("DEBUG: t_ar= %f\n", t_ar * Constants::RADDEG); bool t_ar_up = (t_ar > 0); AnomerRetType form; @@ -1198,7 +1202,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); NameMapType::const_iterator lname = pdb_glycam_linkageRes_map_.find( pres.Name() ); if (lname != pdb_glycam_linkageRes_map_.end()) { - mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); + if (debug_ > 0) + mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); ChangeResName( pres, lname->second ); resStat_[topIn[*bat].ResNum()] = VALIDATED; } else { From f6d4f6b9e3d74299041efc190bf585cc84edcd58 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 11:14:53 -0400 Subject: [PATCH 146/368] Add placeholder characters to MapAtom for less common elements --- src/MapAtom.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/MapAtom.cpp b/src/MapAtom.cpp index 6c2bae443c..9b8703ca65 100644 --- a/src/MapAtom.cpp +++ b/src/MapAtom.cpp @@ -1,20 +1,24 @@ #include "MapAtom.h" -// TODO: Just set the char to whatever the atomic weight is? + +/** Try to assign more common elements letters that are like + * their names; for less common elements just use whatever + * characters are handy. + */ const char MapAtom::AtomicElementChar[Atom::NUMELEMENTS_] = { 0, 'H', 'B', 'C', 'N', 'O', 'F', 'P', 'S', 'X', 'Y', 'f', 'c', 'I', 'M', 'U', 'L', 'K', 'R', - 'E', 'Z', 'n', 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, - 0 + 'E', 'Z', 'n', 'A', 'r', 'a', + 's', 'G', 't', 'b', '{', 'i', + 'h', 'o', 'D', '}', '|', '~', + '!', '"', '#', '$', '%', '&', + '(', ')', '*', '+', ',', '-', + '.', '/', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', + ':', ';', '<', '=', '>', '?', + '@', '[', '\\', ']', '^', '_', + '\'', '`', + 'x' }; /// CONSTRUCTOR From 4b274f2f8ecfaf8acd2162f05b46bc620dbb6ffa Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 11:50:11 -0400 Subject: [PATCH 147/368] Save carbon chain atom indices for sugars. Use Iarray in place of std::vector --- src/Exec_PrepareForLeap.cpp | 69 ++++++++++++++++++++----------------- src/Exec_PrepareForLeap.h | 32 +++++++++-------- 2 files changed, 55 insertions(+), 46 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3e8526cdad..a8d15d9166 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -21,13 +21,14 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn) : {} Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, - std::vector const& RA) : + Iarray const& RA, Iarray const& CA) : rnum_(rn), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), highest_stereocenter_(hs), - ring_atoms_(RA) + ring_atoms_(RA), + chain_atoms_(CA) {} void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { @@ -41,7 +42,10 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { mprintf("\t\tConfig. C : %s\n", topIn.TruncAtomNameNum(highest_stereocenter_).c_str()); mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); mprintf("\t\tNon-O Ring atoms :"); - for (std::vector::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) + for (Iarray::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) + mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); + mprintf("\n\t\tChain atoms :"); + for (Iarray::const_iterator it = chain_atoms_.begin(); it != chain_atoms_.end(); ++it) mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); mprintf("\n"); } @@ -807,7 +811,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c Residue const& res = topIn.Res(rnum); // Determine candidates for ring oxygen atoms. - std::vector potentialRingStartAtoms; + Iarray potentialRingStartAtoms; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = topIn[at]; @@ -834,9 +838,9 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c return Sugar(rnum); } else if (potentialRingStartAtoms.size() > 1) { mprinterr("Error: Multiple potential ring start atoms:\n"); - for (std::vector::const_iterator it = potentialRingStartAtoms.begin(); - it != potentialRingStartAtoms.end(); - ++it) + for (Iarray::const_iterator it = potentialRingStartAtoms.begin(); + it != potentialRingStartAtoms.end(); + ++it) mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); err = 1; return Sugar(rnum); @@ -903,17 +907,19 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // This will hold the index of the highest stereocenter, e.g. C5 int highest_stereocenter = -1; // This will hold ring atoms, not including the ring oxygen. - std::vector RA; - for (std::vector::const_iterator ringat = potentialRingStartAtoms.begin(); - ringat != potentialRingStartAtoms.end(); - ++ringat) + Iarray RA; + // This will hold carbon chain atoms starting from the anomeric carbon + Iarray carbon_chain; + for (Iarray::const_iterator ringat = potentialRingStartAtoms.begin(); + ringat != potentialRingStartAtoms.end(); + ++ringat) { // Mark all atoms as visited except this residue (minus the ring start). std::vector Visited( topIn.Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) if (at != *ringat) Visited[at] = false; - std::vector ring_atoms( topIn.Res(rnum).NumAtoms(), -1 ); + Iarray ring_atoms( topIn.Res(rnum).NumAtoms(), -1 ); bool ring_complete = false; // Since we have already established that *ringat is an oxygen bonded // to two carbons, just start at the first carbon to see if we can @@ -963,7 +969,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c // Place the ring atoms into an array without the terminating -1 RA.clear(); if (debug_ > 0) mprintf(" :"); // DEBUG - for (std::vector::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) + for (Iarray::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { if (debug_ > 0) mprintf(" %i", *it + 1); if (*it == -1) break; @@ -978,15 +984,15 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c break; } - // Get complete chain - Iarray carbon_chain = RA; + // Get complete chain starting from the anomeric carbon + carbon_chain = RA; if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, RA)) { mprinterr("Error: Could not find remaining chain carbons.\n"); err = 1; return Sugar(rnum); } if (debug_ > 0) { - mprintf("DEBUG: Complete carbon chain:\n"); + mprintf("DEBUG: Complete carbon chain (from anomeric carbon):\n"); for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); } @@ -1009,7 +1015,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, highest_stereocenter, RA); + return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, highest_stereocenter, + RA, carbon_chain); } /** Change PDB atom names in residue to glycam ones. */ @@ -1273,12 +1280,12 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, else { CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); // Get sugar residue numbers - std::vector sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); + Iarray sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); // Try to identify sugar rings std::vector Sugars; Sugars.reserve( sugarResNums.size() ); - for (std::vector::const_iterator rnum = sugarResNums.begin(); - rnum != sugarResNums.end(); ++rnum) + for (Iarray::const_iterator rnum = sugarResNums.begin(); + rnum != sugarResNums.end(); ++rnum) { int err = 0; Sugars.push_back( IdSugarRing(*rnum, topIn, err) ); @@ -1350,7 +1357,7 @@ const unsigned int currentAtom = 0; unsigned int currentMol = 0; unsigned int lowestUnassignedAtom = 0; - std::vector atomMolNum( topIn.Natom(), -1 ); + Iarray atomMolNum( topIn.Natom(), -1 ); while (unassignedAtomsRemain) { // This atom is in molecule. atomMolNum[currentAtom] = currentMol; @@ -1440,7 +1447,7 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co double cut2 = disulfidecut * disulfidecut; // Try to find potential disulfide sites. // Keep track of which atoms will be part of disulfide bonds. - std::vector disulfidePartner( cysmask.Nselected(), -1 ); + Iarray disulfidePartner( cysmask.Nselected(), -1 ); // First, check for existing disulfides. for (AtomMask::const_iterator at1 = cysmask.begin(); at1 != cysmask.end(); ++at1) { @@ -1460,7 +1467,7 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co // DEBUG - Print current array if (debug_ > 1) { mprintf("DEBUG: Disulfide partner array after existing:\n"); - for (std::vector::const_iterator it = disulfidePartner.begin(); it != disulfidePartner.end(); ++it) + for (Iarray::const_iterator it = disulfidePartner.begin(); it != disulfidePartner.end(); ++it) { mprintf(" S %i [%li]", cysmask[it-disulfidePartner.begin()]+1, it-disulfidePartner.begin()); if (*it == -1) @@ -1472,7 +1479,7 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co // Second, search for new disulfides from remaining sulfurs. if (searchForNewDisulfides) { // Only search with atoms that do not have an existing partner. - std::vector s_idxs; // Indices into cysmask/disulfidePartner + Iarray s_idxs; // Indices into cysmask/disulfidePartner for (int idx = 0; idx != cysmask.Nselected(); idx++) if (disulfidePartner[idx] == -1) s_idxs.push_back( idx ); @@ -1489,10 +1496,10 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co typedef std::vector D2Array; D2Array D2; - for (std::vector::const_iterator it1 = s_idxs.begin(); it1 != s_idxs.end(); ++it1) + for (Iarray::const_iterator it1 = s_idxs.begin(); it1 != s_idxs.end(); ++it1) { int at1 = cysmask[*it1]; - for (std::vector::const_iterator it2 = it1 + 1; it2 != s_idxs.end(); ++it2) + for (Iarray::const_iterator it2 = it1 + 1; it2 != s_idxs.end(); ++it2) { int at2 = cysmask[*it2]; double r2 = DIST2_NoImage(frameIn.XYZ(at1), frameIn.XYZ(at2)); @@ -1530,7 +1537,7 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co } // END search for new disulfides // For each sulfur that has a disulfide partner, generate a bond command // and change residue name. - for (std::vector::const_iterator idx1 = disulfidePartner.begin(); idx1 != disulfidePartner.end(); ++idx1) + for (Iarray::const_iterator idx1 = disulfidePartner.begin(); idx1 != disulfidePartner.end(); ++idx1) { if (*idx1 != -1) { int at1 = cysmask[idx1-disulfidePartner.begin()]; @@ -1780,7 +1787,7 @@ int Exec_PrepareForLeap::RemoveHydrogens(Topology& topIn, Frame& frameIn) const * \param HipName Name for doubly-protonated His. */ int Exec_PrepareForLeap::DetermineHisProt( std::vector& HisResNames, - std::vector& HisResIdxs, + Iarray& HisResIdxs, Topology const& topIn, NameType const& ND1, NameType const& NE2, @@ -1799,14 +1806,14 @@ const } if ( topIn.SetupIntegerMask( mask )) return 1; mask.MaskInfo(); - std::vector resIdxs = topIn.ResnumsSelectedBy( mask ); + Iarray resIdxs = topIn.ResnumsSelectedBy( mask ); HisResIdxs.clear(); HisResIdxs.reserve( resIdxs.size() ); HisResNames.clear(); HisResNames.reserve( resIdxs.size() ); - for (std::vector::const_iterator rnum = resIdxs.begin(); - rnum != resIdxs.end(); ++rnum) + for (Iarray::const_iterator rnum = resIdxs.begin(); + rnum != resIdxs.end(); ++rnum) { if (debug_ > 1) mprintf("DEBUG: %s (%i) (%c)\n", topIn.TruncResNameOnumId(*rnum).c_str(), topIn.Res(*rnum).OriginalResNum(), topIn.Res(*rnum).ChainId()); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 73cae1dd99..53b237b214 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -74,7 +74,7 @@ class Exec_PrepareForLeap : public Exec { int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, std::string const&, Iarray const&) const; int RemoveHydrogens(Topology&, Frame&) const; - int DetermineHisProt(std::vector&, std::vector&, Topology const&, + int DetermineHisProt(std::vector&, Iarray&, Topology const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&) const; @@ -114,15 +114,16 @@ class Exec_PrepareForLeap : public Exec { class Exec_PrepareForLeap::Sugar { public: Sugar(int); - Sugar(int,int,int,int,int,std::vector const&); - - int ResNum() const { return rnum_; } - int RingOxygenAtom() const { return ring_oxygen_atom_; } - int AnomericAtom() const { return anomeric_atom_; } - int AnomericRefAtom() const { return ano_ref_atom_; } - int HighestStereocenter() const { return highest_stereocenter_; } - Iarray const& RingAtoms() const { return ring_atoms_; } - int RingEndAtom() const { return ring_atoms_.back(); } + Sugar(int,int,int,int,int,Iarray const&,Iarray const&); + + int ResNum() const { return rnum_; } + int RingOxygenAtom() const { return ring_oxygen_atom_; } + int AnomericAtom() const { return anomeric_atom_; } + int AnomericRefAtom() const { return ano_ref_atom_; } + int HighestStereocenter() const { return highest_stereocenter_; } + Iarray const& RingAtoms() const { return ring_atoms_; } + int RingEndAtom() const { return ring_atoms_.back(); } + Iarray const& ChainAtoms() const { return chain_atoms_; } // typedef std::vector::const_iterator const_iterator; // const_iterator ringbegin() const { return ring_atoms_.begin(); } // const_iterator ringend() const { return ring_atoms_.end(); } @@ -132,11 +133,12 @@ class Exec_PrepareForLeap::Sugar { unsigned int NumRingAtoms() const; void PrintInfo(Topology const&) const; private: - int rnum_; ///< Residue index - int ring_oxygen_atom_; ///< Index of the ring oxygen atom - int anomeric_atom_; ///< Index of the anomeric C atom (ring start) - int ano_ref_atom_; ///< Index of the anomeric reference C atom + int rnum_; ///< Residue index + int ring_oxygen_atom_; ///< Index of the ring oxygen atom + int anomeric_atom_; ///< Index of the anomeric C atom (ring start) + int ano_ref_atom_; ///< Index of the anomeric reference C atom int highest_stereocenter_; ///< Index of the highest stereocenter in the carbon chain - std::vector ring_atoms_; ///< Index of all non-oxygen ring atoms + Iarray ring_atoms_; ///< Index of all non-oxygen ring atoms + Iarray chain_atoms_; ///< Index of all chain carbon atoms (from anomeric carbon). }; #endif From 9144955c48f0329e903a042f6290b5d1459a5c0e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 12:01:45 -0400 Subject: [PATCH 148/368] Generalize name of IsRingAtom to use for chain atoms too potentially. Add search for index. --- src/Exec_PrepareForLeap.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a8d15d9166..92c3cb7f9d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -396,13 +396,22 @@ static void Find_Carbons(int atm, Topology const& topIn, std::vector& Visi } } -static inline bool IsRingAtom(std::vector const& RingAtoms, int tgt) +/// \return True if the given tgt atom is in the given array +static inline bool AtomIsInArray(std::vector const& RingAtoms, int tgt) { for (std::vector::const_iterator it = RingAtoms.begin(); it != RingAtoms.end(); ++it) if (*it == tgt) return true; return false; } +/// \return Position of given tgt atom in the array (if it is in the given array) +static inline int AtomIdxInArray(std::vector const& ChainAtoms, int tgt) +{ + for (std::vector::const_iterator it = ChainAtoms.begin(); it != ChainAtoms.end(); ++it) + if (*it == tgt) + return (int)(it - ChainAtoms.begin()); + return -1; +} /** Find remaining non-ring carbons in chain starting from ring end atom. */ int Exec_PrepareForLeap::FindRemainingChainCarbons(Iarray& remainingChainCarbons, @@ -413,7 +422,7 @@ const Residue const& res = topIn.Res(rnum); std::vector Visited(topIn.Natom(), true); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - if (!IsRingAtom(RingAtoms, at)) + if (!AtomIsInArray(RingAtoms, at)) Visited[at] = false; for (Atom::bond_iterator bat = topIn[start_c].bondbegin(); @@ -540,7 +549,7 @@ const { if ( *bat != ring_oxygen_atom && topIn[*bat].Element() != Atom::HYDROGEN && - !IsRingAtom(RingAtoms, *bat) ) + !AtomIsInArray(RingAtoms, *bat) ) { if (anomeric_atom_X != -1) { // If there are two non-ring, non-hydrogen substituents, prioritize @@ -636,7 +645,7 @@ const { if ( *bat != ring_oxygen_atom && topIn[*bat].Element() != Atom::HYDROGEN && - !IsRingAtom(RingAtoms, *bat) ) + !AtomIsInArray(RingAtoms, *bat) ) { if (ano_ref_atom_Y != -1) { mprinterr("Error: Two potential non-ring substituents for anomeric ref: %s and %s\n", @@ -1078,6 +1087,11 @@ const } bool t_ar_up = (t_ar > 0); + // By definition, anomeric atom is index 0 in the chain. + // Determine index of the anomeric reference atom in the chain. + int ar_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.AnomericRefAtom()); + mprintf("DEBUG: Index of the anomeric reference atom is %i\n", ar_idx); + AnomerRetType form; if (sugar.AnomericRefAtom() == sugar.RingEndAtom()) { // Anomeric reference is the ring end, same side is beta, opposite is alpha. @@ -2086,7 +2100,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // Do histidine detection before H atoms are removed - std::vector HisResIdxs; + Iarray HisResIdxs; std::vector HisResNames; if (!argIn.hasKey("nohisdetect")) { std::string nd1name = argIn.GetStringKey("nd1", "ND1"); From 0ccd6b9df2e53853ecf2b1a4abfb2dbf8609ab7a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 12:47:41 -0400 Subject: [PATCH 149/368] Remove unneeded debug statement --- src/Exec_PrepareForLeap.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 92c3cb7f9d..1012a25713 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1149,8 +1149,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, resChar = pdb_glycam->second; mprintf("\tSugar %s glycam name: %c\n", sugarName.c_str(), resChar); - if (debug_ > 0) - mprintf("DEBUG:\tOriginal #= %i chain %c\n", res.OriginalResNum(), res.ChainId()); // Change PDB names to Glycam ones if (ChangePdbAtomNamesToGlycam(resChar, res, topIn)) { From b5f3db712465c5b89a0baa01110a7dfa7c2d4819 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 13:11:21 -0400 Subject: [PATCH 150/368] Add function to calc stereocenter torsion --- src/Exec_PrepareForLeap.cpp | 65 +++++++++++++++++++++++++++++++++++++ src/Exec_PrepareForLeap.h | 3 ++ 2 files changed, 68 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1012a25713..b500e848c3 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -671,6 +671,69 @@ const return 0; } +/** Determine torsion around the configurational carbon. + * Calculate torsion around config. carbon C as: + * C0-C-C1-Z + * where C0 is the carbon preceding C in the chain, C1 is the carbon + * after C in the chain, and Z is the non-hydrogen substituent of C + * with highest priority. + */ +int Exec_PrepareForLeap::CalcConfigCarbonTorsion(double& torsion, int config_carbon, + Iarray const& carbon_chain, + Topology const& topIn, + Frame const& frameIn) +const +{ + int atom_c0 = -1; + int atom_c1 = -1; + int atom_z = -1; + // Get c0 and c1 + int c_idx = AtomIdxInArray(carbon_chain, config_carbon); + if (c_idx < 1) { + mprinterr("Error: Could not determine carbon before config. C '%s'\n", + topIn.ResNameNumAtomNameNum(config_carbon).c_str()); + return 1; + } + atom_c0 = carbon_chain[c_idx-1]; + if ((unsigned int)c_idx+1 >= carbon_chain.size()) { + mprinterr("Error: Could not determine carbon after config. C '%s'\n", + topIn.ResNameNumAtomNameNum(config_carbon).c_str()); + return 1; + } + atom_c1 = carbon_chain[c_idx+1]; + + for (Atom::bond_iterator bat = topIn[config_carbon].bondbegin(); + bat != topIn[config_carbon].bondend(); ++bat) + { + if (topIn[*bat].Element() != Atom::HYDROGEN && + !AtomIsInArray(carbon_chain, *bat)) + { + if (atom_z == -1) + atom_z = *bat; + else if (topIn[*bat].AtomicNumber() > topIn[atom_z].AtomicNumber()) + atom_z = *bat; + } + } + if (atom_z == -1) { + mprinterr("Error: Could not determine substituent for config. C '%s'\n", + topIn.ResNameNumAtomNameNum(config_carbon).c_str()); + return 1; + } + + torsion = Torsion( frameIn.XYZ(atom_c0), + frameIn.XYZ(config_carbon), + frameIn.XYZ(atom_c1), + frameIn.XYZ(atom_z) ); + //if (debug_ > 0) + mprintf("DEBUG: Config C. torsion %s-%s-%s-%s= %f\n", + *(topIn[atom_c0].Name()), + *(topIn[config_carbon].Name()), + *(topIn[atom_c1].Name()), + *(topIn[atom_z].Name()), + torsion*Constants::RADDEG); + return 0; +} + /// \return Total priority (i.e. sum of atomic numbers) of atoms bonded to given atom. int Exec_PrepareForLeap::totalPriority(Topology const& topIn, int atnum, int rnum, int depth, int tgtdepth, std::vector& Visited) @@ -1117,6 +1180,8 @@ const if (sugar.HighestStereocenter() != sugar.AnomericRefAtom()) { double stereo_t = 0; + CalcConfigCarbonTorsion(stereo_t, sugar.HighestStereocenter(), + sugar.ChainAtoms(), topIn, frameIn); if (CalcStereocenterTorsion(stereo_t, sugar.HighestStereocenter(), topIn, frameIn)) return A_ERR; isDform = (stereo_t > 0); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 53b237b214..3242a8d560 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -43,6 +43,9 @@ class Exec_PrepareForLeap : public Exec { /// Determine orientation around anomeric reference carbon int CalcAnomericRefTorsion(double&, int, int, int, Iarray const&, Topology const&, Frame const&) const; + /// Determine orientation around configurational carbon + int CalcConfigCarbonTorsion(double&, int, Iarray const&, + Topology const&, Frame const&) const; static int totalPriority(Topology const&, int, int, int, int, std::vector&); From c25cb7c3a85ee566f71c5c1850b0b0751444ad09 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 13:43:25 -0400 Subject: [PATCH 151/368] Try to make CalcConfigCarbonTorsion atom ordering consistent with CalcAnomericRefTorsion --- src/Exec_PrepareForLeap.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b500e848c3..1b324bb481 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -673,10 +673,11 @@ const /** Determine torsion around the configurational carbon. * Calculate torsion around config. carbon C as: - * C0-C-C1-Z + * C0-C-Z-C1 * where C0 is the carbon preceding C in the chain, C1 is the carbon * after C in the chain, and Z is the non-hydrogen substituent of C - * with highest priority. + * with highest priority. Do it this way to be consistent with how + * CalcAnomericRefTorsion orders the atoms. */ int Exec_PrepareForLeap::CalcConfigCarbonTorsion(double& torsion, int config_carbon, Iarray const& carbon_chain, @@ -722,14 +723,14 @@ const torsion = Torsion( frameIn.XYZ(atom_c0), frameIn.XYZ(config_carbon), - frameIn.XYZ(atom_c1), - frameIn.XYZ(atom_z) ); + frameIn.XYZ(atom_z), + frameIn.XYZ(atom_c1) ); //if (debug_ > 0) - mprintf("DEBUG: Config C. torsion %s-%s-%s-%s= %f\n", + mprintf("DEBUG: Config. C torsion %s-%s-%s-%s= %f\n", *(topIn[atom_c0].Name()), *(topIn[config_carbon].Name()), - *(topIn[atom_c1].Name()), *(topIn[atom_z].Name()), + *(topIn[atom_c1].Name()), torsion*Constants::RADDEG); return 0; } @@ -1150,6 +1151,18 @@ const } bool t_ar_up = (t_ar > 0); + // If config. C is not the anomeric reference, need the previous + // carbon in the chain, next carbon in the chain, and config. C + // substituent. + double t_cc; + if (sugar.AnomericRefAtom() != sugar.HighestStereocenter()) { + if (CalcConfigCarbonTorsion(t_cc, sugar.HighestStereocenter(), + sugar.ChainAtoms(), topIn, frameIn)) + return A_ERR; + } else + t_cc = t_ar; + bool t_cc_up = (t_cc > 0); + // By definition, anomeric atom is index 0 in the chain. // Determine index of the anomeric reference atom in the chain. int ar_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.AnomericRefAtom()); @@ -1180,8 +1193,6 @@ const if (sugar.HighestStereocenter() != sugar.AnomericRefAtom()) { double stereo_t = 0; - CalcConfigCarbonTorsion(stereo_t, sugar.HighestStereocenter(), - sugar.ChainAtoms(), topIn, frameIn); if (CalcStereocenterTorsion(stereo_t, sugar.HighestStereocenter(), topIn, frameIn)) return A_ERR; isDform = (stereo_t > 0); From d8b1b23fa250e4335a39d7b72c34eb15f6988b3c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 14:58:26 -0400 Subject: [PATCH 152/368] Try to be more rigorous about determining form and chirality --- src/Exec_PrepareForLeap.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1b324bb481..ecab410fde 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -987,6 +987,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c ringat != potentialRingStartAtoms.end(); ++ringat) { + if (debug_ > 0) + mprintf("DEBUG: Ring start '%s'\n", topIn.ResNameNumAtomNameNum(*ringat).c_str()); // Mark all atoms as visited except this residue (minus the ring start). std::vector Visited( topIn.Natom(), true ); for (int at = res.FirstAtom(); at != res.LastAtom(); at++) @@ -1016,7 +1018,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c if (topIn[*bat].Element() == Atom::CARBON) c_end_bonds_to_C++; if (debug_ > 0) - mprintf("(%s bonds to C= %i, %s bonds to C = %i)", // DEBUG + mprintf("DEBUG:\t(%s bonds to C= %i, %s bonds to C = %i)\n", // DEBUG topIn.ResNameNumAtomNameNum(c_beg).c_str(), c_beg_bonds_to_C, topIn.ResNameNumAtomNameNum(c_end).c_str(), c_end_bonds_to_C); if (c_beg_bonds_to_C <= c_end_bonds_to_C) { @@ -1167,8 +1169,34 @@ const // Determine index of the anomeric reference atom in the chain. int ar_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.AnomericRefAtom()); mprintf("DEBUG: Index of the anomeric reference atom is %i\n", ar_idx); + int cc_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.HighestStereocenter()); + mprintf("DEBUG: Index of the config. carbon atom is %i\n", cc_idx); + + // Determine form and chirality. + // May need to adjust definitions based on the positions of the anomeric + // reference and config. atoms in the sequence, which alternates. + if ((ar_idx % 2) != 0) + t_ar_up = !t_ar_up; + if ((cc_idx % 2) != 0) + t_cc_up = !t_cc_up; + + mprintf("DEBUG: t_an_up=%i t_ar_up=%i t_cc_up=%i\n", + (int)t_an_up, (int)t_ar_up, (int)t_cc_up); AnomerRetType form; + // Same side is beta, opposite is alpha. + if (t_an_up == t_ar_up) { + form = IS_BETA; + //mprintf("DEBUG: Form is Beta\n"); + } else { + form = IS_ALPHA; + //mprintf("DEBUG: Form is Alpha\n"); + } + + // By the atom ordering used by CalcAnomericRefTorsion and + // CalcConfigCarbonTorsion, D is a negative (down) torsion. + isDform = !t_cc_up; +/* if (sugar.AnomericRefAtom() == sugar.RingEndAtom()) { // Anomeric reference is the ring end, same side is beta, opposite is alpha. isDform = !t_ar_up; @@ -1196,7 +1224,7 @@ const if (CalcStereocenterTorsion(stereo_t, sugar.HighestStereocenter(), topIn, frameIn)) return A_ERR; isDform = (stereo_t > 0); - } + }*/ return form; } From d55d70c0700264d4ee91880d4d9d4e7e81e1516e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 15:07:14 -0400 Subject: [PATCH 153/368] Comment out old function --- src/Exec_PrepareForLeap.cpp | 5 ++++- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ecab410fde..464dc3f635 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -328,6 +328,7 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) } /** Determine torsion around non-ring stereocenter. */ +/* int Exec_PrepareForLeap::CalcStereocenterTorsion(double& torsion, int idx, Topology const& topIn, Frame const& frameIn) @@ -379,7 +380,7 @@ const *(topIn[i0].Name()), *(topIn[idx].Name()), *(topIn[i1].Name()), *(topIn[ix].Name()), torsion * Constants::RADDEG); return 0; -} +}*/ /// Recursive function for finding and recording all carbons static void Find_Carbons(int atm, Topology const& topIn, std::vector& Visited, @@ -1184,6 +1185,8 @@ const (int)t_an_up, (int)t_ar_up, (int)t_cc_up); AnomerRetType form; + mprintf("DEBUG: t_an_up=%i t_ar_up=%i t_cc_up=%i\n", + (int)t_an_up, (int)t_ar_up, (int)t_cc_up);; // Same side is beta, opposite is alpha. if (t_an_up == t_ar_up) { form = IS_BETA; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 3242a8d560..6f67457983 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -34,7 +34,7 @@ class Exec_PrepareForLeap : public Exec { int LoadPdbResNames(std::string const&); void LeapBond(int,int,Topology const&, CpptrajFile*) const; - int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; +// int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; int FindRemainingChainCarbons(Iarray&, int, Topology const&, int, Iarray const&) const; int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; /// Determine orientation around anomeric carbon From f1bb46d3547786bedae11e075d5bb9949647defb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 12 Oct 2021 15:10:43 -0400 Subject: [PATCH 154/368] Hide some debug info --- src/Exec_PrepareForLeap.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 464dc3f635..c789dcff13 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -726,7 +726,7 @@ const frameIn.XYZ(config_carbon), frameIn.XYZ(atom_z), frameIn.XYZ(atom_c1) ); - //if (debug_ > 0) + if (debug_ > 0) mprintf("DEBUG: Config. C torsion %s-%s-%s-%s= %f\n", *(topIn[atom_c0].Name()), *(topIn[config_carbon].Name()), @@ -1169,9 +1169,7 @@ const // By definition, anomeric atom is index 0 in the chain. // Determine index of the anomeric reference atom in the chain. int ar_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.AnomericRefAtom()); - mprintf("DEBUG: Index of the anomeric reference atom is %i\n", ar_idx); int cc_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.HighestStereocenter()); - mprintf("DEBUG: Index of the config. carbon atom is %i\n", cc_idx); // Determine form and chirality. // May need to adjust definitions based on the positions of the anomeric @@ -1181,13 +1179,15 @@ const if ((cc_idx % 2) != 0) t_cc_up = !t_cc_up; - mprintf("DEBUG: t_an_up=%i t_ar_up=%i t_cc_up=%i\n", - (int)t_an_up, (int)t_ar_up, (int)t_cc_up); + if ( debug_ > 0) { + mprintf("DEBUG: Index of the anomeric reference atom is %i\n", ar_idx); + mprintf("DEBUG: Index of the config. carbon atom is %i\n", cc_idx); + mprintf("DEBUG: t_an_up=%i t_ar_up=%i t_cc_up=%i\n", + (int)t_an_up, (int)t_ar_up, (int)t_cc_up); + } AnomerRetType form; - mprintf("DEBUG: t_an_up=%i t_ar_up=%i t_cc_up=%i\n", - (int)t_an_up, (int)t_ar_up, (int)t_cc_up);; - // Same side is beta, opposite is alpha. + // Same side is beta, opposite is alpha. if (t_an_up == t_ar_up) { form = IS_BETA; //mprintf("DEBUG: Form is Beta\n"); From 4c8b4bbc5b1702fcc69e4c3669c6078eeb1378cd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 09:47:32 -0400 Subject: [PATCH 155/368] Add IsSelected function --- src/AtomMask.cpp | 7 +++++++ src/AtomMask.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/AtomMask.cpp b/src/AtomMask.cpp index c80bd5064e..480b2fee57 100644 --- a/src/AtomMask.cpp +++ b/src/AtomMask.cpp @@ -107,6 +107,13 @@ int AtomMask::NumAtomsInCommon(AtomMask const& maskIn) const { return int(intersect_end - intersect.begin()); } +/** \return True if atom is in Selected_ array. */ +bool AtomMask::IsSelected(int atomIn) const { + for (std::vector::const_iterator at = Selected_.begin(); at != Selected_.end(); ++at) + if (*at == atomIn) return true; + return false; +} + // AtomMask::AddAtom() /** Attempt to enforce some sorting by looking for the atom in the mask; * as soon as an atom # is found larger than atomIn, insert it at the diff --git a/src/AtomMask.h b/src/AtomMask.h index c1840f317f..76ee8cef55 100644 --- a/src/AtomMask.h +++ b/src/AtomMask.h @@ -52,6 +52,8 @@ class AtomMask : public MaskTokenArray { void InvertMask(); /// \return the number of atoms mask has in common with another mask int NumAtomsInCommon(AtomMask const&) const; + /// \return True if the given at is in the selected array. + bool IsSelected(int) const; /// Add atom to Selected array; assumes atoms will be in order. void AddSelectedAtom(int i) { Selected_.push_back( i ); } /// Add given atom to Selected array From aca23b751915dcf6a2e3b30a84b1fce3d2972689 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 10:12:50 -0400 Subject: [PATCH 156/368] Add atoms involved in torsion in the order they are used to debug message --- src/Exec_PrepareForLeap.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index c789dcff13..3122a169da 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -588,7 +588,12 @@ const torsion = Torsion( frameIn.XYZ(ring_oxygen_atom), frameIn.XYZ(anomeric_atom), frameIn.XYZ(anomeric_atom_C), frameIn.XYZ(anomeric_atom_X) ); if (debug_ > 0) - mprintf("\t Anomeric torsion = %f\n", torsion * Constants::RADDEG); + mprintf("DEBUG: Anomeric torsion %s-%s-%s-%s= %f\n", + *(topIn[ring_oxygen_atom].Name()), + *(topIn[anomeric_atom].Name()), + *(topIn[anomeric_atom_C].Name()), + *(topIn[anomeric_atom_X].Name()), + torsion * Constants::RADDEG); return 0; } @@ -668,7 +673,12 @@ const torsion = Torsion( frameIn.XYZ(ano_ref_atom_0), frameIn.XYZ(ano_ref_atom), frameIn.XYZ(ano_ref_atom_1), frameIn.XYZ(ano_ref_atom_Y) ); if (debug_ > 0) - mprintf("\t Anomeric reference torsion = %f\n", torsion * Constants::RADDEG); + mprintf("DEBUG: Anomeric reference torsion %s-%s-%s-%s= %f\n", + *(topIn[ano_ref_atom_0].Name()), + *(topIn[ano_ref_atom].Name()), + *(topIn[ano_ref_atom_1].Name()), + *(topIn[ano_ref_atom_Y].Name()), + torsion * Constants::RADDEG); return 0; } From 0ce84060a16fad1f2e83e10cf5ac1f0791ce904f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 10:13:09 -0400 Subject: [PATCH 157/368] Add function to Split residue --- src/Topology.cpp | 111 +++++++++++++++++++++++++++++++++++++++++++++++ src/Topology.h | 2 + 2 files changed, 113 insertions(+) diff --git a/src/Topology.cpp b/src/Topology.cpp index 014dc2caf7..959c1ec014 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1658,6 +1658,117 @@ Topology* Topology::ModifyByMap(std::vector const& MapIn, bool setupFullPar return newParm; } +/** Split atoms selected in a single residue into a new residue. */ +int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) +{ + if (maskIn.Nselected() == 0) { + mprinterr("Error: SplitResidue: No atoms selected.\n"); + return 1; + } + int tgtResNum = Atoms()[maskIn[0]].ResNum(); + Residue const& res = residues_[tgtResNum]; + // Check that all atoms are consecutive and in the same residue. + if (maskIn.Nselected() > 1) { + int lastAtom = maskIn[0]; + for (int idx = 1; idx < maskIn.Nselected(); idx++) { + if (maskIn[idx] - lastAtom > 1) { + mprinterr("Error: SplitResidue: Atoms '%s' and '%s' are not consecutive.\n", + AtomMaskName(maskIn[idx]).c_str(), AtomMaskName(lastAtom).c_str()); + return 1; + } + lastAtom = maskIn[idx]; + if (Atoms()[maskIn[idx]].ResNum() != tgtResNum) { + mprinterr("Error: SplitResidue: Atoms '%s' and '%s' are in different residues.\n", + AtomMaskName(maskIn[idx]).c_str(), AtomMaskName(lastAtom).c_str()); + return 1; + } + } + } + // Need to re-order the topology so that selected atoms now come at the + // end of the residue they are a part of. + std::vector atomMap; + atomMap.reserve(Natom()); + int r0firstAtom = -1; + int r0lastAtom = -1; + int r1firstAtom = -1; + int r1lastAtom = -1; + int newAt = 0; + for (int at = 0; at < maskIn[0]; at++, newAt++) + atomMap.push_back(at); + // Add unselected atoms of residue first + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { + if (!maskIn.IsSelected(at)) { + if (r0firstAtom == -1) + r0firstAtom = newAt; + atomMap.push_back(at); + newAt++; + } + } + r0lastAtom = newAt; + // Now add selected atoms + for (AtomMask::const_iterator it = maskIn.begin(); it != maskIn.end(); ++it) { + if (r1firstAtom == -1) + r1firstAtom = newAt; + atomMap.push_back(*it); + newAt++; + } + r1lastAtom = newAt; + // Add remaining atoms + if (tgtResNum+1 < Nres()) { + for (int at = residues_[tgtResNum+1].FirstAtom(); at != Natom(); at++) + atomMap.push_back(at); + } + // Reorder topology + Topology* newTop = ModifyByMap( atomMap, true ); + if (newTop == 0) { + mprinterr("Internal Error: SplitResidue: Could not reorder the topology.\n"); + return 1; + } + // Decide insertion codes. + char icode0, icode1; + bool recode = false; + if (res.Icode() == ' ') { + icode0 = 'A'; + icode1 = 'B'; + } else { + icode0 = res.Icode(); + icode1 = icode0 + 1; + recode = true; + } + // Now redo the residue information + newTop->residues_.clear(); + newTop->residues_.reserve(Nres()+1); + // First add residues up to this one + for (int rnum = 0; rnum < tgtResNum; rnum++) + newTop->residues_.push_back( residues_[rnum] ); + // Add non-selected part of residue + newTop->residues_.push_back( Residue(residues_[tgtResNum], r0firstAtom, r0lastAtom) ); + newTop->residues_.back().SetIcode( icode0 ); + // Update atoms in selected part of residue + for (int at = r1firstAtom; at != r1lastAtom; at++) + newTop->atoms_[at].SetResNum( residues_.size() ); + // Add selected part of residue + newTop->residues_.push_back( Residue(residues_[tgtResNum], r1firstAtom, r1lastAtom) ); + newTop->residues_.back().SetIcode( icode1 ); + // Add remaining residues + if (recode) { + for (int rnum = tgtResNum+1; rnum < Nres(); rnum++) { + newTop->residues_.push_back( residues_[rnum] ); + if (newTop->residues_.back().OriginalResNum() == res.OriginalResNum() && + newTop->residues_.back().ChainId() == res.ChainId()) + newTop->residues_.back().SetIcode(++icode1); + } + } else { + for (int rnum = tgtResNum+1; rnum < Nres(); rnum++) + newTop->residues_.push_back( residues_[rnum] ); + } + + *this = *newTop; + delete newTop; + + return 0; +} + /** \return BondArray with bonds for which both atoms are still present. * \param atomMap format Map[oldAtom]=newAtom */ diff --git a/src/Topology.h b/src/Topology.h index e3f1b62c2d..0dd61a0411 100644 --- a/src/Topology.h +++ b/src/Topology.h @@ -224,6 +224,8 @@ class Topology { Topology* ModifyByMap(std::vector const& m) const { return ModifyByMap(m, true); } + /// Split selected atoms in a residue into a new residue + int SplitResidue(AtomMask const&, NameType const&); /// Append topology to this one. int AppendTop( Topology const& ); private: From d40d1a1c55d24782aa46313295d4ca0f533521b3 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 11:08:18 -0400 Subject: [PATCH 158/368] Ensure name is set --- src/Topology.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Topology.cpp b/src/Topology.cpp index 959c1ec014..1703903cd5 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1750,6 +1750,7 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) // Add selected part of residue newTop->residues_.push_back( Residue(residues_[tgtResNum], r1firstAtom, r1lastAtom) ); newTop->residues_.back().SetIcode( icode1 ); + newTop->residues_.back().SetName( newName ); // Add remaining residues if (recode) { for (int rnum = tgtResNum+1; rnum < Nres(); rnum++) { From 6a7d66f389f135eac3a6ee248c7bc8ce66126ef0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 11:40:24 -0400 Subject: [PATCH 159/368] Start debugging. Fix map setup --- src/Topology.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Topology.cpp b/src/Topology.cpp index 1703903cd5..9c56c07c95 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1693,7 +1693,7 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) int r1firstAtom = -1; int r1lastAtom = -1; int newAt = 0; - for (int at = 0; at < maskIn[0]; at++, newAt++) + for (int at = 0; at < residues_[tgtResNum].FirstAtom(); at++, newAt++) atomMap.push_back(at); // Add unselected atoms of residue first for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { @@ -1718,12 +1718,24 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) for (int at = residues_[tgtResNum+1].FirstAtom(); at != Natom(); at++) atomMap.push_back(at); } + mprintf("DEBUG: New res0: index %i to %i\n", r0firstAtom, r0lastAtom); + mprintf("DEBUG: New res1: index %i to %i\n", r1firstAtom, r1lastAtom); + // Reorder topology - Topology* newTop = ModifyByMap( atomMap, true ); + Topology* newTop = ModifyByMap( atomMap, false ); if (newTop == 0) { mprinterr("Internal Error: SplitResidue: Could not reorder the topology.\n"); return 1; } + mprintf("DEBUG: New res0: Atoms %s to %s\n", + newTop->AtomMaskName(r0firstAtom).c_str(), newTop->AtomMaskName(r0lastAtom-1).c_str()); + mprintf("DEBUG: New res1: Atoms %s to %s\n", + newTop->AtomMaskName(r1firstAtom).c_str(), newTop->AtomMaskName(r1lastAtom-1).c_str()); + //DEBUG + *this = *newTop; // DEBUG + delete newTop; // DEBUG + return 0; // DEBUG + // END DEBUG // Decide insertion codes. char icode0, icode1; bool recode = false; From 3ab15f5a01c70c1046fd7d785248d03344f84f33 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 11:40:41 -0400 Subject: [PATCH 160/368] Add splitres as a hidden command for testing --- src/Exec_Change.cpp | 36 +++++++++++++++++++++++++++++++++++- src/Exec_Change.h | 1 + 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Exec_Change.cpp b/src/Exec_Change.cpp index 2b58fc0c66..78c1701deb 100644 --- a/src/Exec_Change.cpp +++ b/src/Exec_Change.cpp @@ -22,7 +22,8 @@ void Exec_Change::Help() const Exec::RetType Exec_Change::Execute(CpptrajState& State, ArgList& argIn) { // Change type - enum ChangeType { UNKNOWN = 0, RESNAME, CHAINID, ORESNUMS, ICODES, ATOMNAME, ADDBOND, REMOVEBONDS }; + enum ChangeType { UNKNOWN = 0, RESNAME, CHAINID, ORESNUMS, ICODES, + ATOMNAME, ADDBOND, REMOVEBONDS, SPLITRES }; ChangeType type = UNKNOWN; if (argIn.hasKey("resname")) type = RESNAME; @@ -38,6 +39,8 @@ Exec::RetType Exec_Change::Execute(CpptrajState& State, ArgList& argIn) type = ADDBOND; else if (argIn.hasKey("removebonds")) type = REMOVEBONDS; + else if (argIn.hasKey("splitres")) + type = SPLITRES; if (type == UNKNOWN) { mprinterr("Error: No change type specified.\n"); return CpptrajState::ERR; @@ -67,12 +70,43 @@ Exec::RetType Exec_Change::Execute(CpptrajState& State, ArgList& argIn) case ATOMNAME : err = ChangeAtomName(*parm, argIn); break; case ADDBOND : err = AddBond(*parm, argIn); break; case REMOVEBONDS : err = RemoveBonds(State, *parm, argIn); break; + case SPLITRES : err = ChangeSplitRes(*parm, argIn); break; case UNKNOWN : err = 1; // sanity check } if (err != 0) return CpptrajState::ERR; return CpptrajState::OK; } +// Exec_Change::ChangeSplitRes() +int Exec_Change::ChangeSplitRes(Topology& topIn, ArgList& argIn) +const +{ + // New residue name + std::string newname = argIn.GetStringKey("newname"); + if (newname.empty()) { + mprinterr("Error: splitres: No new name specified.\n"); + return 1; + } + // Atoms in residue to split + std::string maskStr = argIn.GetMaskNext(); + if (maskStr.empty()) { + mprinterr("Error: splitres: No mask specified.\n"); + return 1; + } + AtomMask toSplit; + if (toSplit.SetMaskString(maskStr)) return 1; + if (topIn.SetupIntegerMask( toSplit)) return 1; + if (toSplit.None()) { + mprinterr("Error: splitres: No atoms selected.\n"); + return 1; + } + if (topIn.SplitResidue(toSplit, newname)) { + mprinterr("Error: splitres failed.\n"); + return 1; + } + return 0; +} + // Exec_Change::ChangeResidueName() int Exec_Change::ChangeResidueName(Topology& topIn, ArgList& argIn) const diff --git a/src/Exec_Change.h b/src/Exec_Change.h index 5743d32617..5de0e3452c 100644 --- a/src/Exec_Change.h +++ b/src/Exec_Change.h @@ -10,6 +10,7 @@ class Exec_Change : public Exec { DispatchObject* Alloc() const { return (DispatchObject*)new Exec_Change(); } RetType Execute(CpptrajState&, ArgList&); private: + int ChangeSplitRes(Topology&, ArgList&) const; int ChangeResidueName(Topology&, ArgList&) const; int ChangeOresNums(Topology&, ArgList&) const; int ChangeIcodes(Topology&, ArgList&) const; From 7e04020bb34c11fd7f8819fffb073fdd07f0130c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 13:05:40 -0400 Subject: [PATCH 161/368] Ensure atom indices are properly updated when splitting residue --- src/Topology.cpp | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Topology.cpp b/src/Topology.cpp index 9c56c07c95..30e94050d4 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1732,9 +1732,9 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) mprintf("DEBUG: New res1: Atoms %s to %s\n", newTop->AtomMaskName(r1firstAtom).c_str(), newTop->AtomMaskName(r1lastAtom-1).c_str()); //DEBUG - *this = *newTop; // DEBUG - delete newTop; // DEBUG - return 0; // DEBUG +// *this = *newTop; // DEBUG +// delete newTop; // DEBUG +// return 0; // DEBUG // END DEBUG // Decide insertion codes. char icode0, icode1; @@ -1754,26 +1754,40 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) for (int rnum = 0; rnum < tgtResNum; rnum++) newTop->residues_.push_back( residues_[rnum] ); // Add non-selected part of residue + //mprintf("DEBUG: Last residue: %s %i - %i\n", *(newTop->residues_.back().Name()), newTop->residues_.back().FirstAtom()+1, newTop->residues_.back().LastAtom()); newTop->residues_.push_back( Residue(residues_[tgtResNum], r0firstAtom, r0lastAtom) ); newTop->residues_.back().SetIcode( icode0 ); + //mprintf("DEBUG: New R0: %s %i - %i\n", *(newTop->residues_.back().Name()), newTop->residues_.back().FirstAtom()+1, newTop->residues_.back().LastAtom()); // Update atoms in selected part of residue - for (int at = r1firstAtom; at != r1lastAtom; at++) - newTop->atoms_[at].SetResNum( residues_.size() ); + for (int at = r1firstAtom; at != r1lastAtom; at++) { + //mprintf("DEBUG: Set atom %i\n", at+1); + newTop->atoms_[at].SetResNum( newTop->residues_.size() ); + } // Add selected part of residue newTop->residues_.push_back( Residue(residues_[tgtResNum], r1firstAtom, r1lastAtom) ); newTop->residues_.back().SetIcode( icode1 ); newTop->residues_.back().SetName( newName ); + //mprintf("DEBUG: New R1: %s %i - %i\n", *(newTop->residues_.back().Name()), newTop->residues_.back().FirstAtom()+1, newTop->residues_.back().LastAtom()); + int newResNum = (int)newTop->residues_.size(); // Add remaining residues if (recode) { - for (int rnum = tgtResNum+1; rnum < Nres(); rnum++) { + for (int rnum = tgtResNum+1; rnum < Nres(); rnum++, newResNum++) { newTop->residues_.push_back( residues_[rnum] ); if (newTop->residues_.back().OriginalResNum() == res.OriginalResNum() && newTop->residues_.back().ChainId() == res.ChainId()) newTop->residues_.back().SetIcode(++icode1); + for (int at = newTop->residues_.back().FirstAtom(); + at != newTop->residues_.back().LastAtom(); ++at) + newTop->atoms_[at].SetResNum( newResNum ); } } else { - for (int rnum = tgtResNum+1; rnum < Nres(); rnum++) + for (int rnum = tgtResNum+1; rnum < Nres(); rnum++, newResNum++) { newTop->residues_.push_back( residues_[rnum] ); + for (int at = newTop->residues_.back().FirstAtom(); + at != newTop->residues_.back().LastAtom(); ++at) + newTop->atoms_[at].SetResNum( newResNum ); + //mprintf("DEBUG: Res: %s %i - %i\n", *(newTop->residues_.back().Name()), newTop->residues_.back().FirstAtom()+1, newTop->residues_.back().LastAtom()); + } } *this = *newTop; From 691f437ebae4fa3342106267c1353b592dfc3b57 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 16:12:53 -0400 Subject: [PATCH 162/368] Pass the atom map back out to allow further remapping --- src/Topology.cpp | 5 +++-- src/Topology.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Topology.cpp b/src/Topology.cpp index 30e94050d4..bb4d0493cd 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1659,7 +1659,8 @@ Topology* Topology::ModifyByMap(std::vector const& MapIn, bool setupFullPar } /** Split atoms selected in a single residue into a new residue. */ -int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) +int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName, + std::vector& atomMap) { if (maskIn.Nselected() == 0) { mprinterr("Error: SplitResidue: No atoms selected.\n"); @@ -1686,7 +1687,7 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) } // Need to re-order the topology so that selected atoms now come at the // end of the residue they are a part of. - std::vector atomMap; + atomMap.clear(); atomMap.reserve(Natom()); int r0firstAtom = -1; int r0lastAtom = -1; diff --git a/src/Topology.h b/src/Topology.h index 0dd61a0411..63cea6a02a 100644 --- a/src/Topology.h +++ b/src/Topology.h @@ -225,7 +225,7 @@ class Topology { return ModifyByMap(m, true); } /// Split selected atoms in a residue into a new residue - int SplitResidue(AtomMask const&, NameType const&); + int SplitResidue(AtomMask const&, NameType const&, std::vector&); /// Append topology to this one. int AppendTop( Topology const& ); private: From 7fabe59fc0ba7aef36416830ddf89e5dee9024a4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 13 Oct 2021 16:13:21 -0400 Subject: [PATCH 163/368] Start adding a routine to check if sugars are terminal --- src/Exec_PrepareForLeap.cpp | 123 +++++++++++++++++++++++++++++++++--- src/Exec_PrepareForLeap.h | 9 ++- 2 files changed, 121 insertions(+), 11 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3122a169da..51f8d47203 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -889,9 +889,11 @@ const } /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ -Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, int& err) +Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, + IdSugarRingStatType& stat) +const { - err = 0; + stat = ID_OK; Residue const& res = topIn.Res(rnum); // Determine candidates for ring oxygen atoms. @@ -918,7 +920,8 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c if (potentialRingStartAtoms.empty()) { mprintf("Warning: Ring oxygen could not be identified for %s\n", topIn.TruncResNameOnumId(rnum).c_str()); - resStat_[rnum] = SUGAR_MISSING_RING_O; + //resStat_[rnum] = SUGAR_MISSING_RING_O; + stat = ID_MISSING_O; return Sugar(rnum); } else if (potentialRingStartAtoms.size() > 1) { mprinterr("Error: Multiple potential ring start atoms:\n"); @@ -926,7 +929,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c it != potentialRingStartAtoms.end(); ++it) mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - err = 1; + stat = ID_ERR; return Sugar(rnum); } @@ -1074,7 +1077,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c carbon_chain = RA; if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, RA)) { mprinterr("Error: Could not find remaining chain carbons.\n"); - err = 1; + stat = ID_ERR; return Sugar(rnum); } if (debug_ > 0) { @@ -1096,7 +1099,7 @@ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology c } if (RA.empty() || ring_oxygen_atom == -1) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); - err = 1; + stat = ID_ERR; return Sugar(rnum); } if (debug_ > 0) @@ -1395,6 +1398,104 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, return 0; } +/** For each sugar, see if the anomeric carbon is actually terminal and needs + * to be a separate ROH residue. + */ +int Exec_PrepareForLeap::CheckIfSugarsAreTerminal(std::string const& sugarMaskStr, Topology& topIn) +const +{ + AtomMask sugarMask(sugarMaskStr); + mprintf("\tSeaching for terminal sugars selected by '%s'\n", sugarMask.MaskString()); + if (topIn.SetupIntegerMask( sugarMask )) return 1; + sugarMask.MaskInfo(); + if (sugarMask.None()) { + mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); + return 0; + } + //CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); + // Get sugar residue numbers. Save atom indices since residue numbers + // will become invalidated if we have to split residues. + Iarray sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); + // Try to identify sugar rings. + // The SugarIndices array will hold the atom indices for anomeric carbons + // and ring oxygens. + typedef std::pair AtomPair; + std::vector SugarIndices; + SugarIndices.reserve( sugarResNums.size() ); + for (Iarray::const_iterator rnum = sugarResNums.begin(); + rnum != sugarResNums.end(); ++rnum) + { + IdSugarRingStatType stat; + Sugar sugar = IdSugarRing(*rnum, topIn, stat); + if (stat == ID_ERR) { + if (errorsAreFatal_) { + mprinterr("Error: During terminal sugar search, problem identifying sugar ring for %s\n", + topIn.TruncResNameOnumId(*rnum).c_str()); + return 1; + } else + mprintf("Warning: During terminal sugar search, problem identifying sugar ring for %s\n", + topIn.TruncResNameOnumId(*rnum).c_str()); + } + if (!sugar.NotSet()) { + mprintf("DEBUG: Sugar: %s\n", topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); + SugarIndices.push_back( AtomPair(sugar.AnomericAtom(), sugar.RingOxygenAtom()) ); + } + } + + // Loop over sugar indices + for (std::vector::iterator ac_ro = SugarIndices.begin(); + ac_ro != SugarIndices.end(); ++ac_ro) + { + int anomericAtom = ac_ro->first; + int ringOxygen = ac_ro->second; + int rnum = topIn[anomericAtom].ResNum(); + std::string sugarName = topIn.TruncResNameOnumId(rnum); + // Is the anomeric carbon bonded to an oxygen that is part of this residue. + int o1_atom = -1; + for (Atom::bond_iterator bat = topIn[anomericAtom].bondbegin(); + bat != topIn[anomericAtom].bondend(); ++bat) + { + if (topIn[*bat].ResNum() == rnum && + *bat != ringOxygen && + topIn[*bat].Element() == Atom::OXYGEN) { + if (o1_atom != -1) { + mprintf("Warning: Anomeric atom '%s %s' bonded to more than 1 oxygen.\n", + sugarName.c_str(), *(topIn[anomericAtom].Name())); + o1_atom = -1; + break; + } else + o1_atom = *bat; + } + } + if (o1_atom == -1) continue; + Iarray selected(1, o1_atom); + // Ensure the oxygen is itself terminal (no other bonds or only H) + if (topIn[o1_atom].Nbonds() > 1) { + for (Atom::bond_iterator bat = topIn[o1_atom].bondbegin(); + bat != topIn[o1_atom].bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::HYDROGEN) + selected.push_back( *bat ); + else if (*bat != anomericAtom) { + // Bonded to something other than H. + continue; + } + } + } + mprintf("DEBUG: In-residue oxygen bonded to anomeric carbon: '%s %s'\n", + sugarName.c_str(), *(topIn[o1_atom].Name())); + AtomMask ROH(selected, topIn.Natom()); + + //if (topIn.SplitResidue(ROH, "ROH")) { + // mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); + // return 1; + //} + } // End loop over sugar indices + + return 0; +} + + /** Prepare sugars for leap. */ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, Frame const& frameIn, CpptrajFile* outfile, @@ -1416,9 +1517,9 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, for (Iarray::const_iterator rnum = sugarResNums.begin(); rnum != sugarResNums.end(); ++rnum) { - int err = 0; - Sugars.push_back( IdSugarRing(*rnum, topIn, err) ); - if (err != 0) { + IdSugarRingStatType stat; + Sugars.push_back( IdSugarRing(*rnum, topIn, stat) ); + if (stat == ID_ERR) { if (errorsAreFatal_) { mprinterr("Error: Problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); @@ -1426,7 +1527,8 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, } else mprintf("Warning: Problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); - } + } else if (stat == ID_MISSING_O) + resStat_[*rnum] = SUGAR_MISSING_RING_O; Sugars.back().PrintInfo( topIn ); } // For each sugar residue, try to fill in missing linkages @@ -1446,6 +1548,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, } else { mprintf("\tNot attempting to identify missing linkages to sugar anomeric carbons.\n"); } + // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. for (std::vector::const_iterator sugar = Sugars.begin(); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 6f67457983..3ccba7a51d 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -36,6 +36,7 @@ class Exec_PrepareForLeap : public Exec { void LeapBond(int,int,Topology const&, CpptrajFile*) const; // int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; int FindRemainingChainCarbons(Iarray&, int, Topology const&, int, Iarray const&) const; + /// Try to find any missing bonds to C1 atoms int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; /// Determine orientation around anomeric carbon int CalcAnomericTorsion(double&, int, int, int, Iarray const&, @@ -53,8 +54,10 @@ class Exec_PrepareForLeap : public Exec { enum ChiralRetType { ERR = 0, IS_S, IS_R }; ChiralRetType CalcChiralAtomTorsion(double&, int, Topology const&, Frame const&) const; + /// Error status for IdSugarRing + enum IdSugarRingStatType { ID_OK = 0, ID_ERR, ID_MISSING_O }; /// \return Sugar with atom indices set up - Sugar IdSugarRing(int, Topology const&, int&); + Sugar IdSugarRing(int, Topology const&, IdSugarRingStatType&) const; int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; /// Return type for DetermineAnomericForm @@ -63,6 +66,9 @@ class Exec_PrepareForLeap : public Exec { AnomerRetType DetermineAnomericForm(bool&, Sugar const&, Topology const&, Frame const&) const; int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); + /// Determine if sugars are terminal and need an ROH residue + int CheckIfSugarsAreTerminal(std::string const&, Topology&) const; + int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, @@ -116,6 +122,7 @@ class Exec_PrepareForLeap : public Exec { // ----- Sugar class ---------------------------------------------------------- class Exec_PrepareForLeap::Sugar { public: + /// CONSTRUCTOR - residue number, incomplete setup Sugar(int); Sugar(int,int,int,int,int,Iarray const&,Iarray const&); From 60c887913e06445d2900709d58c051bdaf0da88b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 08:56:25 -0400 Subject: [PATCH 164/368] Add back non-map version of SplitResidue --- src/Topology.cpp | 7 +++++++ src/Topology.h | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Topology.cpp b/src/Topology.cpp index bb4d0493cd..8656f46815 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1797,6 +1797,13 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName, return 0; } +/** Split atoms selected in a single residue into a new residue. */ +int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName) +{ + std::vector atomMap; + return SplitResidue(maskIn, newName, atomMap); +} + /** \return BondArray with bonds for which both atoms are still present. * \param atomMap format Map[oldAtom]=newAtom */ diff --git a/src/Topology.h b/src/Topology.h index 63cea6a02a..0d2d5fedb9 100644 --- a/src/Topology.h +++ b/src/Topology.h @@ -224,8 +224,10 @@ class Topology { Topology* ModifyByMap(std::vector const& m) const { return ModifyByMap(m, true); } - /// Split selected atoms in a residue into a new residue + /// Split selected atoms in a residue into a new residue, populate the atom map int SplitResidue(AtomMask const&, NameType const&, std::vector&); + /// Split selected atoms in a residue into a new residue + int SplitResidue(AtomMask const&, NameType const&); /// Append topology to this one. int AppendTop( Topology const& ); private: From b1c0bcb33dcefc6f8d56c36ec11a12198de668b1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 09:08:54 -0400 Subject: [PATCH 165/368] Slight reordering of things to make CheckIfSugarsAreTerminal work --- src/Exec_PrepareForLeap.cpp | 88 +++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 37 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 51f8d47203..059f6aece2 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1443,13 +1443,16 @@ const } // Loop over sugar indices - for (std::vector::iterator ac_ro = SugarIndices.begin(); - ac_ro != SugarIndices.end(); ++ac_ro) + for (std::vector::const_iterator ac_ro = SugarIndices.begin(); + ac_ro != SugarIndices.end(); ++ac_ro) { int anomericAtom = ac_ro->first; int ringOxygen = ac_ro->second; int rnum = topIn[anomericAtom].ResNum(); std::string sugarName = topIn.TruncResNameOnumId(rnum); + mprintf("DEBUG: terminal search %s ano. C= %s ring O= %s\n", + sugarName.c_str(), topIn.AtomMaskName(anomericAtom).c_str(), + topIn.AtomMaskName(ringOxygen).c_str()); // Is the anomeric carbon bonded to an oxygen that is part of this residue. int o1_atom = -1; for (Atom::bond_iterator bat = topIn[anomericAtom].bondbegin(); @@ -2317,6 +2320,52 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } + // Get sugar mask or default sugar mask + AtomMask sugarMask; + std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); + if (!sugarmaskstr.empty()) { + if (!prepare_sugars) { + mprinterr("Error: Cannot specify 'nosugars' and 'sugarmask'\n"); + return CpptrajState::ERR; + } + if (sugarMask.SetMaskString(sugarmaskstr)) { + mprinterr("Error: Setting sugar mask string.\n"); + return CpptrajState::ERR; + } + } else if (prepare_sugars) { + // No sugar mask specified; create one from names in pdb_to_glycam_ map. + sugarmaskstr.assign(":"); + for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) + { + if (mit != pdb_to_glycam_.begin()) + sugarmaskstr.append(","); + sugarmaskstr.append( mit->first.Truncated() ); + } + if (sugarMask.SetMaskString(sugarmaskstr)) { + mprinterr("Error: Setting sugar mask string.\n"); + return CpptrajState::ERR; + } + } + + if (prepare_sugars) { + // Set up an AtomMap for this residue to help determine stereocenters + myMap_.SetDebug(debug_); + if (myMap_.Setup(topIn, frameIn)) { + mprinterr("Error: Atom map setup failed\n"); + return CpptrajState::ERR; + } + myMap_.DetermineAtomIDs(); + + // Check if any sugars are in fact terminal and need the C1 oxygen split + // into an ROH residue. + // This is done before any identification takes places since it may + // involve reordering the topology if residues are split. + if (CheckIfSugarsAreTerminal(sugarmaskstr, topIn)) { + mprinterr("Error: Checking for terminal sugars failed.\n"); + return CpptrajState::ERR; + } + } + // Do histidine detection before H atoms are removed Iarray HisResIdxs; std::vector HisResNames; @@ -2350,33 +2399,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); - // Get sugar mask or default sugar mask - AtomMask sugarMask; - std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); - if (!sugarmaskstr.empty()) { - if (!prepare_sugars) { - mprinterr("Error: Cannot specify 'nosugars' and 'sugarmask'\n"); - return CpptrajState::ERR; - } - if (sugarMask.SetMaskString(sugarmaskstr)) { - mprinterr("Error: Setting sugar mask string.\n"); - return CpptrajState::ERR; - } - } else if (prepare_sugars) { - // No sugar mask specified; create one from names in pdb_to_glycam_ map. - sugarmaskstr.assign(":"); - for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) - { - if (mit != pdb_to_glycam_.begin()) - sugarmaskstr.append(","); - sugarmaskstr.append( mit->first.Truncated() ); - } - if (sugarMask.SetMaskString(sugarmaskstr)) { - mprinterr("Error: Setting sugar mask string.\n"); - return CpptrajState::ERR; - } - } - // Get masks for molecules now since topology may be modified later. std::vector molMasks; std::string mstr = argIn.GetStringKey("molmask"); @@ -2437,14 +2459,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (prepare_sugars) { - // Set up an AtomMap for this residue to help determine stereocenters - myMap_.SetDebug(debug_); - if (myMap_.Setup(topIn, frameIn)) { - mprinterr("Error: Atom map setup failed\n"); - return CpptrajState::ERR; - } - myMap_.DetermineAtomIDs(); - if (PrepareSugars(sugarMask, topIn, frameIn, outfile, !argIn.hasKey("noc1search"))) { mprinterr("Error: Sugar preparation failed.\n"); return CpptrajState::ERR; From 56be070007484420cebe5a64b06618b44b1c3e33 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 09:31:34 -0400 Subject: [PATCH 166/368] Do the residue split and frame reordering --- src/Exec_PrepareForLeap.cpp | 23 ++++++++++++++++------- src/Exec_PrepareForLeap.h | 4 ++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 059f6aece2..e689044f9a 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1401,7 +1401,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, /** For each sugar, see if the anomeric carbon is actually terminal and needs * to be a separate ROH residue. */ -int Exec_PrepareForLeap::CheckIfSugarsAreTerminal(std::string const& sugarMaskStr, Topology& topIn) +int Exec_PrepareForLeap::CheckIfSugarsAreTerminal(std::string const& sugarMaskStr, + Topology& topIn, Frame& frameIn) const { AtomMask sugarMask(sugarMaskStr); @@ -1489,10 +1490,17 @@ const sugarName.c_str(), *(topIn[o1_atom].Name())); AtomMask ROH(selected, topIn.Natom()); - //if (topIn.SplitResidue(ROH, "ROH")) { - // mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); - // return 1; - //} + // Split the hydroxyl into a new residue named ROH for Glycam. + // This may involve reordering atoms within the residue, but not + // any other atoms, so we should not have to update SugarIndices. + Iarray atomMap; + if (topIn.SplitResidue(ROH, "ROH", atomMap)) { + mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); + return 1; + } + // Reorder the frame to match + Frame oldFrame = frameIn; + frameIn.SetCoordinatesByMap( oldFrame, atomMap ); } // End loop over sugar indices return 0; @@ -2348,7 +2356,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } if (prepare_sugars) { - // Set up an AtomMap for this residue to help determine stereocenters + // Set up an AtomMap for this residue to help determine stereocenters. + // This is required by the IdSugarRing() function. myMap_.SetDebug(debug_); if (myMap_.Setup(topIn, frameIn)) { mprinterr("Error: Atom map setup failed\n"); @@ -2360,7 +2369,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // into an ROH residue. // This is done before any identification takes places since it may // involve reordering the topology if residues are split. - if (CheckIfSugarsAreTerminal(sugarmaskstr, topIn)) { + if (CheckIfSugarsAreTerminal(sugarmaskstr, topIn, frameIn)) { mprinterr("Error: Checking for terminal sugars failed.\n"); return CpptrajState::ERR; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 3ccba7a51d..743f05ec55 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -67,13 +67,13 @@ class Exec_PrepareForLeap : public Exec { int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); /// Determine if sugars are terminal and need an ROH residue - int CheckIfSugarsAreTerminal(std::string const&, Topology&) const; + int CheckIfSugarsAreTerminal(std::string const&, Topology&, Frame&) const; int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*); - /// \return true if residue name is recognized + /// \return true if residue name is a recognized PDB name bool IsRecognizedPdbRes(NameType const&) const; /// \return Array of residue nums with unrecognized names Iarray GetUnrecognizedPdbResidues(Topology const&) const; From 79e7062af2ff798077ff91719df64d36cdba7491 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 09:36:35 -0400 Subject: [PATCH 167/368] When PDB residue number is via topology res index, no need for insertion codes --- src/Traj_PDBfile.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Traj_PDBfile.cpp b/src/Traj_PDBfile.cpp index 51c3621567..9d65d2b939 100644 --- a/src/Traj_PDBfile.cpp +++ b/src/Traj_PDBfile.cpp @@ -867,6 +867,12 @@ int Traj_PDBfile::writeFrame(int set, Frame const& frameOut) { for (int aidx = 0; aidx != pdbTop_->Natom(); aidx++, Xptr += 3) { Atom const& atom = (*pdbTop_)[aidx]; int res = atom.ResNum(); + char resicode; + if (resNumType_ == TOPOLOGY) + // With topology residue numbering no need for insertion codes + resicode = ' '; + else + resicode = pdbTop_->Res(res).Icode(); int resnum; if (resNumType_ == ORIGINAL) resnum = pdbTop_->Res(res).OriginalResNum(); @@ -909,7 +915,7 @@ int Traj_PDBfile::writeFrame(int set, Frame const& frameOut) { // TODO determine formal charges? file_.WriteCoord(rectype, anum, atomName, altLoc, resNames_[res], chainID_[res], resnum, - pdbTop_->Res(res).Icode(), + resicode, Xptr[0], Xptr[1], Xptr[2], Occ, Bfac, atom.ElementName(), 0, dumpq_); if (adpdata_ != 0 && adpidx < adpdata_->Size()) { @@ -934,7 +940,7 @@ int Traj_PDBfile::writeFrame(int set, Frame const& frameOut) { // FIXME: Should anum not be incremented until after? file_.WriteRecordHeader(PDBfile::TER, anum, "", ' ', resNames_[res], chainID_[res], resnum, - pdbTop_->Res(res).Icode(), atom.ElementName()); + resicode, atom.ElementName()); anum += ter_num_; ++terIdx; } From 07c9fe05e0499e3a4f59009ecdec05e5bc7db34e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 09:40:16 -0400 Subject: [PATCH 168/368] Hide some debug info --- src/Exec_PrepareForLeap.cpp | 12 +++++++----- src/Topology.cpp | 12 ++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e689044f9a..b8e19795fd 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1438,7 +1438,7 @@ const topIn.TruncResNameOnumId(*rnum).c_str()); } if (!sugar.NotSet()) { - mprintf("DEBUG: Sugar: %s\n", topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); + //mprintf("DEBUG: Sugar: %s\n", topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); SugarIndices.push_back( AtomPair(sugar.AnomericAtom(), sugar.RingOxygenAtom()) ); } } @@ -1451,9 +1451,10 @@ const int ringOxygen = ac_ro->second; int rnum = topIn[anomericAtom].ResNum(); std::string sugarName = topIn.TruncResNameOnumId(rnum); - mprintf("DEBUG: terminal search %s ano. C= %s ring O= %s\n", - sugarName.c_str(), topIn.AtomMaskName(anomericAtom).c_str(), - topIn.AtomMaskName(ringOxygen).c_str()); + if (debug_ > 0) + mprintf("DEBUG: terminal search %s ano. C= %s ring O= %s\n", + sugarName.c_str(), topIn.AtomMaskName(anomericAtom).c_str(), + topIn.AtomMaskName(ringOxygen).c_str()); // Is the anomeric carbon bonded to an oxygen that is part of this residue. int o1_atom = -1; for (Atom::bond_iterator bat = topIn[anomericAtom].bondbegin(); @@ -1486,8 +1487,9 @@ const } } } - mprintf("DEBUG: In-residue oxygen bonded to anomeric carbon: '%s %s'\n", + mprintf("\tIn-residue oxygen bonded to anomeric carbon: '%s %s'\n", sugarName.c_str(), *(topIn[o1_atom].Name())); + mprintf("\t Will split into ROH group.\n"); AtomMask ROH(selected, topIn.Natom()); // Split the hydroxyl into a new residue named ROH for Glycam. diff --git a/src/Topology.cpp b/src/Topology.cpp index 8656f46815..2ebbc7d889 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1719,8 +1719,8 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName, for (int at = residues_[tgtResNum+1].FirstAtom(); at != Natom(); at++) atomMap.push_back(at); } - mprintf("DEBUG: New res0: index %i to %i\n", r0firstAtom, r0lastAtom); - mprintf("DEBUG: New res1: index %i to %i\n", r1firstAtom, r1lastAtom); + //mprintf("DEBUG: New res0: index %i to %i\n", r0firstAtom, r0lastAtom); + //mprintf("DEBUG: New res1: index %i to %i\n", r1firstAtom, r1lastAtom); // Reorder topology Topology* newTop = ModifyByMap( atomMap, false ); @@ -1728,10 +1728,10 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName, mprinterr("Internal Error: SplitResidue: Could not reorder the topology.\n"); return 1; } - mprintf("DEBUG: New res0: Atoms %s to %s\n", - newTop->AtomMaskName(r0firstAtom).c_str(), newTop->AtomMaskName(r0lastAtom-1).c_str()); - mprintf("DEBUG: New res1: Atoms %s to %s\n", - newTop->AtomMaskName(r1firstAtom).c_str(), newTop->AtomMaskName(r1lastAtom-1).c_str()); + //mprintf("DEBUG: New res0: Atoms %s to %s\n", + // newTop->AtomMaskName(r0firstAtom).c_str(), newTop->AtomMaskName(r0lastAtom-1).c_str()); + //mprintf("DEBUG: New res1: Atoms %s to %s\n", + // newTop->AtomMaskName(r1firstAtom).c_str(), newTop->AtomMaskName(r1lastAtom-1).c_str()); //DEBUG // *this = *newTop; // DEBUG // delete newTop; // DEBUG From 747af35e2b6f5c8209dfc33de5113082fd38fa4a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 10:04:09 -0400 Subject: [PATCH 169/368] Add notermsearch keyword to prevent searching for terminal sugars --- src/Exec_PrepareForLeap.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b8e19795fd..ee218fcabb 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2144,7 +2144,9 @@ void Exec_PrepareForLeap::Help() const "\t[{nodisulfides |\n" "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" - "\t[{nosugars | sugarmask [noc1search]}] [resmapfile ]\n" + "\t[{nosugars |\n" + "\t sugarmask [noc1search] [notermsearch] [resmapfile ]\n" + "\t }]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" " with the LEaP program from AmberTools. Any existing/potential\n" @@ -2367,13 +2369,15 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } myMap_.DetermineAtomIDs(); - // Check if any sugars are in fact terminal and need the C1 oxygen split - // into an ROH residue. - // This is done before any identification takes places since it may - // involve reordering the topology if residues are split. - if (CheckIfSugarsAreTerminal(sugarmaskstr, topIn, frameIn)) { - mprinterr("Error: Checking for terminal sugars failed.\n"); - return CpptrajState::ERR; + if (!argIn.hasKey("notermsearch")) { + // Check if any sugars are in fact terminal and need the C1 oxygen split + // into an ROH residue. + // This is done before any identification takes places since it may + // involve reordering the topology if residues are split. + if (CheckIfSugarsAreTerminal(sugarmaskstr, topIn, frameIn)) { + mprinterr("Error: Checking for terminal sugars failed.\n"); + return CpptrajState::ERR; + } } } From 3d87bed85f283f2c6afa76d081045d0bcdae735f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 10:35:14 -0400 Subject: [PATCH 170/368] Really no need for the atoms selected to be consecutive as long as they are in the same residue --- src/Topology.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Topology.cpp b/src/Topology.cpp index 2ebbc7d889..439f13a0fd 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -1668,19 +1668,19 @@ int Topology::SplitResidue(AtomMask const& maskIn, NameType const& newName, } int tgtResNum = Atoms()[maskIn[0]].ResNum(); Residue const& res = residues_[tgtResNum]; - // Check that all atoms are consecutive and in the same residue. + // Check that all atoms are in the same residue. if (maskIn.Nselected() > 1) { - int lastAtom = maskIn[0]; + //int lastAtom = maskIn[0]; for (int idx = 1; idx < maskIn.Nselected(); idx++) { - if (maskIn[idx] - lastAtom > 1) { - mprinterr("Error: SplitResidue: Atoms '%s' and '%s' are not consecutive.\n", - AtomMaskName(maskIn[idx]).c_str(), AtomMaskName(lastAtom).c_str()); - return 1; - } - lastAtom = maskIn[idx]; + //if (maskIn[idx] - lastAtom > 1) { + // mprinterr("Error: SplitResidue: Atoms '%s' and '%s' are not consecutive.\n", + // AtomMaskName(maskIn[idx]).c_str(), AtomMaskName(lastAtom).c_str()); + // return 1; + //} + //lastAtom = maskIn[idx]; if (Atoms()[maskIn[idx]].ResNum() != tgtResNum) { mprinterr("Error: SplitResidue: Atoms '%s' and '%s' are in different residues.\n", - AtomMaskName(maskIn[idx]).c_str(), AtomMaskName(lastAtom).c_str()); + AtomMaskName(maskIn[idx]).c_str(), AtomMaskName(maskIn[0]).c_str()); return 1; } } From ef11856963277c2057e090147568247e331d78f9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 10:38:41 -0400 Subject: [PATCH 171/368] Recognized terminal hydroxyl residue name as valid to link to --- src/Exec_PrepareForLeap.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ee218fcabb..7bf5ceac9b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1345,6 +1345,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); ChangeResName( pres, lname->second ); resStat_[topIn[*bat].ResNum()] = VALIDATED; + } else if (pres.Name() == "ROH") { // ROH is Glycam terminal hydroxyl + if (debug_ > 0) + mprintf("DEBUG: '%s' is terminal hydroxyl.\n", *(pres.Name())); + resStat_[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); resStat_[topIn[*bat].ResNum()] = UNRECOGNIZED_SUGAR_LINKAGE; From 786638d83d10d2cfe4e74f93bb8319c10502762e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 10:44:37 -0400 Subject: [PATCH 172/368] Allow terminal hydroxyl name to be specified --- src/Exec_PrepareForLeap.cpp | 9 ++++++--- src/Exec_PrepareForLeap.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7bf5ceac9b..77a0d4569e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1345,7 +1345,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); ChangeResName( pres, lname->second ); resStat_[topIn[*bat].ResNum()] = VALIDATED; - } else if (pres.Name() == "ROH") { // ROH is Glycam terminal hydroxyl + } else if (pres.Name() == terminalHydroxylName_) { if (debug_ > 0) mprintf("DEBUG: '%s' is terminal hydroxyl.\n", *(pres.Name())); resStat_[topIn[*bat].ResNum()] = VALIDATED; @@ -1493,14 +1493,14 @@ const } mprintf("\tIn-residue oxygen bonded to anomeric carbon: '%s %s'\n", sugarName.c_str(), *(topIn[o1_atom].Name())); - mprintf("\t Will split into ROH group.\n"); + mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); AtomMask ROH(selected, topIn.Natom()); // Split the hydroxyl into a new residue named ROH for Glycam. // This may involve reordering atoms within the residue, but not // any other atoms, so we should not have to update SugarIndices. Iarray atomMap; - if (topIn.SplitResidue(ROH, "ROH", atomMap)) { + if (topIn.SplitResidue(ROH, terminalHydroxylName_, atomMap)) { mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); return 1; } @@ -2150,6 +2150,7 @@ void Exec_PrepareForLeap::Help() const "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars |\n" "\t sugarmask [noc1search] [notermsearch] [resmapfile ]\n" + "\t [terminalhydroxylname ]\n" "\t }]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" @@ -2216,6 +2217,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); solventResName_ = argIn.GetStringKey("solventresname", "HOH"); mprintf("\tSolvent residue name: %s\n", solventResName_.c_str()); + terminalHydroxylName_ = argIn.GetStringKey("terminalhydroxylname", "ROH"); + mprintf("\tTerminal hydroxyl name: %s\n", terminalHydroxylName_.c_str()); bool prepare_sugars = !argIn.hasKey("nosugars"); if (!prepare_sugars) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 743f05ec55..d9c01168f9 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -117,6 +117,7 @@ class Exec_PrepareForLeap : public Exec { bool errorsAreFatal_; ///< If false, try to skip errors. int debug_; ///< Debug level std::string solventResName_; ///< Solvent residue name + std::string terminalHydroxylName_; ///< Terminal hydroxyl name AtomMap myMap_; }; // ----- Sugar class ---------------------------------------------------------- From 2dadcb38e64eae5ee5c9e7e3cd1e0aa5dbeff307 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 12:18:31 -0400 Subject: [PATCH 173/368] Add samarium --- src/Atom.cpp | 8 ++++---- src/Atom.h | 36 ++++++++++++++++++++++-------------- src/MapAtom.cpp | 6 +++--- src/MapAtom.h | 2 +- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/Atom.cpp b/src/Atom.cpp index 0434067da6..bb4b7e1199 100644 --- a/src/Atom.cpp +++ b/src/Atom.cpp @@ -16,7 +16,7 @@ const int Atom::AtomicElementNum_[NUMELEMENTS_] = { 0, 75, 86, 88, 14, 21, 34, 38, 50, 51, 22, 43, 52, 73, 81, 23, 74, 54, 40, - 39, 71, + 39, 71, 62, 0 }; @@ -35,7 +35,7 @@ const char* Atom::AtomicElementName_[NUMELEMENTS_] = { "??", "RE", "RN", "RA", "SI", "SC", "SE", "SR", "SN", "SB", "TI", "TC", "TE", "TA", "TL", "V", "W", "XE", "ZR", - "Y", "LU", + "Y", "LU", "SM", "XP" }; @@ -53,7 +53,7 @@ const double Atom::AtomicElementMass_[NUMELEMENTS_] = { 1.0, 186.207, 222, 226, 28.0855, 44.955912, 78.96, 87.62, 118.710, 121.760, 47.867, 98, 127.60, 180.94788, 204.3833, 50.9415, 183.84, 131.293, 91.224, - 88.90585, 174.9668, + 88.90585, 174.9668, 150.36, 0.0 }; @@ -71,7 +71,7 @@ const double Atom::AtomicElementRadius_[NUMELEMENTS_] = { 1.0, 1.000, 1.000, 1.407, 1.000, 1.000, 1.255, 1.000, 1.000, 1.303, 1.266, 1.745, 1.000, 1.000, 1.000, 1.000, 1.000, 2.019, 2.419, 1.000, 1.000, 1.000, 1.666, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, - 1.000, 1.000, 1.000, + 1.000, 1.000, 1.000, 1.850, 0.000 /* extra point has no radius */ }; diff --git a/src/Atom.h b/src/Atom.h index 40233ef33b..57a7f5ada7 100644 --- a/src/Atom.h +++ b/src/Atom.h @@ -6,20 +6,28 @@ /// Hold information for an atom class Atom { public: + /** Recognized atomic elements. This must be kept in sync with: + * AtomicElementNum_ + * AtomicElementName_ + * AtomicElementMass_ + * AtomicElementRadius_ + * NUMELEMENTS_ + * MapAtom::AtomicElementChar + */ enum AtomicElementType { UNKNOWN_ELEMENT = 0, - HYDROGEN, BORON, CARBON, NITROGEN, OXYGEN, FLUORINE, - PHOSPHORUS, SULFUR, CHLORINE, BROMINE, IRON, CALCIUM, - IODINE, MAGNESIUM, COPPER, LITHIUM, POTASSIUM, RUBIDIUM, - CESIUM, ZINC, SODIUM, ALUMINUM, ARGON, ARSENIC, - SILVER, GOLD, ASTATINE, BERYLLIUM, BARIUM, BISMUTH, - CHROMIUM, COBALT, CADMIUM, FRANCIUM, GALLIUM, GERMANIUM, - HELIUM, HAFNIUM, MERCURY, INDIUM, IRIDIUM, KRYPTON, - MANGANESE, MOLYBDENUM, NEON, NICKEL, NIOBIUM, OSMIUM, - PALLADIUM, PLATINUM, LEAD, POLONIUM, RUTHENIUM, RHODIUM, - RHENIUM, RADON, RADIUM, SILICON, SCANDIUM, SELENIUM, - STRONTIUM, TIN, ANTIMONY, TITANIUM, TECHNETIUM, TELLURIUM, - TANTALUM, THALLIUM, VANADIUM, TUNGSTEN, XENON, ZIRCONIUM, - YTTRIUM, LUTETIUM, + HYDROGEN, BORON, CARBON, NITROGEN, OXYGEN, FLUORINE, // 6 + PHOSPHORUS, SULFUR, CHLORINE, BROMINE, IRON, CALCIUM, // 12 + IODINE, MAGNESIUM, COPPER, LITHIUM, POTASSIUM, RUBIDIUM, // 18 + CESIUM, ZINC, SODIUM, ALUMINUM, ARGON, ARSENIC, // 24 + SILVER, GOLD, ASTATINE, BERYLLIUM, BARIUM, BISMUTH, // 30 + CHROMIUM, COBALT, CADMIUM, FRANCIUM, GALLIUM, GERMANIUM, // 36 + HELIUM, HAFNIUM, MERCURY, INDIUM, IRIDIUM, KRYPTON, // 42 + MANGANESE, MOLYBDENUM, NEON, NICKEL, NIOBIUM, OSMIUM, // 48 + PALLADIUM, PLATINUM, LEAD, POLONIUM, RUTHENIUM, RHODIUM, // 54 + RHENIUM, RADON, RADIUM, SILICON, SCANDIUM, SELENIUM, // 60 + STRONTIUM, TIN, ANTIMONY, TITANIUM, TECHNETIUM, TELLURIUM, // 66 + TANTALUM, THALLIUM, VANADIUM, TUNGSTEN, XENON, ZIRCONIUM, // 72 + YTTRIUM, LUTETIUM, SAMARIUM, EXTRAPT }; // Constructors and assignment --------------- @@ -88,7 +96,7 @@ class Atom { /// Determine element from given atomic number. Use mass/name if number < 1. void DetermineElement(int); protected: - static const size_t NUMELEMENTS_ = 76; + static const size_t NUMELEMENTS_ = 77; private: static CPPTRAJ_EXPORT const int AtomicElementNum_[]; static CPPTRAJ_EXPORT const char* AtomicElementName_[]; diff --git a/src/MapAtom.cpp b/src/MapAtom.cpp index 9b8703ca65..4801b216cb 100644 --- a/src/MapAtom.cpp +++ b/src/MapAtom.cpp @@ -4,7 +4,7 @@ * their names; for less common elements just use whatever * characters are handy. */ -const char MapAtom::AtomicElementChar[Atom::NUMELEMENTS_] = { 0, +const char MapAtom::AtomicElementChar_[Atom::NUMELEMENTS_] = { 0, 'H', 'B', 'C', 'N', 'O', 'F', 'P', 'S', 'X', 'Y', 'f', 'c', 'I', 'M', 'U', 'L', 'K', 'R', @@ -17,7 +17,7 @@ const char MapAtom::AtomicElementChar[Atom::NUMELEMENTS_] = { 0, '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', - '\'', '`', + '\'', '`', 'm', 'x' }; @@ -55,7 +55,7 @@ MapAtom::MapAtom(const Atom& rhs, const double* xyzIn) : Atom(rhs), isMapped_(false), complete_(false), Nduplicated_(0), - name_(AtomicElementChar[Element()]) + name_(AtomicElementChar_[Element()]) { std::copy( xyzIn, xyzIn + 3, xyz_ ); } diff --git a/src/MapAtom.h b/src/MapAtom.h index 58f259ad67..d82afa252d 100644 --- a/src/MapAtom.h +++ b/src/MapAtom.h @@ -31,7 +31,7 @@ class MapAtom : public Atom { void SetNotComplete() { complete_ = false; } void SetNotChiral() { isChiral_ = false; } private: - static const char AtomicElementChar[]; + static const char AtomicElementChar_[]; double xyz_[3]; ///< Coordinates of atom bool isChiral_; ///< true: Atom is a chiral center bool boundToChiral_; ///< true: Atom is bound to a chiral center. From d969831db912aa8371df5b6bd56d17d1c8ed9afd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 12:53:28 -0400 Subject: [PATCH 174/368] When searching for new bonds to anomeric carbon, do not search if that carbon is already bonded to another residue --- src/Exec_PrepareForLeap.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 77a0d4569e..3a9b223419 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -471,6 +471,17 @@ const int rnum1 = sugar.ResNum(); int c_beg = sugar.AnomericAtom(); Residue const& res1 = topIn.SetRes(rnum1); + // If the anomeric atom is already bonded to another residue, skip this. + for (Atom::bond_iterator bat = topIn[c_beg].bondbegin(); + bat != topIn[c_beg].bondend(); ++bat) + { + if (topIn[*bat].ResNum() != rnum1) { + if (debug_ > 0) + mprintf("\tSugar %s anomeric carbon is already bonded to another residue, skipping.\n", + topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); + return 0; + } + } // residue first atom to residue first atom cutoff^2 const double rescut2 = 64.0; @@ -2485,6 +2496,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprinterr("Error: Sugar preparation failed.\n"); return CpptrajState::ERR; } + } else { + mprintf("\tNot preparing sugars.\n"); } // Count any solvent molecules From a3bcc09c0cae03f17fe0f447a1cff773bf08622a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 13:40:39 -0400 Subject: [PATCH 175/368] Do initial map creation after hydrogens are removed so as not to invalidate the map. Recreate the map if searching for terminal sugars since this can also invalidate the map. --- src/AtomMap.cpp | 5 +++ src/AtomMap.h | 2 + src/Exec_PrepareForLeap.cpp | 73 +++++++++++++++++++++---------------- 3 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/AtomMap.cpp b/src/AtomMap.cpp index 3d0609d2bf..3d3bdd3371 100644 --- a/src/AtomMap.cpp +++ b/src/AtomMap.cpp @@ -89,6 +89,11 @@ void AtomMap::ResetMapping() { } } +// AtomMap::ClearMap() +void AtomMap::ClearMap() { + mapatoms_.clear(); +} + // AtomMap::BondIsRepeated() /** Check if the atomID of the specified atom (bondedAtom) bonded to * is the same as the atomID of any other non-mapped atom bonded to . diff --git a/src/AtomMap.h b/src/AtomMap.h index 4d61aee317..3705fc6aaa 100644 --- a/src/AtomMap.h +++ b/src/AtomMap.h @@ -19,6 +19,8 @@ class AtomMap { int SetupResidue(Topology const&, Frame const&, int); /// Reset any previously set mapping information. void ResetMapping(); + /// Clear the map + void ClearMap(); bool BondIsRepeated(int,int) const; void DetermineAtomIDs(); void MarkAtomComplete(int,bool); diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3a9b223419..1f96aa0b32 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -969,7 +969,7 @@ const if (unique1 == unique2) { // At least two of the atoms bonded to this atom look the same. Not chiral. if (debug_ > 1) - mprintf("DEBUG: unique strings match '%s' '%s'\n", unique1.c_str(), unique2.c_str()); + mprintf("DEBUG: unique strings match %s='%s' %s='%s'\n", *(topIn[*bat1].Name()), unique1.c_str(), *(topIn[*bat2].Name()), unique2.c_str()); chiral = false; break; } @@ -2350,6 +2350,36 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } + // Do histidine detection before H atoms are removed + Iarray HisResIdxs; + std::vector HisResNames; + if (!argIn.hasKey("nohisdetect")) { + std::string nd1name = argIn.GetStringKey("nd1", "ND1"); + std::string ne2name = argIn.GetStringKey("ne2", "NE2"); + std::string hisname = argIn.GetStringKey("hisname", "HIS"); + std::string hiename = argIn.GetStringKey("hiename", "HIE"); + std::string hidname = argIn.GetStringKey("hidname", "HID"); + std::string hipname = argIn.GetStringKey("hipname", "HIP"); + mprintf("\tHistidine protonation detection:\n"); + mprintf("\t\tND1 atom name : %s\n", nd1name.c_str()); + mprintf("\t\tNE2 atom name : %s\n", ne2name.c_str()); + mprintf("\t\tHistidine original residue name : %s\n", hisname.c_str()); + mprintf("\t\tEpsilon-protonated residue name : %s\n", hiename.c_str()); + mprintf("\t\tDelta-protonated residue name : %s\n", hidname.c_str()); + mprintf("\t\tDoubly-protonated residue name : %s\n", hipname.c_str()); + if (DetermineHisProt( HisResNames, HisResIdxs, topIn, + nd1name, ne2name, + hisname, hiename, hidname, hipname)) { + mprinterr("Error: HIS protonation detection failed.\n"); + return CpptrajState::ERR; + } + } + + // Remove hydrogens + if (remove_h) { + if (RemoveHydrogens(topIn, frameIn)) return CpptrajState::ERR; + } + // Get sugar mask or default sugar mask AtomMask sugarMask; std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); @@ -2377,6 +2407,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } + // If preparing sugars, need to set up an atom map and potentially + // search for terminal sugars. Do this here after all atom + // modifications have been done. if (prepare_sugars) { // Set up an AtomMap for this residue to help determine stereocenters. // This is required by the IdSugarRing() function. @@ -2396,39 +2429,17 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprinterr("Error: Checking for terminal sugars failed.\n"); return CpptrajState::ERR; } + // Since CheckIfSugarsAreTerminal() can re-order atoms, need + // to recreate the map. + myMap_.ClearMap(); + if (myMap_.Setup(topIn, frameIn)) { + mprinterr("Error: Atom map second setup failed\n"); + return CpptrajState::ERR; + } + myMap_.DetermineAtomIDs(); } } - // Do histidine detection before H atoms are removed - Iarray HisResIdxs; - std::vector HisResNames; - if (!argIn.hasKey("nohisdetect")) { - std::string nd1name = argIn.GetStringKey("nd1", "ND1"); - std::string ne2name = argIn.GetStringKey("ne2", "NE2"); - std::string hisname = argIn.GetStringKey("hisname", "HIS"); - std::string hiename = argIn.GetStringKey("hiename", "HIE"); - std::string hidname = argIn.GetStringKey("hidname", "HID"); - std::string hipname = argIn.GetStringKey("hipname", "HIP"); - mprintf("\tHistidine protonation detection:\n"); - mprintf("\t\tND1 atom name : %s\n", nd1name.c_str()); - mprintf("\t\tNE2 atom name : %s\n", ne2name.c_str()); - mprintf("\t\tHistidine original residue name : %s\n", hisname.c_str()); - mprintf("\t\tEpsilon-protonated residue name : %s\n", hiename.c_str()); - mprintf("\t\tDelta-protonated residue name : %s\n", hidname.c_str()); - mprintf("\t\tDoubly-protonated residue name : %s\n", hipname.c_str()); - if (DetermineHisProt( HisResNames, HisResIdxs, topIn, - nd1name, ne2name, - hisname, hiename, hidname, hipname)) { - mprinterr("Error: HIS protonation detection failed.\n"); - return CpptrajState::ERR; - } - } - - // Remove hydrogens - if (remove_h) { - if (RemoveHydrogens(topIn, frameIn)) return CpptrajState::ERR; - } - // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); From bd170b1ff74f3d9194eecaf7a043d3e93e5aa949 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 14:51:46 -0400 Subject: [PATCH 176/368] HYP is recognized by Glycam --- dat/PDB_ResidueNames.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/dat/PDB_ResidueNames.txt b/dat/PDB_ResidueNames.txt index 3d4fb5e201..8944d187c4 100644 --- a/dat/PDB_ResidueNames.txt +++ b/dat/PDB_ResidueNames.txt @@ -16,6 +16,7 @@ GLY HIE HIP HIS +HYP ILE LEU LYN From 7afb77f442bb6b2cc3e933358640971e63f27ccf Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 14 Oct 2021 14:53:15 -0400 Subject: [PATCH 177/368] Add HYP, recognized by glycam --- src/Exec_PrepareForLeap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1f96aa0b32..a503c6f644 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -147,6 +147,7 @@ void Exec_PrepareForLeap::SetPdbResNames() { pdb_res_names_.insert("HIE"); pdb_res_names_.insert("HIP"); pdb_res_names_.insert("HIS"); + pdb_res_names_.insert("HYP"); // Recognized by Glycam pdb_res_names_.insert("ILE"); pdb_res_names_.insert("LEU"); pdb_res_names_.insert("LYN"); From 3a2165798b19a60ab6f52df10f1214578b0142bc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 08:46:32 -0400 Subject: [PATCH 178/368] Start moving C1 bond search to an earlier part of the process --- src/Exec_PrepareForLeap.cpp | 88 +++++++++++++++++++++++++++++++++++-- src/Exec_PrepareForLeap.h | 2 + 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a503c6f644..e472a18d92 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1414,6 +1414,74 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, return 0; } +/** Attempt to find any missing linkages to the anomeric carbon in sugar. */ +int Exec_PrepareForLeap::FindSugarC1Linkages(int rnum1, int c_beg, + Topology& topIn, Frame const& frameIn) +const +{ + //int rnum1 = sugar.ResNum(); + //int c_beg = sugar.AnomericAtom(); + Residue const& res1 = topIn.SetRes(rnum1); + // If the anomeric atom is already bonded to another residue, skip this. + for (Atom::bond_iterator bat = topIn[c_beg].bondbegin(); + bat != topIn[c_beg].bondend(); ++bat) + { + if (topIn[*bat].ResNum() != rnum1) { + if (debug_ > 0) + mprintf("\tSugar %s anomeric carbon is already bonded to another residue, skipping.\n", + topIn.TruncResNameOnumId(rnum1).c_str()); + return 0; + } + } + + // residue first atom to residue first atom cutoff^2 + const double rescut2 = 64.0; + // bond cutoff offset + const double offset = 0.2; + + Atom::AtomicElementType a1Elt = topIn[c_beg].Element(); // Should always be C + if (debug_ > 0) + mprintf("DEBUG: Anomeric ring carbon: %s\n", topIn.ResNameNumAtomNameNum(c_beg).c_str()); + // Loop over other residues + for (int rnum2 = 0; rnum2 < topIn.Nres(); rnum2++) + { + if (rnum2 != rnum1) { + Residue const& res2 = topIn.Res(rnum2); + // Ignore solvent residues + if (res2.Name() != solventResName_) { + int at1 = res1.FirstAtom(); + int at2 = res2.FirstAtom(); + // Initial residue-residue distance based on first atoms in each residue + double dist2_1 = DIST2_NoImage( frameIn.XYZ(at1), frameIn.XYZ(at2) ); + if (dist2_1 < rescut2) { + if (debug_ > 1) + mprintf("DEBUG: %s to %s = %f\n", + topIn.TruncResNameOnumId(rnum1).c_str(), topIn.TruncResNameOnumId(rnum2).c_str(), + sqrt(dist2_1)); + // Do the rest of the atoms in res2 to the anomeric carbon + for (; at2 != res2.LastAtom(); ++at2) + { + if (!topIn[c_beg].IsBondedTo(at2)) { + double D2 = DIST2_NoImage( frameIn.XYZ(c_beg), frameIn.XYZ(at2) ); + Atom::AtomicElementType a2Elt = topIn[at2].Element(); + double cutoff2 = Atom::GetBondLength(a1Elt, a2Elt) + offset; + cutoff2 *= cutoff2; + if (D2 < cutoff2) { + mprintf("\t Adding bond between %s and %s\n", + topIn.ResNameNumAtomNameNum(c_beg).c_str(), + topIn.ResNameNumAtomNameNum(at2).c_str()); + topIn.AddBond(c_beg, at2); + } + } + } // END loop over res2 atoms + } // END res1-res2 distance cutoff + } // END res2 is not solvent + } // END res1 != res2 + } // END res2 loop over other residues + + return 0; +} + /** For each sugar, see if the anomeric carbon is actually terminal and needs * to be a separate ROH residue. */ @@ -1459,7 +1527,21 @@ const } } - // Loop over sugar indices + // Loop over sugar indices to see if anomeric C is missing bonds + for (std::vector::const_iterator ac_ro = SugarIndices.begin(); + ac_ro != SugarIndices.end(); ++ac_ro) + { + int anomericAtom = ac_ro->first; + int rnum = topIn[anomericAtom].ResNum(); + if (FindSugarC1Linkages(rnum, anomericAtom, topIn, frameIn)) { + mprinterr("Error: Search for bonds to anomeric carbon '%s' failed.\n", + topIn.AtomMaskName(anomericAtom).c_str()); + return 1; + } + } + + + // Loop over sugar indices to see if residues need to be split for (std::vector::const_iterator ac_ro = SugarIndices.begin(); ac_ro != SugarIndices.end(); ++ac_ro) { @@ -1560,7 +1642,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, resStat_[*rnum] = SUGAR_MISSING_RING_O; Sugars.back().PrintInfo( topIn ); } - // For each sugar residue, try to fill in missing linkages +/* // For each sugar residue, try to fill in missing linkages if (findC1linkages) { mprintf("\tAttempting to identify missing linkages to sugar anomeric carbons.\n"); for (std::vector::const_iterator sugar = Sugars.begin(); @@ -1576,7 +1658,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, } } else { mprintf("\tNot attempting to identify missing linkages to sugar anomeric carbons.\n"); - } + }*/ // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index d9c01168f9..9f94cf5dc2 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -66,6 +66,8 @@ class Exec_PrepareForLeap : public Exec { AnomerRetType DetermineAnomericForm(bool&, Sugar const&, Topology const&, Frame const&) const; int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); + /// Try to find missing linkages to anomeric carbon in sugar. + int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; /// Determine if sugars are terminal and need an ROH residue int CheckIfSugarsAreTerminal(std::string const&, Topology&, Frame&) const; From f08386f1c8d1279188d157b1a56faa7a291defcd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 08:51:58 -0400 Subject: [PATCH 179/368] Change function name --- src/Exec_PrepareForLeap.cpp | 6 +++--- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e472a18d92..e937f2ca47 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1485,7 +1485,7 @@ const /** For each sugar, see if the anomeric carbon is actually terminal and needs * to be a separate ROH residue. */ -int Exec_PrepareForLeap::CheckIfSugarsAreTerminal(std::string const& sugarMaskStr, +int Exec_PrepareForLeap::FixSugarsStructure(std::string const& sugarMaskStr, Topology& topIn, Frame& frameIn) const { @@ -2508,11 +2508,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // into an ROH residue. // This is done before any identification takes places since it may // involve reordering the topology if residues are split. - if (CheckIfSugarsAreTerminal(sugarmaskstr, topIn, frameIn)) { + if (FixSugarsStructure(sugarmaskstr, topIn, frameIn)) { mprinterr("Error: Checking for terminal sugars failed.\n"); return CpptrajState::ERR; } - // Since CheckIfSugarsAreTerminal() can re-order atoms, need + // Since FixSugarsStructure() can re-order atoms, need // to recreate the map. myMap_.ClearMap(); if (myMap_.Setup(topIn, frameIn)) { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 9f94cf5dc2..79af823a2a 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -69,7 +69,7 @@ class Exec_PrepareForLeap : public Exec { /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; /// Determine if sugars are terminal and need an ROH residue - int CheckIfSugarsAreTerminal(std::string const&, Topology&, Frame&) const; + int FixSugarsStructure(std::string const&, Topology&, Frame&) const; int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; From 63906ea8ae9a12fb67342408401af9fd602b9dd5 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 09:41:09 -0400 Subject: [PATCH 180/368] Start placing everything that modifies sugars into an entirely separate function from the sugar ID function --- src/Exec_PrepareForLeap.cpp | 201 +++++++++++++++++++++--------------- src/Exec_PrepareForLeap.h | 8 +- 2 files changed, 121 insertions(+), 88 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e937f2ca47..01bd64f569 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -461,6 +461,7 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector 1) { + for (Atom::bond_iterator bat = topIn[o1_atom].bondbegin(); + bat != topIn[o1_atom].bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::HYDROGEN) + selected.push_back( *bat ); + else if (*bat != anomericAtom) { + // Bonded to something other than H. + return 0; + } + } + } + mprintf("\tIn-residue oxygen bonded to anomeric carbon: '%s %s'\n", + sugarName.c_str(), *(topIn[o1_atom].Name())); + mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); + AtomMask ROH(selected, topIn.Natom()); + + // Split the hydroxyl into a new residue named ROH for Glycam. + // This may involve reordering atoms within the residue, but not + // any other atoms, so we should not have to update SugarIndices. + Iarray atomMap; + if (topIn.SplitResidue(ROH, terminalHydroxylName_, atomMap)) { + mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); + return 1; + } + // Reorder the frame to match + Frame oldFrame = frameIn; + frameIn.SetCoordinatesByMap( oldFrame, atomMap ); + return 0; +} + +/** Try to fix issues with sugar structure before trying to identify. */ int Exec_PrepareForLeap::FixSugarsStructure(std::string const& sugarMaskStr, - Topology& topIn, Frame& frameIn) + Topology& topIn, Frame& frameIn, + bool c1bondsearch, bool termsearch) const { AtomMask sugarMask(sugarMaskStr); - mprintf("\tSeaching for terminal sugars selected by '%s'\n", sugarMask.MaskString()); + mprintf("\tAttempting to fix sugars selected by '%s'\n", sugarMask.MaskString()); if (topIn.SetupIntegerMask( sugarMask )) return 1; sugarMask.MaskInfo(); if (sugarMask.None()) { @@ -1514,94 +1574,53 @@ const Sugar sugar = IdSugarRing(*rnum, topIn, stat); if (stat == ID_ERR) { if (errorsAreFatal_) { - mprinterr("Error: During terminal sugar search, problem identifying sugar ring for %s\n", + mprinterr("Error: During sugar fix, problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); return 1; } else - mprintf("Warning: During terminal sugar search, problem identifying sugar ring for %s\n", + mprintf("Warning: During sugar fix, problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); } if (!sugar.NotSet()) { - //mprintf("DEBUG: Sugar: %s\n", topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); SugarIndices.push_back( AtomPair(sugar.AnomericAtom(), sugar.RingOxygenAtom()) ); + if (debug_ > 0) + mprintf("DEBUG: fix search %s ano. C= %s ring O= %s\n", + topIn.TruncResNameOnumId(*rnum).c_str(), + topIn.AtomMaskName(sugar.AnomericAtom()).c_str(), + topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); } } - // Loop over sugar indices to see if anomeric C is missing bonds - for (std::vector::const_iterator ac_ro = SugarIndices.begin(); - ac_ro != SugarIndices.end(); ++ac_ro) - { - int anomericAtom = ac_ro->first; - int rnum = topIn[anomericAtom].ResNum(); - if (FindSugarC1Linkages(rnum, anomericAtom, topIn, frameIn)) { - mprinterr("Error: Search for bonds to anomeric carbon '%s' failed.\n", - topIn.AtomMaskName(anomericAtom).c_str()); - return 1; + if (c1bondsearch) { + // Loop over sugar indices to see if anomeric C is missing bonds + for (std::vector::const_iterator ac_ro = SugarIndices.begin(); + ac_ro != SugarIndices.end(); ++ac_ro) + { + int anomericAtom = ac_ro->first; + int rnum = topIn[anomericAtom].ResNum(); + if (FindSugarC1Linkages(rnum, anomericAtom, topIn, frameIn)) { + mprinterr("Error: Search for bonds to anomeric carbon '%s' failed.\n", + topIn.AtomMaskName(anomericAtom).c_str()); + return 1; + } } } - - // Loop over sugar indices to see if residues need to be split - for (std::vector::const_iterator ac_ro = SugarIndices.begin(); - ac_ro != SugarIndices.end(); ++ac_ro) - { - int anomericAtom = ac_ro->first; - int ringOxygen = ac_ro->second; - int rnum = topIn[anomericAtom].ResNum(); - std::string sugarName = topIn.TruncResNameOnumId(rnum); - if (debug_ > 0) - mprintf("DEBUG: terminal search %s ano. C= %s ring O= %s\n", - sugarName.c_str(), topIn.AtomMaskName(anomericAtom).c_str(), - topIn.AtomMaskName(ringOxygen).c_str()); - // Is the anomeric carbon bonded to an oxygen that is part of this residue. - int o1_atom = -1; - for (Atom::bond_iterator bat = topIn[anomericAtom].bondbegin(); - bat != topIn[anomericAtom].bondend(); ++bat) + if (termsearch) { + // Loop over sugar indices to see if residues need to be split + for (std::vector::const_iterator ac_ro = SugarIndices.begin(); + ac_ro != SugarIndices.end(); ++ac_ro) { - if (topIn[*bat].ResNum() == rnum && - *bat != ringOxygen && - topIn[*bat].Element() == Atom::OXYGEN) { - if (o1_atom != -1) { - mprintf("Warning: Anomeric atom '%s %s' bonded to more than 1 oxygen.\n", - sugarName.c_str(), *(topIn[anomericAtom].Name())); - o1_atom = -1; - break; - } else - o1_atom = *bat; - } - } - if (o1_atom == -1) continue; - Iarray selected(1, o1_atom); - // Ensure the oxygen is itself terminal (no other bonds or only H) - if (topIn[o1_atom].Nbonds() > 1) { - for (Atom::bond_iterator bat = topIn[o1_atom].bondbegin(); - bat != topIn[o1_atom].bondend(); ++bat) - { - if (topIn[*bat].Element() == Atom::HYDROGEN) - selected.push_back( *bat ); - else if (*bat != anomericAtom) { - // Bonded to something other than H. - continue; - } + int anomericAtom = ac_ro->first; + int ringOxygen = ac_ro->second; + int rnum = topIn[anomericAtom].ResNum(); + if (CheckIfSugarIsTerminal(rnum, anomericAtom, ringOxygen, topIn, frameIn)) { + mprinterr("Error: Checking if sugar %s is terminal failed.\n", + topIn.TruncResNameOnumId(rnum).c_str()); + return 1; } - } - mprintf("\tIn-residue oxygen bonded to anomeric carbon: '%s %s'\n", - sugarName.c_str(), *(topIn[o1_atom].Name())); - mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); - AtomMask ROH(selected, topIn.Natom()); - - // Split the hydroxyl into a new residue named ROH for Glycam. - // This may involve reordering atoms within the residue, but not - // any other atoms, so we should not have to update SugarIndices. - Iarray atomMap; - if (topIn.SplitResidue(ROH, terminalHydroxylName_, atomMap)) { - mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); - return 1; - } - // Reorder the frame to match - Frame oldFrame = frameIn; - frameIn.SetCoordinatesByMap( oldFrame, atomMap ); - } // End loop over sugar indices + } // End loop over sugar indices + } return 0; } @@ -2491,7 +2510,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // If preparing sugars, need to set up an atom map and potentially - // search for terminal sugars. Do this here after all atom + // search for terminal sugars/missing bonds. Do this here after all atom // modifications have been done. if (prepare_sugars) { // Set up an AtomMap for this residue to help determine stereocenters. @@ -2503,13 +2522,25 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } myMap_.DetermineAtomIDs(); - if (!argIn.hasKey("notermsearch")) { - // Check if any sugars are in fact terminal and need the C1 oxygen split - // into an ROH residue. - // This is done before any identification takes places since it may - // involve reordering the topology if residues are split. - if (FixSugarsStructure(sugarmaskstr, topIn, frameIn)) { - mprinterr("Error: Checking for terminal sugars failed.\n"); + bool termsearch = !argIn.hasKey("notermsearch"); + if (termsearch) + mprintf("\tWill split hydroxyls on anomeric atoms of terminal sugars into separate residues.\n"); + else + mprintf("\tNot splitting hydroxyls on anomeric atoms of terminal sugars into separate residues.\n"); + bool c1bondsearch = !argIn.hasKey("noc1search"); + if (c1bondsearch) + mprintf("\tWill search for missing bonds to sugar anomeric atoms.\n"); + else + mprintf("\tNot searching for missing bonds to sugar anomeric atoms.\n"); + if (termsearch || c1bondsearch) { + // May need to modify sugar structure/topology, either by splitting + // C1 hydroxyls of terminal sugars into ROH residues, and/or by + // adding missing bonds to C1 atoms. + // This is done before any identification takes place since we want + // to identify based on the most up-to-date topology. + + if (FixSugarsStructure(sugarmaskstr, topIn, frameIn, c1bondsearch, termsearch)) { + mprinterr("Error: Sugar structure modification failed.\n"); return CpptrajState::ERR; } // Since FixSugarsStructure() can re-order atoms, need diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 79af823a2a..2f8a4dfb69 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -37,7 +37,7 @@ class Exec_PrepareForLeap : public Exec { // int CalcStereocenterTorsion(double&, int, Topology const&, Frame const&) const; int FindRemainingChainCarbons(Iarray&, int, Topology const&, int, Iarray const&) const; /// Try to find any missing bonds to C1 atoms - int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; +// int FindSugarC1Linkages(Sugar const&, Topology&, Frame const&) const; /// Determine orientation around anomeric carbon int CalcAnomericTorsion(double&, int, int, int, Iarray const&, Topology const&, Frame const&) const; @@ -68,8 +68,10 @@ class Exec_PrepareForLeap : public Exec { int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; - /// Determine if sugars are terminal and need an ROH residue - int FixSugarsStructure(std::string const&, Topology&, Frame&) const; + /// Determine if sugar is terminal and need an ROH residue + int CheckIfSugarIsTerminal(int, int, int, Topology&, Frame&) const; + /// Attempt to fix any issues with sugars + int FixSugarsStructure(std::string const&, Topology&, Frame&, bool, bool) const; int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); int FindTerByBonds(Topology&, CharMask const&) const; From 5f0e7196edf6d06fcaca0b2eb7309ac1a1019a0a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 09:43:48 -0400 Subject: [PATCH 181/368] Remove unused arg --- src/Exec_PrepareForLeap.cpp | 6 +++--- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 01bd64f569..b862b881af 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1628,8 +1628,8 @@ const /** Prepare sugars for leap. */ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, - Frame const& frameIn, CpptrajFile* outfile, - bool findC1linkages) + Frame const& frameIn, CpptrajFile* outfile) + { std::set sugarBondsToRemove; mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); @@ -2617,7 +2617,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (prepare_sugars) { - if (PrepareSugars(sugarMask, topIn, frameIn, outfile, !argIn.hasKey("noc1search"))) { + if (PrepareSugars(sugarMask, topIn, frameIn, outfile)) { mprinterr("Error: Sugar preparation failed.\n"); return CpptrajState::ERR; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 2f8a4dfb69..4334eb9810 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -73,7 +73,7 @@ class Exec_PrepareForLeap : public Exec { /// Attempt to fix any issues with sugars int FixSugarsStructure(std::string const&, Topology&, Frame&, bool, bool) const; - int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*, bool); + int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*); From 647e6b468ccaaeb74c4ec8f0376fc797388ec57d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 10:57:27 -0400 Subject: [PATCH 182/368] Add ARB: beta-L-arabinopyranose --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 0c927d01e7..31dded58dc 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -9,7 +9,7 @@ "Mannose" M MAN,BMA "Rhamnose" H RAM "Tyvelose" T TYV -"Arabinose" A ARA,AHR +"Arabinose" A ARA,AHR,ARB "Galactose" L GAL,GLA "N-Acetyl Galactosamine" V NGA "Galacturonic Acid" O ADA From 66bed7a7a1bd9051de9fce3910a7c5984fc861c7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 11:05:26 -0400 Subject: [PATCH 183/368] Add A2G as an N-acetyl glucosamine --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 31dded58dc..1640cf5445 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -11,7 +11,7 @@ "Tyvelose" T TYV "Arabinose" A ARA,AHR,ARB "Galactose" L GAL,GLA -"N-Acetyl Galactosamine" V NGA +"N-Acetyl Galactosamine" V NGA,A2G "Galacturonic Acid" O ADA "Gulose" K GUL,GUP,GL0 "Altrose" E ALT From eb99c5269bf0b2a8847357263cde03d2d5d40656 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 11:21:54 -0400 Subject: [PATCH 184/368] BDP is beta D glucopyranuronic acid --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 1640cf5445..ed9df71d33 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -4,7 +4,7 @@ "Glucose" G GLC,MAL,BGC "N-Acetyl Glucosamine" Y NAG,4YS,SGN,BGLN,NDG "Glucosamine" Y GCS -"Glucuronic Acid" Z GCU +"Glucuronic Acid" Z GCU,BDP "Quinovose" Q QUI "Mannose" M MAN,BMA "Rhamnose" H RAM From 4c7d5b7c1f5ec99a9de4253b10f87a287117e047 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 11:25:28 -0400 Subject: [PATCH 185/368] GXL is alpha L galactopyranose --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index ed9df71d33..8c13cb7315 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -10,7 +10,7 @@ "Rhamnose" H RAM "Tyvelose" T TYV "Arabinose" A ARA,AHR,ARB -"Galactose" L GAL,GLA +"Galactose" L GAL,GLA,GXL "N-Acetyl Galactosamine" V NGA,A2G "Galacturonic Acid" O ADA "Gulose" K GUL,GUP,GL0 From 00e1319e708adcb9840f285e8ad89051883a87bd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 15 Oct 2021 14:07:49 -0400 Subject: [PATCH 186/368] For Y, 4YS is an isoquinolin, SGN is Y with sulfonyls, and BGLN isnt even a valid PDB residue name. Remove them --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 8c13cb7315..99df8e9dd2 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -2,7 +2,7 @@ # Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB # Last updated 09/01/21 10:01:41 "Glucose" G GLC,MAL,BGC -"N-Acetyl Glucosamine" Y NAG,4YS,SGN,BGLN,NDG +"N-Acetyl Glucosamine" Y NAG,NDG "Glucosamine" Y GCS "Glucuronic Acid" Z GCU,BDP "Quinovose" Q QUI From 6a5b45eb58e8440791834cd96da8e67fda4012f1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 19 Oct 2021 10:22:46 -0400 Subject: [PATCH 187/368] Print info on ring type. Just informational for now --- src/Exec_PrepareForLeap.cpp | 35 +++++++++++++++++++++++++++-------- src/Exec_PrepareForLeap.h | 8 ++++++++ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b862b881af..8df09871a3 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -17,9 +17,11 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn) : ring_oxygen_atom_(-1), anomeric_atom_(-1), ano_ref_atom_(-1), - highest_stereocenter_(-1) + highest_stereocenter_(-1), + ringType_(UNKNOWN_RING) {} +/** CONSTRUCTOR - Set ring atom indices and ring type. */ Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, Iarray const& RA, Iarray const& CA) : rnum_(rn), @@ -27,10 +29,19 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, anomeric_atom_(aa), ano_ref_atom_(ara), highest_stereocenter_(hs), + ringType_(UNKNOWN_RING), ring_atoms_(RA), chain_atoms_(CA) -{} +{ + if (ring_oxygen_atom_ != -1) { + if (RA.size() == 5) + ringType_ = PYRANOSE; + else if (RA.size() == 4) + ringType_ = FURANOSE; + } +} +/** Print info about the sugar to STDOUT. */ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { if (NotSet()) { mprintf("\t%s : Not Set.\n", topIn.TruncResNameOnumId(rnum_).c_str()); @@ -41,6 +52,14 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); mprintf("\t\tConfig. C : %s\n", topIn.TruncAtomNameNum(highest_stereocenter_).c_str()); mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); + static const char* RingPrefixStr[] = { "Hexo", "Pento", "Other" }; + int rpsidx = 2; + if (chain_atoms_.size() == 6) + rpsidx = 0; + else if (chain_atoms_.size() == 5) + rpsidx = 1; + static const char* RingTypeStr[] = { "Pyranose", "Furanose", "Unknown" }; + mprintf("\t\tRing Type : %s%s\n", RingPrefixStr[rpsidx], RingTypeStr[ringType_]); mprintf("\t\tNon-O Ring atoms :"); for (Iarray::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); @@ -1395,18 +1414,18 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprinterr("Error: Unrecognized sugar linkage.\n"); return 1; } - // Modify residue char to indicate D form if necessary. - // We do this here and not above so as not to mess with the - // linkage determination. - if (!isDform) - resChar = tolower( resChar ); - // Remove bonds to non-sugar + // Remove bonds to other residues for (BondArray::const_iterator bnd = bondsToRemove.begin(); bnd != bondsToRemove.end(); ++bnd) { LeapBond(bnd->A1(), bnd->A2(), topIn, outfile); topIn.RemoveBond(bnd->A1(), bnd->A2()); } + // Modify residue char to indicate D form if necessary. + // We do this here and not above so as not to mess with the + // linkage determination. + if (!isDform) + resChar = tolower( resChar ); // Set new residue name NameType newResName( linkcode + std::string(1,resChar) + formStr ); mprintf("\t Changing %s to Glycam resname: %s\n", topIn.TruncResNameOnumId(rnum).c_str(), *newResName); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 4334eb9810..cfca369b56 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -127,8 +127,14 @@ class Exec_PrepareForLeap : public Exec { // ----- Sugar class ---------------------------------------------------------- class Exec_PrepareForLeap::Sugar { public: + /// Base ring type + enum RingTypeEnum { PYRANOSE = 0, ///< Ring is 5 carbons, 1 oxygen + FURANOSE, ///< Ring is 4 carbons, 1 oxygen + UNKNOWN_RING ///< Some unknown ring type + }; /// CONSTRUCTOR - residue number, incomplete setup Sugar(int); + /// CONSTRUCTOR - res #, ring O, Anomeric, Anomeric Ref, Highest Sterocenter, ring atoms, chain atoms Sugar(int,int,int,int,int,Iarray const&,Iarray const&); int ResNum() const { return rnum_; } @@ -136,6 +142,7 @@ class Exec_PrepareForLeap::Sugar { int AnomericAtom() const { return anomeric_atom_; } int AnomericRefAtom() const { return ano_ref_atom_; } int HighestStereocenter() const { return highest_stereocenter_; } + RingTypeEnum RingType() const { return ringType_; } Iarray const& RingAtoms() const { return ring_atoms_; } int RingEndAtom() const { return ring_atoms_.back(); } Iarray const& ChainAtoms() const { return chain_atoms_; } @@ -153,6 +160,7 @@ class Exec_PrepareForLeap::Sugar { int anomeric_atom_; ///< Index of the anomeric C atom (ring start) int ano_ref_atom_; ///< Index of the anomeric reference C atom int highest_stereocenter_; ///< Index of the highest stereocenter in the carbon chain + RingTypeEnum ringType_; ///< Will be set to ring type Iarray ring_atoms_; ///< Index of all non-oxygen ring atoms Iarray chain_atoms_; ///< Index of all chain carbon atoms (from anomeric carbon). }; From dc1cefcaa53bbf5945978bedd4211c515d18d83b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 19 Oct 2021 11:34:57 -0400 Subject: [PATCH 188/368] More general way of doing linkage code determination --- src/Exec_PrepareForLeap.cpp | 168 +++++++++++++++++++++++++++++++++++- src/Exec_PrepareForLeap.h | 38 +++++++- src/cpptrajdepend | 2 +- 3 files changed, 201 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8df09871a3..bd42eed087 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -6,6 +6,7 @@ #include "Constants.h" #include "CpptrajFile.h" #include "Trajout_Single.h" +#include "StringRoutines.h" // integerToString #include "DataSet_Coords_CRD.h" #include #include // tolower @@ -111,6 +112,7 @@ const } /// \return Glycam linkage code for given glycam residue name and linked atoms +/* static std::string LinkageCode(char glycamChar, std::set const& linkages) { std::string linkcode; @@ -145,7 +147,7 @@ static std::string LinkageCode(char glycamChar, std::set const& linkag if (linkcode.empty()) mprintf("Warning: Could not determine link code for link atoms '%s'.\n", linkstr.c_str()); return linkcode; -} +}*/ /** If file not present, use a default set of residue names. */ void Exec_PrepareForLeap::SetPdbResNames() { @@ -1277,6 +1279,159 @@ const return form; } +/// \return Glycam linkage code for given linked atoms +std::string Exec_PrepareForLeap::GlycamLinkageCode(std::set const& linkages, + Topology const& topIn) +const +{ + std::string linkcode; + + // Try to create a link string based on link atom element and position. + // Check for any unknown positions. + std::string linkstr; + for (std::set::const_iterator it = linkages.begin(); it != linkages.end(); ++it) { + if (it->Position() < 1) { + mprinterr("Error: Linkage for atom '%s' has undetermined position in sugar.\n", + topIn.AtomMaskName(it->Idx()).c_str()); + return linkcode; + } + linkstr.append( std::string(topIn[it->Idx()].ElementName()) + + integerToString(it->Position()) ); + } + + mprintf("DEBUG:\t linkstr= '%s'\n", linkstr.c_str()); + if (linkstr == "C1") linkcode = "0"; + else if (linkstr == "O1") linkcode = "1"; + else if (linkstr == "C1O2") linkcode = "2"; + else if (linkstr == "C1O3") linkcode = "3"; + else if (linkstr == "C1O4") linkcode = "4"; + else if (linkstr == "C1O6") linkcode = "6"; + else if (linkstr == "C1O2O3") linkcode = "Z"; + else if (linkstr == "C1O2O4") linkcode = "Y"; + else if (linkstr == "C1O2O6") linkcode = "X"; + else if (linkstr == "C1O3O4") linkcode = "W"; + else if (linkstr == "C1O3O6") linkcode = "V"; + else if (linkstr == "C1O4O6") linkcode = "U"; + else if (linkstr == "C1O2O3O4") linkcode = "T"; + else if (linkstr == "C1O2O3O6") linkcode = "S"; + else if (linkstr == "C1O2O4O6") linkcode = "R"; + else if (linkstr == "C1O3O4O6") linkcode = "Q"; + else if (linkstr == "C1O2O3O4O6") linkcode = "P"; + if (linkcode.empty()) + mprintf("Warning: Could not determine link code for link atoms '%s'.\n", linkstr.c_str()); + return linkcode; +} + +/** Determine linkages for the sugar. Non-sugar residues linked to sugars + * with a recognized linkage will be marked as valid. + */ +std::string Exec_PrepareForLeap::DetermineSugarLinkages(Sugar const& sugar, CharMask const& cmask, + Topology& topIn, ResStatArray& resStatIn, + CpptrajFile* outfile, + std::set& sugarBondsToRemove) +const +{ + int rnum = sugar.ResNum(); + Residue const& res = topIn.SetRes(rnum); + + // Use set to store link atoms so it is ordered by position + std::set linkages; + + // Bonds to non sugars to be removed since these will confuse tleap + BondArray bondsToRemove; + + // Loop over sugar atoms + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) + { + // This will be the index of the carbon that is atom is bonded to (or of this atom itself). + int atomChainPosition = -1; + // Find position in carbon chain + if (topIn[at].Element() == Atom::CARBON) + atomChainPosition = AtomIdxInArray(sugar.ChainAtoms(), at); + if (atomChainPosition == -1) { + // Check if any bonded atoms are in carbon chain + for (Atom::bond_iterator bat = topIn[at].bondbegin(); + bat != topIn[at].bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::CARBON) { + atomChainPosition = AtomIdxInArray(sugar.ChainAtoms(), *bat); + if (atomChainPosition != -1) break; + } + } + } + + // Check for bonds to other residues + for (Atom::bond_iterator bat = topIn[at].bondbegin(); + bat != topIn[at].bondend(); ++bat) + { + if (topIn[*bat].ResNum() != rnum) { + // This atom is bonded to another residue. + linkages.insert(Link(at, atomChainPosition+1)); + // Check if the other residue is a sugar or not + if (!cmask.AtomInCharMask(*bat)) { + // Atom is bonded to non-sugar residue. + mprintf("\t Sugar %s bonded to non-sugar %s at position %i\n", + topIn.ResNameNumAtomNameNum(at).c_str(), + topIn.ResNameNumAtomNameNum(*bat).c_str(), atomChainPosition+1); + bondsToRemove.push_back( BondType(at, *bat, -1) ); + // Check if this is a recognized linkage to non-sugar + Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); + NameMapType::const_iterator lname = pdb_glycam_linkageRes_map_.find( pres.Name() ); + if (lname != pdb_glycam_linkageRes_map_.end()) { + if (debug_ > 0) + mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); + ChangeResName( pres, lname->second ); + resStatIn[topIn[*bat].ResNum()] = VALIDATED; + } else if (pres.Name() == terminalHydroxylName_) { + if (debug_ > 0) + mprintf("DEBUG: '%s' is terminal hydroxyl.\n", *(pres.Name())); + resStatIn[topIn[*bat].ResNum()] = VALIDATED; + } else { + mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); + resStatIn[topIn[*bat].ResNum()] = UNRECOGNIZED_SUGAR_LINKAGE; + } + } else { + // Atom is bonded to sugar residue + mprintf("\t Sugar %s bonded to sugar %s at position %i\n", + topIn.ResNameNumAtomNameNum(at).c_str(), + topIn.ResNameNumAtomNameNum(*bat).c_str(), atomChainPosition+1); + // Also remove inter-sugar bonds since leap cant handle branching + if (at < *bat) + sugarBondsToRemove.insert( BondType(at, *bat, -1) ); + else + sugarBondsToRemove.insert( BondType(*bat, at, -1) ); + } + } + } // END loop over bonded atoms + + } // END loop over residue atoms + + // Determine linkage + //if (debug_ > 0) { + mprintf("\t Link atoms:"); + for (std::set::const_iterator it = linkages.begin(); + it != linkages.end(); ++it) + mprintf(" %s(%i)", *(topIn[it->Idx()].Name()), it->Position()); + mprintf("\n"); + //} + + std::string linkcode = GlycamLinkageCode(linkages, topIn); + if (debug_ > 0) mprintf("\t Linkage code: %s\n", linkcode.c_str()); + if (linkcode.empty()) { + mprinterr("Error: Unrecognized sugar linkage.\n"); + return linkcode; + } + // Remove bonds to other residues + for (BondArray::const_iterator bnd = bondsToRemove.begin(); + bnd != bondsToRemove.end(); ++bnd) + { + LeapBond(bnd->A1(), bnd->A2(), topIn, outfile); + topIn.RemoveBond(bnd->A1(), bnd->A2()); + } + + return linkcode; +} + /** Attempt to identify sugar residue, form, and linkages. */ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, Frame const& frameIn, CharMask const& cmask, @@ -1351,6 +1506,13 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, } // Identify linkages to other residues. + std::string linkcode = DetermineSugarLinkages(sugar, cmask, topIn, resStat_, + outfile, sugarBondsToRemove); + if (linkcode.empty()) { + mprinterr("Error: Determination of sugar linkages failed.\n"); + return 1; + } +/* // Use a set to store linkages so they are in alphabetical order for easier identification. std::set linkages; // Bonds to non sugars to be removed since these will confuse tleap @@ -1363,6 +1525,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, bat != topIn[at].bondend(); ++bat) { if (topIn[*bat].ResNum() != rnum) { + // This atom is bonded to another residue if (!cmask.AtomInCharMask(*bat)) { mprintf("\t Sugar %s bonded to non-sugar %s\n", topIn.ResNameNumAtomNameNum(at).c_str(), @@ -1420,7 +1583,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, { LeapBond(bnd->A1(), bnd->A2(), topIn, outfile); topIn.RemoveBond(bnd->A1(), bnd->A2()); - } + }*/ + // Modify residue char to indicate D form if necessary. // We do this here and not above so as not to mess with the // linkage determination. diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index cfca369b56..acd24c109c 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -18,8 +18,13 @@ class Exec_PrepareForLeap : public Exec { private: /// Hold indices for sugar class Sugar; + /// Hold indices for sugar link atoms + class Link; typedef std::vector Iarray; + enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, + SUGAR_MISSING_RING_O }; + typedef std::vector ResStatArray; inline void ChangeResName(Residue&, NameType const&) const; inline void ChangeAtomName(Atom&, NameType const&) const; @@ -64,7 +69,12 @@ class Exec_PrepareForLeap : public Exec { enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; /// \return Anomeric form of the sugar AnomerRetType DetermineAnomericForm(bool&, Sugar const&, Topology const&, Frame const&) const; - + /// \return Glycam linkage code for given link atoms + std::string GlycamLinkageCode(std::set const&, Topology const&) const; + /// Determine linkages for the sugar + std::string DetermineSugarLinkages(Sugar const&, CharMask const&, Topology&, ResStatArray&, + CpptrajFile*, std::set&) const; + /// Try to identify sugar name, form, and linkages int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; @@ -99,9 +109,6 @@ class Exec_PrepareForLeap : public Exec { typedef std::set SetType; SetType pdb_res_names_; ///< PDB residue names recognized by Amber FFs - enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, - SUGAR_MISSING_RING_O }; - typedef std::vector ResStatArray; ResStatArray resStat_; ///< Contain status of each residue typedef std::pair NamePairType; @@ -164,4 +171,27 @@ class Exec_PrepareForLeap::Sugar { Iarray ring_atoms_; ///< Index of all non-oxygen ring atoms Iarray chain_atoms_; ///< Index of all chain carbon atoms (from anomeric carbon). }; +// ----- Link class ------------------------------------------------------------ +class Exec_PrepareForLeap::Link { + public: + /// CONSTRUCTOR + Link() : idx_(-1), position_(-1) {} + /// CONSTRUCTOR - index, position (starting from 1 at the anomeric carbon) + Link(int i, int p) : idx_(i), position_(p) {} + /// \return Index in topology + int Idx() const { return idx_; } + /// \return Index in carbon chain (starting from 1 at the anomeric carbon) + int Position() const { return position_; } + /// First sort by position, then absolute index + bool operator<(Link const& rhs) const { + if (position_ == rhs.position_) { + return (idx_ < rhs.idx_); + } else { + return position_ < rhs.position_; + } + } + private: + int idx_; ///< Atom index in topology + int position_; ///< Position in sugar carbon chain, starting from 1 at the anomeric carbon +}; #endif diff --git a/src/cpptrajdepend b/src/cpptrajdepend index e98f3e1311..2bd8965261 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -268,7 +268,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From c672a47402704b67446cd6ffaf7a84859e897b96 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 19 Oct 2021 15:49:18 -0400 Subject: [PATCH 189/368] Ensure pdb output picks up debug level --- src/Exec_PrepareForLeap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index bd42eed087..dc6640a55e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2884,6 +2884,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (!pdbout.empty()) { Trajout_Single PDB; + PDB.SetDebug( debug_ ); if (PDB.InitTrajWrite( pdbout, "topresnum", State.DSL(), TrajectoryFile::PDBFILE)) { mprinterr("Error: Could not initialize output PDB\n"); return CpptrajState::ERR; From aab469cbbb015eb8c033e2b280ab69b74df60908 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 19 Oct 2021 15:49:34 -0400 Subject: [PATCH 190/368] Ensure TER indices are properly sorted --- src/Traj_PDBfile.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Traj_PDBfile.cpp b/src/Traj_PDBfile.cpp index 9d65d2b939..fa3c7ad2cd 100644 --- a/src/Traj_PDBfile.cpp +++ b/src/Traj_PDBfile.cpp @@ -1,5 +1,5 @@ #include "Traj_PDBfile.h" -#include // min, max +#include // min, max, sort #include "Topology.h" #include "ArgList.h" #include "DataSetList.h" @@ -712,6 +712,8 @@ int Traj_PDBfile::setupTrajout(FileName const& fname, Topology* trajParm, TER_idxs_.push_back( mol->MolUnit().Back() - 1 ); } } + // Sort the TER indices + std::sort( TER_idxs_.begin(), TER_idxs_.end() ); TER_idxs_.push_back( -1 ); // Indicates that final TER has been written. if (debug_ > 0) { mprintf("DEBUG: TER indices:"); From 60c7090283814b13de4852d47989eeddde9f511b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 20 Oct 2021 13:09:45 -0400 Subject: [PATCH 191/368] When looking for C1 bonds, only take the closest atom --- src/Exec_PrepareForLeap.cpp | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index dc6640a55e..6a2405b91c 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1622,6 +1622,10 @@ const const double rescut2 = 64.0; // bond cutoff offset const double offset = 0.2; + // index of atom to be bonded to c_beg + int closest_at = -1; + // distance^2 of atom to be bonded to c_beg + double closest_d2 = -1.0; Atom::AtomicElementType a1Elt = topIn[c_beg].Element(); // Should always be C if (debug_ > 0) @@ -1639,7 +1643,7 @@ const double dist2_1 = DIST2_NoImage( frameIn.XYZ(at1), frameIn.XYZ(at2) ); if (dist2_1 < rescut2) { if (debug_ > 1) - mprintf("DEBUG: %s to %s = %f\n", + mprintf("DEBUG: Residue %s to %s = %f\n", topIn.TruncResNameOnumId(rnum1).c_str(), topIn.TruncResNameOnumId(rnum2).c_str(), sqrt(dist2_1)); // Do the rest of the atoms in res2 to the anomeric carbon @@ -1651,10 +1655,23 @@ const double cutoff2 = Atom::GetBondLength(a1Elt, a2Elt) + offset; cutoff2 *= cutoff2; if (D2 < cutoff2) { - mprintf("\t Adding bond between %s and %s\n", - topIn.ResNameNumAtomNameNum(c_beg).c_str(), - topIn.ResNameNumAtomNameNum(at2).c_str()); - topIn.AddBond(c_beg, at2); + if (debug_ > 1) + mprintf("DEBUG: Atom %s to %s = %f\n", + topIn.AtomMaskName(c_beg).c_str(), topIn.AtomMaskName(at2).c_str(), sqrt(D2)); + if (closest_at == -1) { + closest_at = at2; + closest_d2 = D2; + } else if (D2 < closest_d2) { + mprintf("\t Atom %s (%f Ang.) is closer than %s (%f Ang.).\n", + topIn.ResNameNumAtomNameNum(at2).c_str(), sqrt(D2), + topIn.ResNameNumAtomNameNum(closest_at).c_str(), sqrt(closest_d2)); + closest_at = at2; + closest_d2 = D2; + } + //mprintf("\t Adding bond between %s and %s\n", + // topIn.ResNameNumAtomNameNum(c_beg).c_str(), + // topIn.ResNameNumAtomNameNum(at2).c_str()); + //topIn.AddBond(c_beg, at2); } } } // END loop over res2 atoms @@ -1662,7 +1679,12 @@ const } // END res2 is not solvent } // END res1 != res2 } // END res2 loop over other residues - + if (closest_at != -1) { + mprintf("\t Adding bond between %s and %s\n", + topIn.ResNameNumAtomNameNum(c_beg).c_str(), + topIn.ResNameNumAtomNameNum(closest_at).c_str()); + topIn.AddBond(c_beg, closest_at); + } return 0; } From 252307d1ef584eb86adafe71256b2a9c5d0d4f43 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 21 Oct 2021 14:54:46 -0400 Subject: [PATCH 192/368] Start sulfate routine --- src/Exec_PrepareForLeap.cpp | 59 +++++++++++++++++++++++++++++++++++++ src/Exec_PrepareForLeap.h | 2 ++ 2 files changed, 61 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6a2405b91c..96d1146ab1 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1688,6 +1688,65 @@ const return 0; } +/** Check for sulfate groups that need to be separate SO3 residues. */ +int Exec_PrepareForLeap::CheckForSugarSulfates(int rnum, Iarray const& chainAtomsIn, + Topology& topIn, Frame& frameIn) +const +{ + std::string sugarName = topIn.TruncResNameOnumId(rnum); + // Create copy of the chain atoms array. Original array can become valid + // during residue splitting. + Iarray chainAtoms = chainAtomsIn; + + bool atomsRemain = true; + while (atomsRemain) { + // Even if the residue is split, rnum will always refer to the original + // sugar since the split SO3 will come AFTER this residue. + // Find an oxygen that is both bound to a chain carbon and an SO3 group + // in this residue. + int so3_idx = -1; + for (Iarray::const_iterator cat = chainAtoms.begin(); + cat != chainAtoms.end(); ++cat) + { + for (Atom::bond_iterator oat = topIn[*cat].bondbegin(); + oat != topIn[*cat].bondend(); ++oat) + { + if (topIn[*oat].Element() == Atom::OXYGEN && topIn[*oat].Nbonds() > 1) { + // Is this oxygen bound to a sulfur? + for (Atom::bond_iterator sat = topIn[*oat].bondbegin(); + sat != topIn[*oat].bondend(); ++sat) + { + if (topIn[*sat].Element() == Atom::SULFUR && topIn[*sat].Nbonds() == 4) { + so3_idx = *sat; + // All 4 bonds must be to sulfur + for (Atom::bond_iterator bat = topIn[*sat].bondbegin(); + bat != topIn[*sat].bondend(); ++bat) + { + if (topIn[*bat].Element() != Atom::OXYGEN) { + so3_idx = -1; + break; + } + } // END loop over bonds to sulfur + if (so3_idx != -1) { + mprintf("\tFound SO3 group centered on atom '%s'\n", + topIn.AtomMaskName(so3_idx).c_str()); + break; + } + } // END atom is sulfur + } // END loop over bonds to oxygen + if (so3_idx != -1) break; + } // END atom is oxygen + } // END loop over bonds to carbon + if (so3_idx == -1) break; + } // END loop over chain atoms + + // DEBUG + atomsRemain = false; + } // END while atoms remain + + return 0; +} + /** See if the sugar anomeric carbon is actually terminal and needs * to be a separate ROH residue. */ diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index acd24c109c..5cc94ee492 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -78,6 +78,8 @@ class Exec_PrepareForLeap : public Exec { int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; + /// Determine if sugar has sulfates that need SO3 residue(s) + int CheckForSugarSulfates(int, Iarray const&, Topology&, Frame&) const; /// Determine if sugar is terminal and need an ROH residue int CheckIfSugarIsTerminal(int, int, int, Topology&, Frame&) const; /// Attempt to fix any issues with sugars From 8eb15cadc8a25c06a144bec6eb9c58f502bc7648 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 21 Oct 2021 15:03:45 -0400 Subject: [PATCH 193/368] Fix break statement. No need to pass in residue num. --- src/Exec_PrepareForLeap.cpp | 17 +++++++++++------ src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 96d1146ab1..ceadeee04a 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1689,11 +1689,13 @@ const } /** Check for sulfate groups that need to be separate SO3 residues. */ -int Exec_PrepareForLeap::CheckForSugarSulfates(int rnum, Iarray const& chainAtomsIn, +int Exec_PrepareForLeap::CheckForSugarSulfates(Iarray const& chainAtomsIn, Topology& topIn, Frame& frameIn) const { + int rnum = topIn[chainAtomsIn.front()].ResNum(); std::string sugarName = topIn.TruncResNameOnumId(rnum); + mprintf("DEBUG: Sulfate check: %s\n", sugarName.c_str()); // Create copy of the chain atoms array. Original array can become valid // during residue splitting. Iarray chainAtoms = chainAtomsIn; @@ -1705,9 +1707,10 @@ const // Find an oxygen that is both bound to a chain carbon and an SO3 group // in this residue. int so3_idx = -1; - for (Iarray::const_iterator cat = chainAtoms.begin(); - cat != chainAtoms.end(); ++cat) + Iarray::const_iterator cat = chainAtoms.begin(); + for (; cat != chainAtoms.end(); ++cat) { + mprintf("\t%s\n", *(topIn[*cat].Name())); for (Atom::bond_iterator oat = topIn[*cat].bondbegin(); oat != topIn[*cat].bondend(); ++oat) { @@ -1737,11 +1740,11 @@ const if (so3_idx != -1) break; } // END atom is oxygen } // END loop over bonds to carbon - if (so3_idx == -1) break; + if (so3_idx != -1) break; } // END loop over chain atoms + //atomsRemain = (cat == chainAtoms.end()); + atomsRemain = false; // DEBUG - // DEBUG - atomsRemain = false; } // END while atoms remain return 0; @@ -1852,6 +1855,8 @@ const topIn.TruncResNameOnumId(*rnum).c_str(), topIn.AtomMaskName(sugar.AnomericAtom()).c_str(), topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); + // DEBUG + CheckForSugarSulfates(sugar.ChainAtoms(), topIn, frameIn); } } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 5cc94ee492..88158afad1 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -79,7 +79,7 @@ class Exec_PrepareForLeap : public Exec { /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; /// Determine if sugar has sulfates that need SO3 residue(s) - int CheckForSugarSulfates(int, Iarray const&, Topology&, Frame&) const; + int CheckForSugarSulfates(Iarray const&, Topology&, Frame&) const; /// Determine if sugar is terminal and need an ROH residue int CheckIfSugarIsTerminal(int, int, int, Topology&, Frame&) const; /// Attempt to fix any issues with sugars From b1c4452045aaed95347bcb0385f2bee43da403f6 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 22 Oct 2021 10:37:52 -0400 Subject: [PATCH 194/368] Split out the SO3 recognition --- src/Exec_PrepareForLeap.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ceadeee04a..036b1cf55e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1834,6 +1834,8 @@ const typedef std::pair AtomPair; std::vector SugarIndices; SugarIndices.reserve( sugarResNums.size() ); + std::vector ChainIndices; + ChainIndices.reserve( sugarResNums.size() ); for (Iarray::const_iterator rnum = sugarResNums.begin(); rnum != sugarResNums.end(); ++rnum) { @@ -1855,8 +1857,7 @@ const topIn.TruncResNameOnumId(*rnum).c_str(), topIn.AtomMaskName(sugar.AnomericAtom()).c_str(), topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); - // DEBUG - CheckForSugarSulfates(sugar.ChainAtoms(), topIn, frameIn); + ChainIndices.push_back( sugar.ChainAtoms() ); } } @@ -1891,6 +1892,21 @@ const } // End loop over sugar indices } + // if (so3search) { + // Loop over chain indices to see if residues need to be split + for (std::vector::const_iterator it = ChainIndices.begin(); + it != ChainIndices.end(); ++it) + { + int rnum = topIn[it->front()].ResNum(); + if (CheckForSugarSulfates(*it, topIn, frameIn)) { + mprinterr("Error: Checking if sugar %s has sulfates failed.\n", + topIn.TruncResNameOnumId( rnum ).c_str()); + return 1; + } + } + //} + + return 0; } From dafb6a1e8fcfbb17ace698e972771d9bb25559e9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 22 Oct 2021 10:57:27 -0400 Subject: [PATCH 195/368] Remove residue number from Sugar; if indices need to be shifted around because e.g. residues are split, do not want to have to renumber every single residue. --- src/Exec_PrepareForLeap.cpp | 41 ++++++++++++++++++++++--------------- src/Exec_PrepareForLeap.h | 11 +++++----- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 036b1cf55e..2a05416c74 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -13,19 +13,20 @@ #include // sort // ----- Sugar Class ----------------------------------------------------------- -Exec_PrepareForLeap::Sugar::Sugar(int rn) : - rnum_(rn), +/** CONSTRUCTOR - Incomplete setup; set anomeric atom as residue first atom + * so that ResNum() works. + */ +Exec_PrepareForLeap::Sugar::Sugar(int firstat) : ring_oxygen_atom_(-1), - anomeric_atom_(-1), + anomeric_atom_(firstat), ano_ref_atom_(-1), highest_stereocenter_(-1), ringType_(UNKNOWN_RING) {} /** CONSTRUCTOR - Set ring atom indices and ring type. */ -Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, +Exec_PrepareForLeap::Sugar::Sugar(int roa, int aa, int ara, int hs, Iarray const& RA, Iarray const& CA) : - rnum_(rn), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), @@ -42,12 +43,17 @@ Exec_PrepareForLeap::Sugar::Sugar(int rn, int roa, int aa, int ara, int hs, } } +/** \return Residue number based on the anomeric carbon atom index. */ +int Exec_PrepareForLeap::Sugar::ResNum(Topology const& topIn) const { + return topIn[anomeric_atom_].ResNum(); +} + /** Print info about the sugar to STDOUT. */ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { if (NotSet()) { - mprintf("\t%s : Not Set.\n", topIn.TruncResNameOnumId(rnum_).c_str()); + mprintf("\t%s : Not Set.\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str()); } else { - mprintf("\t%s :\n", topIn.TruncResNameOnumId(rnum_).c_str()); + mprintf("\t%s :\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str()); mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); @@ -956,7 +962,7 @@ const topIn.TruncResNameOnumId(rnum).c_str()); //resStat_[rnum] = SUGAR_MISSING_RING_O; stat = ID_MISSING_O; - return Sugar(rnum); + return Sugar(res.FirstAtom()); } else if (potentialRingStartAtoms.size() > 1) { mprinterr("Error: Multiple potential ring start atoms:\n"); for (Iarray::const_iterator it = potentialRingStartAtoms.begin(); @@ -964,7 +970,7 @@ const ++it) mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); stat = ID_ERR; - return Sugar(rnum); + return Sugar(res.FirstAtom()); } // Use the previously-set up AtomMap to help determine stereocenters @@ -1112,7 +1118,7 @@ const if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, RA)) { mprinterr("Error: Could not find remaining chain carbons.\n"); stat = ID_ERR; - return Sugar(rnum); + return Sugar(res.FirstAtom()); } if (debug_ > 0) { mprintf("DEBUG: Complete carbon chain (from anomeric carbon):\n"); @@ -1134,11 +1140,11 @@ const if (RA.empty() || ring_oxygen_atom == -1) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); stat = ID_ERR; - return Sugar(rnum); + return Sugar(res.FirstAtom()); } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); - return Sugar(rnum, ring_oxygen_atom, anomeric_atom, ano_ref_atom, highest_stereocenter, + return Sugar(ring_oxygen_atom, anomeric_atom, ano_ref_atom, highest_stereocenter, RA, carbon_chain); } @@ -1177,7 +1183,8 @@ const // ChiralRetType ac_chirality = CalcChiralAtomTorsion(t_an, anomeric_atom, topIn, frameIn); // mprintf("DEBUG: Based on t_an %s chirality is %s\n", // topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[ac_chirality]); - int ret = CalcAnomericTorsion(t_an, sugar.AnomericAtom(), sugar.RingOxygenAtom(), sugar.ResNum(), + int ret = CalcAnomericTorsion(t_an, sugar.AnomericAtom(), sugar.RingOxygenAtom(), + sugar.ResNum(topIn), sugar.RingAtoms(), topIn, frameIn); if (ret < 0) { // This means C1 X substituent missing; non-fatal. @@ -1331,7 +1338,7 @@ std::string Exec_PrepareForLeap::DetermineSugarLinkages(Sugar const& sugar, Char std::set& sugarBondsToRemove) const { - int rnum = sugar.ResNum(); + int rnum = sugar.ResNum(topIn); Residue const& res = topIn.SetRes(rnum); // Use set to store link atoms so it is ordered by position @@ -1437,13 +1444,13 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, Frame const& frameIn, CharMask const& cmask, CpptrajFile* outfile, std::set& sugarBondsToRemove) { - const std::string sugarName = topIn.TruncResNameOnumId(sugar.ResNum()); + const std::string sugarName = topIn.TruncResNameOnumId(sugar.ResNum(topIn)); if (sugar.NotSet()) { mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", sugarName.c_str()); return 0; // TODO return 1? } - int rnum = sugar.ResNum(); + int rnum = sugar.ResNum(topIn); Residue& res = topIn.SetRes(rnum); // Try to ID the base sugar type from the input name. char resChar = ' '; @@ -1977,7 +1984,7 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, return 1; else mprintf("Warning: Preparation of sugar %s failed, skipping.\n", - topIn.TruncResNameOnumId( sugar->ResNum() ).c_str()); + topIn.TruncResNameOnumId( sugar->ResNum(topIn) ).c_str()); } } // END loop over sugar residues // Remove bonds between sugars diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 88158afad1..94b35058d1 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -141,12 +141,12 @@ class Exec_PrepareForLeap::Sugar { FURANOSE, ///< Ring is 4 carbons, 1 oxygen UNKNOWN_RING ///< Some unknown ring type }; - /// CONSTRUCTOR - residue number, incomplete setup + /// CONSTRUCTOR - residue first atom, incomplete setup Sugar(int); - /// CONSTRUCTOR - res #, ring O, Anomeric, Anomeric Ref, Highest Sterocenter, ring atoms, chain atoms - Sugar(int,int,int,int,int,Iarray const&,Iarray const&); + /// CONSTRUCTOR - ring O, Anomeric, Anomeric Ref, Highest Sterocenter, ring atoms, chain atoms + Sugar(int,int,int,int,Iarray const&,Iarray const&); - int ResNum() const { return rnum_; } + inline int ResNum(Topology const&) const; int RingOxygenAtom() const { return ring_oxygen_atom_; } int AnomericAtom() const { return anomeric_atom_; } int AnomericRefAtom() const { return ano_ref_atom_; } @@ -159,12 +159,11 @@ class Exec_PrepareForLeap::Sugar { // const_iterator ringbegin() const { return ring_atoms_.begin(); } // const_iterator ringend() const { return ring_atoms_.end(); } - bool NotSet() const { return (ring_oxygen_atom_ == -1); } + bool NotSet() const { return (ring_oxygen_atom_ < 0); } /// \return Number of ring atoms unsigned int NumRingAtoms() const; void PrintInfo(Topology const&) const; private: - int rnum_; ///< Residue index int ring_oxygen_atom_; ///< Index of the ring oxygen atom int anomeric_atom_; ///< Index of the anomeric C atom (ring start) int ano_ref_atom_; ///< Index of the anomeric reference C atom From cb6c6390277a1eb742fb0a19f7f2ce5c72edb861 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 22 Oct 2021 11:28:00 -0400 Subject: [PATCH 196/368] Start converting FixSugarsStructure into the main sugar setup routine --- src/Exec_PrepareForLeap.cpp | 64 ++++++++++++++++--------------------- src/Exec_PrepareForLeap.h | 3 +- 2 files changed, 29 insertions(+), 38 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2a05416c74..8cb3fdb36f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1818,13 +1818,15 @@ const } /** Try to fix issues with sugar structure before trying to identify. */ -int Exec_PrepareForLeap::FixSugarsStructure(std::string const& sugarMaskStr, +int Exec_PrepareForLeap::FixSugarsStructure(std::vector& sugarResidues, + std::string const& sugarMaskStr, Topology& topIn, Frame& frameIn, bool c1bondsearch, bool termsearch) const { + sugarResidues.clear(); AtomMask sugarMask(sugarMaskStr); - mprintf("\tAttempting to fix sugars selected by '%s'\n", sugarMask.MaskString()); + mprintf("\tLooking for sugars selected by '%s'\n", sugarMask.MaskString()); if (topIn.SetupIntegerMask( sugarMask )) return 1; sugarMask.MaskInfo(); if (sugarMask.None()) { @@ -1832,17 +1834,9 @@ const return 0; } //CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); - // Get sugar residue numbers. Save atom indices since residue numbers - // will become invalidated if we have to split residues. + // Get sugar residue numbers. Iarray sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); // Try to identify sugar rings. - // The SugarIndices array will hold the atom indices for anomeric carbons - // and ring oxygens. - typedef std::pair AtomPair; - std::vector SugarIndices; - SugarIndices.reserve( sugarResNums.size() ); - std::vector ChainIndices; - ChainIndices.reserve( sugarResNums.size() ); for (Iarray::const_iterator rnum = sugarResNums.begin(); rnum != sugarResNums.end(); ++rnum) { @@ -1850,31 +1844,24 @@ const Sugar sugar = IdSugarRing(*rnum, topIn, stat); if (stat == ID_ERR) { if (errorsAreFatal_) { - mprinterr("Error: During sugar fix, problem identifying sugar ring for %s\n", + mprinterr("Error: Problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); return 1; } else - mprintf("Warning: During sugar fix, problem identifying sugar ring for %s\n", + mprintf("Warning: Problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); } - if (!sugar.NotSet()) { - SugarIndices.push_back( AtomPair(sugar.AnomericAtom(), sugar.RingOxygenAtom()) ); - if (debug_ > 0) - mprintf("DEBUG: fix search %s ano. C= %s ring O= %s\n", - topIn.TruncResNameOnumId(*rnum).c_str(), - topIn.AtomMaskName(sugar.AnomericAtom()).c_str(), - topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); - ChainIndices.push_back( sugar.ChainAtoms() ); - } + if (!sugar.NotSet()) + sugarResidues.push_back( sugar ); } if (c1bondsearch) { // Loop over sugar indices to see if anomeric C is missing bonds - for (std::vector::const_iterator ac_ro = SugarIndices.begin(); - ac_ro != SugarIndices.end(); ++ac_ro) + for (std::vector::const_iterator sugar = sugarResidues.begin(); + sugar != sugarResidues.end(); ++sugar) { - int anomericAtom = ac_ro->first; - int rnum = topIn[anomericAtom].ResNum(); + int anomericAtom = sugar->AnomericAtom(); + int rnum = sugar->ResNum(topIn); if (FindSugarC1Linkages(rnum, anomericAtom, topIn, frameIn)) { mprinterr("Error: Search for bonds to anomeric carbon '%s' failed.\n", topIn.AtomMaskName(anomericAtom).c_str()); @@ -1884,13 +1871,13 @@ const } if (termsearch) { - // Loop over sugar indices to see if residues need to be split - for (std::vector::const_iterator ac_ro = SugarIndices.begin(); - ac_ro != SugarIndices.end(); ++ac_ro) + // Loop over sugar indices to see if residues have ROH that must be split off + for (std::vector::const_iterator sugar = sugarResidues.begin(); + sugar != sugarResidues.end(); ++sugar) { - int anomericAtom = ac_ro->first; - int ringOxygen = ac_ro->second; - int rnum = topIn[anomericAtom].ResNum(); + int anomericAtom = sugar->AnomericAtom(); + int ringOxygen = sugar->RingOxygenAtom(); + int rnum = sugar->ResNum(topIn); if (CheckIfSugarIsTerminal(rnum, anomericAtom, ringOxygen, topIn, frameIn)) { mprinterr("Error: Checking if sugar %s is terminal failed.\n", topIn.TruncResNameOnumId(rnum).c_str()); @@ -1901,11 +1888,11 @@ const // if (so3search) { // Loop over chain indices to see if residues need to be split - for (std::vector::const_iterator it = ChainIndices.begin(); - it != ChainIndices.end(); ++it) + for (std::vector::const_iterator sugar = sugarResidues.begin(); + sugar != sugarResidues.end(); ++sugar) { - int rnum = topIn[it->front()].ResNum(); - if (CheckForSugarSulfates(*it, topIn, frameIn)) { + int rnum = sugar->ResNum(topIn); + if (CheckForSugarSulfates(sugar->ChainAtoms(), topIn, frameIn)) { mprinterr("Error: Checking if sugar %s has sulfates failed.\n", topIn.TruncResNameOnumId( rnum ).c_str()); return 1; @@ -2825,13 +2812,16 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else mprintf("\tNot searching for missing bonds to sugar anomeric atoms.\n"); if (termsearch || c1bondsearch) { + std::vector sugarResidues; // May need to modify sugar structure/topology, either by splitting // C1 hydroxyls of terminal sugars into ROH residues, and/or by // adding missing bonds to C1 atoms. // This is done before any identification takes place since we want // to identify based on the most up-to-date topology. - if (FixSugarsStructure(sugarmaskstr, topIn, frameIn, c1bondsearch, termsearch)) { + if (FixSugarsStructure(sugarResidues, sugarmaskstr, topIn, frameIn, + c1bondsearch, termsearch)) + { mprinterr("Error: Sugar structure modification failed.\n"); return CpptrajState::ERR; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 94b35058d1..374217cc68 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -83,7 +83,8 @@ class Exec_PrepareForLeap : public Exec { /// Determine if sugar is terminal and need an ROH residue int CheckIfSugarIsTerminal(int, int, int, Topology&, Frame&) const; /// Attempt to fix any issues with sugars - int FixSugarsStructure(std::string const&, Topology&, Frame&, bool, bool) const; + int FixSugarsStructure(std::vector&, std::string const&, Topology&, Frame&, + bool, bool) const; int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*); int FindTerByBonds(Topology&, CharMask const&) const; From 7f66139c528e00b148fde3aa4bafe31f1055efa1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sat, 23 Oct 2021 14:49:04 -0400 Subject: [PATCH 197/368] Add sugar remap indices function --- src/Exec_PrepareForLeap.cpp | 15 +++++++++++++++ src/Exec_PrepareForLeap.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8cb3fdb36f..9cde0fd789 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -77,11 +77,26 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { } } +/** \return Number of ring atoms (including oxygen) */ unsigned int Exec_PrepareForLeap::Sugar::NumRingAtoms() const { if (NotSet()) return 0; return ring_atoms_.size() + 1; } +/** Remap internal indices according to given map. */ +void Exec_PrepareForLeap::Sugar::RemapIndices(Iarray const& atomMap) { + // Always try the anomeric atom + anomeric_atom_ = atomMap[anomeric_atom_]; + if (NotSet()) return; + ring_oxygen_atom_ = atomMap[ring_oxygen_atom_]; + ano_ref_atom_ = atomMap[ano_ref_atom_]; + highest_stereocenter_ = atomMap[highest_stereocenter_]; + for (Iarray::iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) + *it = atomMap[*it]; + for (Iarray::iterator it = chain_atoms_.begin(); it != chain_atoms_.end(); ++it) + *it = atomMap[*it]; +} + // ----------------------------------------------------------------------------- /** CONSTRUCTOR */ diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 374217cc68..20729b6131 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -164,6 +164,8 @@ class Exec_PrepareForLeap::Sugar { /// \return Number of ring atoms unsigned int NumRingAtoms() const; void PrintInfo(Topology const&) const; + /// Remap internal indices according to given atom map. + void RemapIndices(Iarray const&); private: int ring_oxygen_atom_; ///< Index of the ring oxygen atom int anomeric_atom_; ///< Index of the anomeric C atom (ring start) From 2d3747d73c2b38752fd5f5692f8dd857ed3a4666 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sat, 23 Oct 2021 14:54:17 -0400 Subject: [PATCH 198/368] Ensure sugar indices are remapped. --- src/Exec_PrepareForLeap.cpp | 19 ++++++++++--------- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9cde0fd789..808f10c376 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1775,10 +1775,12 @@ const /** See if the sugar anomeric carbon is actually terminal and needs * to be a separate ROH residue. */ -int Exec_PrepareForLeap::CheckIfSugarIsTerminal(int rnum, int anomericAtom, int ringOxygen, - Topology& topIn, Frame& frameIn) +int Exec_PrepareForLeap::CheckIfSugarIsTerminal(Sugar& sugar, Topology& topIn, Frame& frameIn) const { + int rnum = sugar.ResNum(topIn); + int anomericAtom = sugar.AnomericAtom(); + int ringOxygen = sugar.RingOxygenAtom(); std::string sugarName = topIn.TruncResNameOnumId(rnum); // Is the anomeric carbon bonded to an oxygen that is part of this residue. @@ -1829,6 +1831,8 @@ const // Reorder the frame to match Frame oldFrame = frameIn; frameIn.SetCoordinatesByMap( oldFrame, atomMap ); + // Remap the sugar indices + sugar.RemapIndices( atomMap ); return 0; } @@ -1887,15 +1891,12 @@ const if (termsearch) { // Loop over sugar indices to see if residues have ROH that must be split off - for (std::vector::const_iterator sugar = sugarResidues.begin(); - sugar != sugarResidues.end(); ++sugar) + for (std::vector::iterator sugar = sugarResidues.begin(); + sugar != sugarResidues.end(); ++sugar) { - int anomericAtom = sugar->AnomericAtom(); - int ringOxygen = sugar->RingOxygenAtom(); - int rnum = sugar->ResNum(topIn); - if (CheckIfSugarIsTerminal(rnum, anomericAtom, ringOxygen, topIn, frameIn)) { + if (CheckIfSugarIsTerminal(*sugar, topIn, frameIn)) { mprinterr("Error: Checking if sugar %s is terminal failed.\n", - topIn.TruncResNameOnumId(rnum).c_str()); + topIn.TruncResNameOnumId(sugar->ResNum(topIn)).c_str()); return 1; } } // End loop over sugar indices diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 20729b6131..042e668f3e 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -81,7 +81,7 @@ class Exec_PrepareForLeap : public Exec { /// Determine if sugar has sulfates that need SO3 residue(s) int CheckForSugarSulfates(Iarray const&, Topology&, Frame&) const; /// Determine if sugar is terminal and need an ROH residue - int CheckIfSugarIsTerminal(int, int, int, Topology&, Frame&) const; + int CheckIfSugarIsTerminal(Sugar&, Topology&, Frame&) const; /// Attempt to fix any issues with sugars int FixSugarsStructure(std::vector&, std::string const&, Topology&, Frame&, bool, bool) const; From c2e6408854192bda05171174d05768d497e40792 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sat, 23 Oct 2021 15:01:59 -0400 Subject: [PATCH 199/368] Use Sugar in sulfate routine. Ensure bonded atoms are in the same residue as the carbon chain atom --- src/Exec_PrepareForLeap.cpp | 33 +++++++++++++++++---------------- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 808f10c376..62604e0332 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1711,16 +1711,13 @@ const } /** Check for sulfate groups that need to be separate SO3 residues. */ -int Exec_PrepareForLeap::CheckForSugarSulfates(Iarray const& chainAtomsIn, +int Exec_PrepareForLeap::CheckForSugarSulfates(Sugar& sugar, Topology& topIn, Frame& frameIn) const { - int rnum = topIn[chainAtomsIn.front()].ResNum(); + int rnum = sugar.ResNum(topIn); std::string sugarName = topIn.TruncResNameOnumId(rnum); mprintf("DEBUG: Sulfate check: %s\n", sugarName.c_str()); - // Create copy of the chain atoms array. Original array can become valid - // during residue splitting. - Iarray chainAtoms = chainAtomsIn; bool atomsRemain = true; while (atomsRemain) { @@ -1729,25 +1726,30 @@ const // Find an oxygen that is both bound to a chain carbon and an SO3 group // in this residue. int so3_idx = -1; - Iarray::const_iterator cat = chainAtoms.begin(); - for (; cat != chainAtoms.end(); ++cat) + Iarray::const_iterator cat = sugar.ChainAtoms().begin(); + for (; cat != sugar.ChainAtoms().end(); ++cat) { mprintf("\t%s\n", *(topIn[*cat].Name())); for (Atom::bond_iterator oat = topIn[*cat].bondbegin(); oat != topIn[*cat].bondend(); ++oat) { - if (topIn[*oat].Element() == Atom::OXYGEN && topIn[*oat].Nbonds() > 1) { + if (topIn[*oat].Element() == Atom::OXYGEN && + topIn[*oat].ResNum() == rnum && + topIn[*oat].Nbonds() > 1) { // Is this oxygen bound to a sulfur? for (Atom::bond_iterator sat = topIn[*oat].bondbegin(); sat != topIn[*oat].bondend(); ++sat) { - if (topIn[*sat].Element() == Atom::SULFUR && topIn[*sat].Nbonds() == 4) { + if (topIn[*sat].Element() == Atom::SULFUR && + topIn[*sat].ResNum() == rnum && + topIn[*sat].Nbonds() == 4) { so3_idx = *sat; - // All 4 bonds must be to sulfur + // All 4 bonds must be to oxygen for (Atom::bond_iterator bat = topIn[*sat].bondbegin(); bat != topIn[*sat].bondend(); ++bat) { - if (topIn[*bat].Element() != Atom::OXYGEN) { + if (topIn[*bat].Element() != Atom::OXYGEN && + topIn[*bat].ResNum() == rnum) { so3_idx = -1; break; } @@ -1904,13 +1906,12 @@ const // if (so3search) { // Loop over chain indices to see if residues need to be split - for (std::vector::const_iterator sugar = sugarResidues.begin(); - sugar != sugarResidues.end(); ++sugar) + for (std::vector::iterator sugar = sugarResidues.begin(); + sugar != sugarResidues.end(); ++sugar) { - int rnum = sugar->ResNum(topIn); - if (CheckForSugarSulfates(sugar->ChainAtoms(), topIn, frameIn)) { + if (CheckForSugarSulfates(*sugar, topIn, frameIn)) { mprinterr("Error: Checking if sugar %s has sulfates failed.\n", - topIn.TruncResNameOnumId( rnum ).c_str()); + topIn.TruncResNameOnumId( sugar->ResNum(topIn) ).c_str()); return 1; } } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 042e668f3e..b669c61539 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -79,7 +79,7 @@ class Exec_PrepareForLeap : public Exec { /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; /// Determine if sugar has sulfates that need SO3 residue(s) - int CheckForSugarSulfates(Iarray const&, Topology&, Frame&) const; + int CheckForSugarSulfates(Sugar&, Topology&, Frame&) const; /// Determine if sugar is terminal and need an ROH residue int CheckIfSugarIsTerminal(Sugar&, Topology&, Frame&) const; /// Attempt to fix any issues with sugars From f4ed64022eae42e03dc7f7dff01baed72b55d022 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sat, 23 Oct 2021 15:12:09 -0400 Subject: [PATCH 200/368] Do the sulfate split --- src/Exec_PrepareForLeap.cpp | 41 ++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 62604e0332..1f623ffd03 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1725,6 +1725,7 @@ const // sugar since the split SO3 will come AFTER this residue. // Find an oxygen that is both bound to a chain carbon and an SO3 group // in this residue. + int o_idx = -1; int so3_idx = -1; Iarray::const_iterator cat = sugar.ChainAtoms().begin(); for (; cat != sugar.ChainAtoms().end(); ++cat) @@ -1733,9 +1734,11 @@ const for (Atom::bond_iterator oat = topIn[*cat].bondbegin(); oat != topIn[*cat].bondend(); ++oat) { + o_idx = -1; if (topIn[*oat].Element() == Atom::OXYGEN && topIn[*oat].ResNum() == rnum && topIn[*oat].Nbonds() > 1) { + o_idx = *oat; // Is this oxygen bound to a sulfur? for (Atom::bond_iterator sat = topIn[*oat].bondbegin(); sat != topIn[*oat].bondend(); ++sat) @@ -1755,8 +1758,9 @@ const } } // END loop over bonds to sulfur if (so3_idx != -1) { - mprintf("\tFound SO3 group centered on atom '%s'\n", - topIn.AtomMaskName(so3_idx).c_str()); + mprintf("\tFound SO3 group centered on atom '%s' from O '%s'\n", + topIn.AtomMaskName(so3_idx).c_str(), + topIn.AtomMaskName(o_idx).c_str()); break; } } // END atom is sulfur @@ -1766,9 +1770,36 @@ const } // END loop over bonds to carbon if (so3_idx != -1) break; } // END loop over chain atoms - //atomsRemain = (cat == chainAtoms.end()); - atomsRemain = false; // DEBUG - + if (cat == sugar.ChainAtoms().end()) + atomsRemain = false; + else { + // sanity check + if (so3_idx == -1 || o_idx == -1) { + mprinterr("Internal Error: Sulfate index is negative.\n"); + return 1; + } + // Create array with SO3 selected + Iarray selected(1, so3_idx); + for (Atom::bond_iterator bat = topIn[so3_idx].bondbegin(); + bat != topIn[so3_idx].bondend(); ++bat) + if (*bat != o_idx) + selected.push_back(*bat); + AtomMask SO3(selected, topIn.Natom()); + // Split the sulfate into a new residue named SO3 for Glycam. + // This may involve reordering atoms within the residue, but not + // any other atoms, so we should not have to update other sugars. + Iarray atomMap; + if (topIn.SplitResidue(SO3, "SO3", atomMap)) { + mprinterr("Error: Could not split sulfate from residue '%s'.\n", sugarName.c_str()); + return 1; + } + // Reorder the frame to match + Frame oldFrame = frameIn; + frameIn.SetCoordinatesByMap( oldFrame, atomMap ); + // Remap the sugar indices + sugar.RemapIndices( atomMap ); + } + //atomsRemain = false; // DEBUG } // END while atoms remain return 0; From c7b854c52cddae3d69c1443e4fa598dbddcf5234 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 25 Oct 2021 06:45:16 -0400 Subject: [PATCH 201/368] Recognized SO3 as valid res name --- src/Exec_PrepareForLeap.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 1f623ffd03..2a9ed75797 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1408,6 +1408,10 @@ const if (debug_ > 0) mprintf("DEBUG: '%s' is terminal hydroxyl.\n", *(pres.Name())); resStatIn[topIn[*bat].ResNum()] = VALIDATED; + } else if (pres.Name() == "SO3") { + if (debug_ > 0) + mprintf("DEBUG: '%s' is sulfate group.\n", *(pres.Name())); + resStatIn[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); resStatIn[topIn[*bat].ResNum()] = UNRECOGNIZED_SUGAR_LINKAGE; From f3348f450efaad71b3b91d8d341a57112fc38b24 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 25 Oct 2021 14:35:12 -0400 Subject: [PATCH 202/368] Ensure atom names are properly changed after residues are split --- src/Exec_PrepareForLeap.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 2a9ed75797..56d080b0a1 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1782,12 +1782,23 @@ const mprinterr("Internal Error: Sulfate index is negative.\n"); return 1; } - // Create array with SO3 selected + // Select S and other 3 O atoms Iarray selected(1, so3_idx); +// Iarray o_atoms; for (Atom::bond_iterator bat = topIn[so3_idx].bondbegin(); bat != topIn[so3_idx].bondend(); ++bat) - if (*bat != o_idx) - selected.push_back(*bat); + { + if (*bat != o_idx) { + selected.push_back( *bat ); +// o_atoms.push_back( *bat ); + } + } + // Change the atom names + ChangeAtomName(topIn.SetAtom(selected[0]), "S1"); + ChangeAtomName(topIn.SetAtom(selected[1]), "O1"); + ChangeAtomName(topIn.SetAtom(selected[2]), "O2"); + ChangeAtomName(topIn.SetAtom(selected[3]), "O3"); + // Create array with SO3 selected AtomMask SO3(selected, topIn.Natom()); // Split the sulfate into a new residue named SO3 for Glycam. // This may involve reordering atoms within the residue, but not @@ -1852,9 +1863,20 @@ const } } } + // Sanity check + if (selected.size() > 2) { + mprintf("Warning: Sugar '%s' appears to have OH2 bound to anomeric oxygen!\n", + sugarName.c_str()); + return 0; + } mprintf("\tIn-residue oxygen bonded to anomeric carbon: '%s %s'\n", sugarName.c_str(), *(topIn[o1_atom].Name())); mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); + // Change atom names + ChangeAtomName(topIn.SetAtom(selected[0]), "O1"); + if (selected.size() > 1) + ChangeAtomName(topIn.SetAtom(selected[1]), "HO1"); + // Create atom mask AtomMask ROH(selected, topIn.Natom()); // Split the hydroxyl into a new residue named ROH for Glycam. From a9d2e795755cfbdbb134350b407ca566581797d5 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 25 Oct 2021 14:47:52 -0400 Subject: [PATCH 203/368] Make unrecognized terminal an error. --- src/Exec_PrepareForLeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 56d080b0a1..bf6586a22d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1865,9 +1865,9 @@ const } // Sanity check if (selected.size() > 2) { - mprintf("Warning: Sugar '%s' appears to have OH2 bound to anomeric oxygen!\n", + mprintf("Error: Sugar '%s' has unrecognized terminal group.\n", sugarName.c_str()); - return 0; + return 1; } mprintf("\tIn-residue oxygen bonded to anomeric carbon: '%s %s'\n", sugarName.c_str(), *(topIn[o1_atom].Name())); From 3bd77941c29df20b03a5d4be35c9a99ba40b9b0e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 25 Oct 2021 14:53:04 -0400 Subject: [PATCH 204/368] Handle case where multiple ring start atoms are found. Allows handling of methylated sugars --- src/Exec_PrepareForLeap.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index bf6586a22d..0dfaf7273c 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -978,7 +978,7 @@ const //resStat_[rnum] = SUGAR_MISSING_RING_O; stat = ID_MISSING_O; return Sugar(res.FirstAtom()); - } else if (potentialRingStartAtoms.size() > 1) { + } /*else if (potentialRingStartAtoms.size() > 1) { mprinterr("Error: Multiple potential ring start atoms:\n"); for (Iarray::const_iterator it = potentialRingStartAtoms.begin(); it != potentialRingStartAtoms.end(); @@ -986,7 +986,7 @@ const mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); stat = ID_ERR; return Sugar(res.FirstAtom()); - } + }*/ // Use the previously-set up AtomMap to help determine stereocenters std::vector atomIsChiral; @@ -1052,6 +1052,8 @@ const Iarray RA; // This will hold carbon chain atoms starting from the anomeric carbon Iarray carbon_chain; + // Will be set true if complete ring can be found + bool ring_complete = false; for (Iarray::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); ++ringat) @@ -1064,7 +1066,6 @@ const if (at != *ringat) Visited[at] = false; Iarray ring_atoms( topIn.Res(rnum).NumAtoms(), -1 ); - bool ring_complete = false; // Since we have already established that *ringat is an oxygen bonded // to two carbons, just start at the first carbon to see if we can // get to the second carbon. @@ -1106,8 +1107,9 @@ const if (debug_ > 0) mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); - // TODO handle the case where multiple potential ring start atoms exist - if (ring_complete) { + if (!ring_complete) { + continue; + } else { ring_oxygen_atom = *ringat; // Place the ring atoms into an array without the terminating -1 @@ -1149,10 +1151,9 @@ const if (debug_ > 0) mprintf("DEBUG: Index of highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); - } // END ring_complete } - if (RA.empty() || ring_oxygen_atom == -1) { + if (!ring_complete || RA.empty() || ring_oxygen_atom == -1) { mprinterr("Error: Sugar ring atoms could not be identified.\n"); stat = ID_ERR; return Sugar(res.FirstAtom()); From d41716c9b6ba3804fe7cf49a77e4944eb420907b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 25 Oct 2021 19:22:28 -0400 Subject: [PATCH 205/368] Recognized methyl group --- src/Exec_PrepareForLeap.cpp | 59 ++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0dfaf7273c..165c245911 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1411,7 +1411,11 @@ const resStatIn[topIn[*bat].ResNum()] = VALIDATED; } else if (pres.Name() == "SO3") { if (debug_ > 0) - mprintf("DEBUG: '%s' is sulfate group.\n", *(pres.Name())); + mprintf("DEBUG: '%s' is a sulfate group.\n", *(pres.Name())); + resStatIn[topIn[*bat].ResNum()] = VALIDATED; + } else if (pres.Name() == "MEX") { + if (debug_ > 0) + mprintf("DEBUG: '%s' is a methyl group.\n", *(pres.Name())); resStatIn[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); @@ -1724,6 +1728,8 @@ const std::string sugarName = topIn.TruncResNameOnumId(rnum); mprintf("DEBUG: Sulfate check: %s\n", sugarName.c_str()); + enum GroupType { NO_GROUP = 0, G_SO3, G_CH3 }; + bool atomsRemain = true; while (atomsRemain) { // Even if the residue is split, rnum will always refer to the original @@ -1732,6 +1738,7 @@ const // in this residue. int o_idx = -1; int so3_idx = -1; + GroupType groupType = NO_GROUP; Iarray::const_iterator cat = sugar.ChainAtoms().begin(); for (; cat != sugar.ChainAtoms().end(); ++cat) { @@ -1763,11 +1770,37 @@ const } } // END loop over bonds to sulfur if (so3_idx != -1) { + groupType = G_SO3; mprintf("\tFound SO3 group centered on atom '%s' from O '%s'\n", topIn.AtomMaskName(so3_idx).c_str(), topIn.AtomMaskName(o_idx).c_str()); break; } + } else if (topIn[*sat].Element() == Atom::CARBON && + topIn[*sat].ResNum() == rnum && + (topIn[*sat].Nbonds() == 4 || topIn[*sat].Nbonds() == 1)) { + so3_idx = *sat; + // If 4 bonds, 3 must be to hydrogen + if (topIn[*sat].Nbonds() == 4) { + int bonds_to_h = 0; + for (Atom::bond_iterator bat = topIn[*sat].bondbegin(); + bat != topIn[*sat].bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::HYDROGEN) + bonds_to_h++; + } + if (bonds_to_h < 3) { + so3_idx = -1; + break; + } + } + if (so3_idx != -1) { + groupType = G_CH3; + mprintf("\tFound CH3 group centered on atom '%s' from O '%s'\n", + topIn.AtomMaskName(so3_idx).c_str(), + topIn.AtomMaskName(o_idx).c_str()); + break; + } } // END atom is sulfur } // END loop over bonds to oxygen if (so3_idx != -1) break; @@ -1785,27 +1818,37 @@ const } // Select S and other 3 O atoms Iarray selected(1, so3_idx); -// Iarray o_atoms; for (Atom::bond_iterator bat = topIn[so3_idx].bondbegin(); bat != topIn[so3_idx].bondend(); ++bat) { if (*bat != o_idx) { selected.push_back( *bat ); -// o_atoms.push_back( *bat ); } } // Change the atom names - ChangeAtomName(topIn.SetAtom(selected[0]), "S1"); - ChangeAtomName(topIn.SetAtom(selected[1]), "O1"); - ChangeAtomName(topIn.SetAtom(selected[2]), "O2"); - ChangeAtomName(topIn.SetAtom(selected[3]), "O3"); + std::string newResName; + if (groupType == G_SO3) { + ChangeAtomName(topIn.SetAtom(selected[0]), "S1"); + ChangeAtomName(topIn.SetAtom(selected[1]), "O1"); + ChangeAtomName(topIn.SetAtom(selected[2]), "O2"); + ChangeAtomName(topIn.SetAtom(selected[3]), "O3"); + newResName = "SO3"; + } else if (groupType == G_CH3) { + ChangeAtomName(topIn.SetAtom(selected[0]), "CH3"); + if (selected.size() > 1) { + ChangeAtomName(topIn.SetAtom(selected[1]), "H1"); + ChangeAtomName(topIn.SetAtom(selected[2]), "H2"); + ChangeAtomName(topIn.SetAtom(selected[3]), "H3"); + } + newResName = "MEX"; + } // Create array with SO3 selected AtomMask SO3(selected, topIn.Natom()); // Split the sulfate into a new residue named SO3 for Glycam. // This may involve reordering atoms within the residue, but not // any other atoms, so we should not have to update other sugars. Iarray atomMap; - if (topIn.SplitResidue(SO3, "SO3", atomMap)) { + if (topIn.SplitResidue(SO3, newResName, atomMap)) { mprinterr("Error: Could not split sulfate from residue '%s'.\n", sugarName.c_str()); return 1; } From 19af49d69f6f7d60270daffbd0898abe42e79cdb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 10:49:53 -0400 Subject: [PATCH 206/368] Start adding standalone function to identify groups --- src/Exec_PrepareForLeap.cpp | 51 ++++++++++++++++++++++++++++++++++--- src/Exec_PrepareForLeap.h | 3 +++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 165c245911..0015ea7ca0 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1719,6 +1719,53 @@ const return 0; } +/** \return Type of group represented by the atom atIdx. */ +Exec_PrepareForLeap::FunctionalGroupType + Exec_PrepareForLeap::IdFunctionalGroup(int rnum, int atIdx, int linkAtIdx, Topology const& topIn) +const +{ + if (topIn[atIdx].Element() == Atom::SULFUR && + topIn[atIdx].ResNum() == rnum && + topIn[atIdx].Nbonds() == 4) { + //so3_idx = atIdx; + // All 4 bonds must be to oxygen + for (Atom::bond_iterator bat = topIn[atIdx].bondbegin(); + bat != topIn[atIdx].bondend(); ++bat) + { + if (topIn[*bat].Element() != Atom::OXYGEN && + topIn[*bat].ResNum() == rnum) { + return UNRECOGNIZED_GROUP; + } + } // END loop over bonds to sulfur + mprintf("\tFound SO3 group centered on atom '%s' bonded to '%s'\n", + topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + return G_SO3; + + } else if (topIn[atIdx].Element() == Atom::CARBON && + topIn[atIdx].ResNum() == rnum && + (topIn[atIdx].Nbonds() == 4 || topIn[atIdx].Nbonds() == 1)) { + //so3_idx = atIdx; + // If 4 bonds, 3 must be to hydrogen + if (topIn[atIdx].Nbonds() == 4) { + int bonds_to_h = 0; + for (Atom::bond_iterator bat = topIn[atIdx].bondbegin(); + bat != topIn[atIdx].bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::HYDROGEN) + bonds_to_h++; + } + if (bonds_to_h < 3) { + return UNRECOGNIZED_GROUP; + } + } + mprintf("\tFound CH3 group centered on atom '%s' bonded to '%s'\n", + topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + return G_CH3; + + } + return UNRECOGNIZED_GROUP; +} + /** Check for sulfate groups that need to be separate SO3 residues. */ int Exec_PrepareForLeap::CheckForSugarSulfates(Sugar& sugar, Topology& topIn, Frame& frameIn) @@ -1728,8 +1775,6 @@ const std::string sugarName = topIn.TruncResNameOnumId(rnum); mprintf("DEBUG: Sulfate check: %s\n", sugarName.c_str()); - enum GroupType { NO_GROUP = 0, G_SO3, G_CH3 }; - bool atomsRemain = true; while (atomsRemain) { // Even if the residue is split, rnum will always refer to the original @@ -1738,7 +1783,7 @@ const // in this residue. int o_idx = -1; int so3_idx = -1; - GroupType groupType = NO_GROUP; + FunctionalGroupType groupType = UNRECOGNIZED_GROUP; Iarray::const_iterator cat = sugar.ChainAtoms().begin(); for (; cat != sugar.ChainAtoms().end(); ++cat) { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index b669c61539..8d664b162f 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -22,6 +22,7 @@ class Exec_PrepareForLeap : public Exec { class Link; typedef std::vector Iarray; + enum FunctionalGroupType { G_SO3 = 0, G_CH3, UNRECOGNIZED_GROUP }; enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, SUGAR_MISSING_RING_O }; typedef std::vector ResStatArray; @@ -78,6 +79,8 @@ class Exec_PrepareForLeap : public Exec { int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; + /// \return identity of the group bonded to given atom + FunctionalGroupType IdFunctionalGroup(int, int, int, Topology const&) const; /// Determine if sugar has sulfates that need SO3 residue(s) int CheckForSugarSulfates(Sugar&, Topology&, Frame&) const; /// Determine if sugar is terminal and need an ROH residue From b4c258652e045c34aa41ce54e11a9a511c071630 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 10:57:51 -0400 Subject: [PATCH 207/368] Use new id routine. --- src/Exec_PrepareForLeap.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0015ea7ca0..23d9a842ac 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1796,10 +1796,16 @@ const topIn[*oat].ResNum() == rnum && topIn[*oat].Nbonds() > 1) { o_idx = *oat; - // Is this oxygen bound to a sulfur? + // Is this oxygen bound to a recognized group? for (Atom::bond_iterator sat = topIn[*oat].bondbegin(); sat != topIn[*oat].bondend(); ++sat) { + groupType = IdFunctionalGroup(rnum, *sat, o_idx, topIn); + if (groupType != UNRECOGNIZED_GROUP) { + so3_idx = *sat; + break; + } +/* if (topIn[*sat].Element() == Atom::SULFUR && topIn[*sat].ResNum() == rnum && topIn[*sat].Nbonds() == 4) { @@ -1846,7 +1852,7 @@ const topIn.AtomMaskName(o_idx).c_str()); break; } - } // END atom is sulfur + } // END atom is sulfur*/ } // END loop over bonds to oxygen if (so3_idx != -1) break; } // END atom is oxygen From 9be0d2d4803c68519996d8a17683c09a1dadebd8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 11:02:50 -0400 Subject: [PATCH 208/368] Change function name --- src/Exec_PrepareForLeap.cpp | 54 +++---------------------------------- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 4 insertions(+), 52 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 23d9a842ac..5972a1c154 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1766,8 +1766,8 @@ const return UNRECOGNIZED_GROUP; } -/** Check for sulfate groups that need to be separate SO3 residues. */ -int Exec_PrepareForLeap::CheckForSugarSulfates(Sugar& sugar, +/** Check for functional groups that need to be separate residues. */ +int Exec_PrepareForLeap::CheckForFunctionalGroups(Sugar& sugar, Topology& topIn, Frame& frameIn) const { @@ -1805,54 +1805,6 @@ const so3_idx = *sat; break; } -/* - if (topIn[*sat].Element() == Atom::SULFUR && - topIn[*sat].ResNum() == rnum && - topIn[*sat].Nbonds() == 4) { - so3_idx = *sat; - // All 4 bonds must be to oxygen - for (Atom::bond_iterator bat = topIn[*sat].bondbegin(); - bat != topIn[*sat].bondend(); ++bat) - { - if (topIn[*bat].Element() != Atom::OXYGEN && - topIn[*bat].ResNum() == rnum) { - so3_idx = -1; - break; - } - } // END loop over bonds to sulfur - if (so3_idx != -1) { - groupType = G_SO3; - mprintf("\tFound SO3 group centered on atom '%s' from O '%s'\n", - topIn.AtomMaskName(so3_idx).c_str(), - topIn.AtomMaskName(o_idx).c_str()); - break; - } - } else if (topIn[*sat].Element() == Atom::CARBON && - topIn[*sat].ResNum() == rnum && - (topIn[*sat].Nbonds() == 4 || topIn[*sat].Nbonds() == 1)) { - so3_idx = *sat; - // If 4 bonds, 3 must be to hydrogen - if (topIn[*sat].Nbonds() == 4) { - int bonds_to_h = 0; - for (Atom::bond_iterator bat = topIn[*sat].bondbegin(); - bat != topIn[*sat].bondend(); ++bat) - { - if (topIn[*bat].Element() == Atom::HYDROGEN) - bonds_to_h++; - } - if (bonds_to_h < 3) { - so3_idx = -1; - break; - } - } - if (so3_idx != -1) { - groupType = G_CH3; - mprintf("\tFound CH3 group centered on atom '%s' from O '%s'\n", - topIn.AtomMaskName(so3_idx).c_str(), - topIn.AtomMaskName(o_idx).c_str()); - break; - } - } // END atom is sulfur*/ } // END loop over bonds to oxygen if (so3_idx != -1) break; } // END atom is oxygen @@ -2061,7 +2013,7 @@ const for (std::vector::iterator sugar = sugarResidues.begin(); sugar != sugarResidues.end(); ++sugar) { - if (CheckForSugarSulfates(*sugar, topIn, frameIn)) { + if (CheckForFunctionalGroups(*sugar, topIn, frameIn)) { mprinterr("Error: Checking if sugar %s has sulfates failed.\n", topIn.TruncResNameOnumId( sugar->ResNum(topIn) ).c_str()); return 1; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 8d664b162f..7cddc18066 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -82,7 +82,7 @@ class Exec_PrepareForLeap : public Exec { /// \return identity of the group bonded to given atom FunctionalGroupType IdFunctionalGroup(int, int, int, Topology const&) const; /// Determine if sugar has sulfates that need SO3 residue(s) - int CheckForSugarSulfates(Sugar&, Topology&, Frame&) const; + int CheckForFunctionalGroups(Sugar&, Topology&, Frame&) const; /// Determine if sugar is terminal and need an ROH residue int CheckIfSugarIsTerminal(Sugar&, Topology&, Frame&) const; /// Attempt to fix any issues with sugars From 7e9239559e7fa5594da4fd878548ad5629e8ffae Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 11:24:47 -0400 Subject: [PATCH 209/368] Create silent and verbose versions of function --- src/Exec_PrepareForLeap.cpp | 69 +++++++++++++++++++++++++++---------- src/Exec_PrepareForLeap.h | 4 ++- 2 files changed, 53 insertions(+), 20 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 5972a1c154..6f1efc57ee 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1721,32 +1721,30 @@ const /** \return Type of group represented by the atom atIdx. */ Exec_PrepareForLeap::FunctionalGroupType - Exec_PrepareForLeap::IdFunctionalGroup(int rnum, int atIdx, int linkAtIdx, Topology const& topIn) + Exec_PrepareForLeap::IdFunctionalGroup_Silent(int rnum, int atIdx, int linkAtIdx, Topology const& topIn) const { if (topIn[atIdx].Element() == Atom::SULFUR && topIn[atIdx].ResNum() == rnum && topIn[atIdx].Nbonds() == 4) { //so3_idx = atIdx; - // All 4 bonds must be to oxygen + // All 4 bonds must be to oxygen + int bonds_to_o = 0; for (Atom::bond_iterator bat = topIn[atIdx].bondbegin(); bat != topIn[atIdx].bondend(); ++bat) { - if (topIn[*bat].Element() != Atom::OXYGEN && - topIn[*bat].ResNum() == rnum) { - return UNRECOGNIZED_GROUP; - } - } // END loop over bonds to sulfur - mprintf("\tFound SO3 group centered on atom '%s' bonded to '%s'\n", - topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); - return G_SO3; - + if (topIn[*bat].Element() == Atom::OXYGEN && + topIn[*bat].ResNum() == rnum) + bonds_to_o++; + } + if (bonds_to_o == 4) { + return G_SO3; + } } else if (topIn[atIdx].Element() == Atom::CARBON && - topIn[atIdx].ResNum() == rnum && - (topIn[atIdx].Nbonds() == 4 || topIn[atIdx].Nbonds() == 1)) { + topIn[atIdx].ResNum() == rnum) { //so3_idx = atIdx; - // If 4 bonds, 3 must be to hydrogen if (topIn[atIdx].Nbonds() == 4) { + // If 4 bonds, 3 must be to hydrogen for CH3 int bonds_to_h = 0; for (Atom::bond_iterator bat = topIn[atIdx].bondbegin(); bat != topIn[atIdx].bondend(); ++bat) @@ -1754,18 +1752,51 @@ const if (topIn[*bat].Element() == Atom::HYDROGEN) bonds_to_h++; } - if (bonds_to_h < 3) { - return UNRECOGNIZED_GROUP; + if (bonds_to_h == 3) { + return G_CH3; } + } else if (topIn[atIdx].Nbonds() == 1) + return G_CH3; + + } else if (topIn[atIdx].Element() == Atom::OXYGEN && + topIn[atIdx].ResNum() == rnum) { + // If only 1 bond, -OH + if (topIn[atIdx].Nbonds() == 1) + return G_OH; + else if (topIn[atIdx].Nbonds() == 2) { + int bonded_atom; + if (topIn[atIdx].Bond(0) == linkAtIdx) + bonded_atom = topIn[atIdx].Bond(1); + else + bonded_atom = topIn[atIdx].Bond(0); + if (topIn[bonded_atom].Element() == Atom::HYDROGEN) + return G_OH; } - mprintf("\tFound CH3 group centered on atom '%s' bonded to '%s'\n", - topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); - return G_CH3; } + return UNRECOGNIZED_GROUP; } +/** Identify functional group and print to stdout. */ +Exec_PrepareForLeap::FunctionalGroupType + Exec_PrepareForLeap::IdFunctionalGroup(int rnum, int atIdx, int linkAtIdx, Topology const& topIn) +const +{ + FunctionalGroupType groupType = IdFunctionalGroup_Silent(rnum, atIdx, linkAtIdx, topIn); + if (groupType == G_SO3) { + mprintf("\tFound SO3 group centered on atom '%s' bonded to '%s'\n", + topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + } else if (groupType == G_CH3) { + mprintf("\tFound CH3 group centered on atom '%s' bonded to '%s'\n", + topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + } else if (groupType == G_OH) { + mprintf("\tFound OH group centered on atom '%s' bonded to '%s'\n", + topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + } + return groupType; +} + /** Check for functional groups that need to be separate residues. */ int Exec_PrepareForLeap::CheckForFunctionalGroups(Sugar& sugar, Topology& topIn, Frame& frameIn) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 7cddc18066..2725a8110b 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -22,7 +22,7 @@ class Exec_PrepareForLeap : public Exec { class Link; typedef std::vector Iarray; - enum FunctionalGroupType { G_SO3 = 0, G_CH3, UNRECOGNIZED_GROUP }; + enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_OH, UNRECOGNIZED_GROUP }; enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, SUGAR_MISSING_RING_O }; typedef std::vector ResStatArray; @@ -80,6 +80,8 @@ class Exec_PrepareForLeap : public Exec { /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; /// \return identity of the group bonded to given atom + FunctionalGroupType IdFunctionalGroup_Silent(int, int, int, Topology const&) const; + /// \return identity of the group bonded to given atom, print to stdout FunctionalGroupType IdFunctionalGroup(int, int, int, Topology const&) const; /// Determine if sugar has sulfates that need SO3 residue(s) int CheckForFunctionalGroups(Sugar&, Topology&, Frame&) const; From b8dda19452c4dd52b51d9d9af3d517c503965a92 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 11:36:55 -0400 Subject: [PATCH 210/368] Use new functional group id function --- src/Exec_PrepareForLeap.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6f1efc57ee..6da95c6679 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1927,8 +1927,19 @@ const } } if (o1_atom == -1) return 0; - Iarray selected(1, o1_atom); - // Ensure the oxygen is itself terminal (no other bonds or only H) + + Iarray selected; + FunctionalGroupType groupType = IdFunctionalGroup(rnum, o1_atom, anomericAtom, topIn); + + if (groupType == G_OH) { + selected = Iarray(1, o1_atom); + mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); + // Change atom names + ChangeAtomName(topIn.SetAtom(selected[0]), "O1"); + if (selected.size() > 1) + ChangeAtomName(topIn.SetAtom(selected[1]), "HO1"); + } +/* // Ensure the oxygen is itself terminal (no other bonds or only H) if (topIn[o1_atom].Nbonds() > 1) { for (Atom::bond_iterator bat = topIn[o1_atom].bondbegin(); bat != topIn[o1_atom].bondend(); ++bat) @@ -1941,19 +1952,13 @@ const } } } +*/ // Sanity check - if (selected.size() > 2) { - mprintf("Error: Sugar '%s' has unrecognized terminal group.\n", - sugarName.c_str()); + if (selected.empty()) { + mprintf("Error: Sugar '%s' has unrecognized terminal group.\n", sugarName.c_str()); return 1; } - mprintf("\tIn-residue oxygen bonded to anomeric carbon: '%s %s'\n", - sugarName.c_str(), *(topIn[o1_atom].Name())); - mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); - // Change atom names - ChangeAtomName(topIn.SetAtom(selected[0]), "O1"); - if (selected.size() > 1) - ChangeAtomName(topIn.SetAtom(selected[1]), "HO1"); + // Create atom mask AtomMask ROH(selected, topIn.Natom()); From f534170f6ade00ba6705c4c5c42a1894932edbf2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 11:49:10 -0400 Subject: [PATCH 211/368] Add atom selection to the functional group ID routine --- src/Exec_PrepareForLeap.cpp | 37 ++++++++++++++++++++++++------------- src/Exec_PrepareForLeap.h | 4 ++-- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6da95c6679..ffe4d5e52d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1721,21 +1721,26 @@ const /** \return Type of group represented by the atom atIdx. */ Exec_PrepareForLeap::FunctionalGroupType - Exec_PrepareForLeap::IdFunctionalGroup_Silent(int rnum, int atIdx, int linkAtIdx, Topology const& topIn) + Exec_PrepareForLeap::IdFunctionalGroup_Silent(Iarray& selected, int rnum, int atIdx, int linkAtIdx, Topology const& topIn) const { + selected.clear(); if (topIn[atIdx].Element() == Atom::SULFUR && topIn[atIdx].ResNum() == rnum && topIn[atIdx].Nbonds() == 4) { //so3_idx = atIdx; + selected.push_back(atIdx); // All 4 bonds must be to oxygen int bonds_to_o = 0; for (Atom::bond_iterator bat = topIn[atIdx].bondbegin(); bat != topIn[atIdx].bondend(); ++bat) { if (topIn[*bat].Element() == Atom::OXYGEN && - topIn[*bat].ResNum() == rnum) + topIn[*bat].ResNum() == rnum) { bonds_to_o++; + if (*bat != linkAtIdx) + selected.push_back( *bat ); + } } if (bonds_to_o == 4) { return G_SO3; @@ -1743,14 +1748,17 @@ const } else if (topIn[atIdx].Element() == Atom::CARBON && topIn[atIdx].ResNum() == rnum) { //so3_idx = atIdx; + selected.push_back(atIdx); if (topIn[atIdx].Nbonds() == 4) { // If 4 bonds, 3 must be to hydrogen for CH3 int bonds_to_h = 0; for (Atom::bond_iterator bat = topIn[atIdx].bondbegin(); bat != topIn[atIdx].bondend(); ++bat) { - if (topIn[*bat].Element() == Atom::HYDROGEN) + if (topIn[*bat].Element() == Atom::HYDROGEN) { bonds_to_h++; + selected.push_back(*bat); + } } if (bonds_to_h == 3) { return G_CH3; @@ -1760,6 +1768,7 @@ const } else if (topIn[atIdx].Element() == Atom::OXYGEN && topIn[atIdx].ResNum() == rnum) { + selected.push_back( atIdx ); // If only 1 bond, -OH if (topIn[atIdx].Nbonds() == 1) return G_OH; @@ -1769,21 +1778,23 @@ const bonded_atom = topIn[atIdx].Bond(1); else bonded_atom = topIn[atIdx].Bond(0); - if (topIn[bonded_atom].Element() == Atom::HYDROGEN) + if (topIn[bonded_atom].Element() == Atom::HYDROGEN) { + selected.push_back(bonded_atom); return G_OH; + } } } - + selected.clear(); return UNRECOGNIZED_GROUP; } /** Identify functional group and print to stdout. */ Exec_PrepareForLeap::FunctionalGroupType - Exec_PrepareForLeap::IdFunctionalGroup(int rnum, int atIdx, int linkAtIdx, Topology const& topIn) + Exec_PrepareForLeap::IdFunctionalGroup(Iarray& selected, int rnum, int atIdx, int linkAtIdx, Topology const& topIn) const { - FunctionalGroupType groupType = IdFunctionalGroup_Silent(rnum, atIdx, linkAtIdx, topIn); + FunctionalGroupType groupType = IdFunctionalGroup_Silent(selected, rnum, atIdx, linkAtIdx, topIn); if (groupType == G_SO3) { mprintf("\tFound SO3 group centered on atom '%s' bonded to '%s'\n", topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); @@ -1814,6 +1825,7 @@ const // in this residue. int o_idx = -1; int so3_idx = -1; + Iarray selected; FunctionalGroupType groupType = UNRECOGNIZED_GROUP; Iarray::const_iterator cat = sugar.ChainAtoms().begin(); for (; cat != sugar.ChainAtoms().end(); ++cat) @@ -1831,7 +1843,7 @@ const for (Atom::bond_iterator sat = topIn[*oat].bondbegin(); sat != topIn[*oat].bondend(); ++sat) { - groupType = IdFunctionalGroup(rnum, *sat, o_idx, topIn); + groupType = IdFunctionalGroup(selected, rnum, *sat, o_idx, topIn); if (groupType != UNRECOGNIZED_GROUP) { so3_idx = *sat; break; @@ -1846,11 +1858,11 @@ const atomsRemain = false; else { // sanity check - if (so3_idx == -1 || o_idx == -1) { + if (so3_idx == -1 || o_idx == -1 || selected.empty()) { mprinterr("Internal Error: Sulfate index is negative.\n"); return 1; } - // Select S and other 3 O atoms + /*// Select S and other 3 O atoms Iarray selected(1, so3_idx); for (Atom::bond_iterator bat = topIn[so3_idx].bondbegin(); bat != topIn[so3_idx].bondend(); ++bat) @@ -1858,7 +1870,7 @@ const if (*bat != o_idx) { selected.push_back( *bat ); } - } + }*/ // Change the atom names std::string newResName; if (groupType == G_SO3) { @@ -1929,10 +1941,9 @@ const if (o1_atom == -1) return 0; Iarray selected; - FunctionalGroupType groupType = IdFunctionalGroup(rnum, o1_atom, anomericAtom, topIn); + FunctionalGroupType groupType = IdFunctionalGroup(selected, rnum, o1_atom, anomericAtom, topIn); if (groupType == G_OH) { - selected = Iarray(1, o1_atom); mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); // Change atom names ChangeAtomName(topIn.SetAtom(selected[0]), "O1"); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 2725a8110b..76d77dcd68 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -80,9 +80,9 @@ class Exec_PrepareForLeap : public Exec { /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; /// \return identity of the group bonded to given atom - FunctionalGroupType IdFunctionalGroup_Silent(int, int, int, Topology const&) const; + FunctionalGroupType IdFunctionalGroup_Silent(Iarray&, int, int, int, Topology const&) const; /// \return identity of the group bonded to given atom, print to stdout - FunctionalGroupType IdFunctionalGroup(int, int, int, Topology const&) const; + FunctionalGroupType IdFunctionalGroup(Iarray&, int, int, int, Topology const&) const; /// Determine if sugar has sulfates that need SO3 residue(s) int CheckForFunctionalGroups(Sugar&, Topology&, Frame&) const; /// Determine if sugar is terminal and need an ROH residue From 218112f0297918e5badc8cbf4eefd2f2ea9f70c6 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 11:50:44 -0400 Subject: [PATCH 212/368] Add some sulfated and methylated residues --- dat/Carbohydrate_PDB_Glycam_Names.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 99df8e9dd2..54b6a9de10 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -11,14 +11,14 @@ "Tyvelose" T TYV "Arabinose" A ARA,AHR,ARB "Galactose" L GAL,GLA,GXL -"N-Acetyl Galactosamine" V NGA,A2G +"N-Acetyl Galactosamine" V NGA,A2G,NG6 "Galacturonic Acid" O ADA "Gulose" K GUL,GUP,GL0 "Altrose" E ALT "Allose" N ALL,WOO "Talose" T TAL "Iduronic Acid" U IDS -"Fucose" F FUC,FUL +"Fucose" F FUC,FUL,MXY "Lyxose" D LYX "Abequose" A ABE "Xylose" X XYL,XYS,LXC,XYP From b9cf905fea59f171e8af1f46845dd5adc6b8d28a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 14:58:24 -0400 Subject: [PATCH 213/368] Recognize some more sugars --- dat/Carbohydrate_PDB_Glycam_Names.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 54b6a9de10..5c52e428b3 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -4,7 +4,7 @@ "Glucose" G GLC,MAL,BGC "N-Acetyl Glucosamine" Y NAG,NDG "Glucosamine" Y GCS -"Glucuronic Acid" Z GCU,BDP +"Glucuronic Acid" Z GCU,BDP,GCV "Quinovose" Q QUI "Mannose" M MAN,BMA "Rhamnose" H RAM @@ -18,7 +18,7 @@ "Allose" N ALL,WOO "Talose" T TAL "Iduronic Acid" U IDS -"Fucose" F FUC,FUL,MXY +"Fucose" F FUC,FUL,MXY,MXZ "Lyxose" D LYX "Abequose" A ABE "Xylose" X XYL,XYS,LXC,XYP From 274c14898af49e8d73bd498f53be3d543154d3ad Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 26 Oct 2021 16:29:22 -0400 Subject: [PATCH 214/368] Add ASG --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 5c52e428b3..b0775c66bc 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -11,7 +11,7 @@ "Tyvelose" T TYV "Arabinose" A ARA,AHR,ARB "Galactose" L GAL,GLA,GXL -"N-Acetyl Galactosamine" V NGA,A2G,NG6 +"N-Acetyl Galactosamine" V NGA,A2G,NG6,ASG "Galacturonic Acid" O ADA "Gulose" K GUL,GUP,GL0 "Altrose" E ALT From 233d43f0a698bbb1faca1cdc740f0664f127c923 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 27 Oct 2021 10:57:03 -0400 Subject: [PATCH 215/368] Change place when atom names are changed, may depend on alpha/beta --- src/Exec_PrepareForLeap.cpp | 13 +++++++------ src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ffe4d5e52d..97406e32ea 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1488,12 +1488,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("\tSugar %s glycam name: %c\n", sugarName.c_str(), resChar); - // Change PDB names to Glycam ones - if (ChangePdbAtomNamesToGlycam(resChar, res, topIn)) { - mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); - return 1; - } - // Determine alpha or beta and D or L bool isDform; AnomerRetType form = DetermineAnomericForm(isDform, sugar, topIn, frameIn); @@ -1509,6 +1503,13 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, } else return 1; + // Change PDB names to Glycam ones + if (ChangePdbAtomNamesToGlycam(resChar, res, topIn)) { + mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); + return 1; + } + + // Find the rest of the carbons in the chain in order to find the // stereocenter with the highest index. Start from final ring carbon. //int highest_stereocenter = sugar.HighestStereocenter(); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 76d77dcd68..4afcd89f8d 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -126,7 +126,7 @@ class Exec_PrepareForLeap : public Exec { typedef std::pair ResIdxPairType; typedef std::map ResIdxMapType; - /// Map glycam residue chars to pdb-glycam atom name maps + /// Map glycam residue chars to pdb-glycam atom name map index (pdb_glycam_name_maps_) ResIdxMapType glycam_res_idx_map_; /// Map pdb residue names to glycam linkage residue names From 9ecbdbccb4b36775e779235b8427483cae7ebe57 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 27 Oct 2021 15:06:40 -0400 Subject: [PATCH 216/368] In glycam, sugars like Rhamnose (H) have different atom naming for the alpha and beta forms (e.g. C6 vs C6M). Allow atom name maps to be form-specific --- dat/Carbohydrate_PDB_Glycam_Names.txt | 1 + src/Exec_PrepareForLeap.cpp | 66 +++++++++++++++++++++------ src/Exec_PrepareForLeap.h | 16 +++++-- 3 files changed, 64 insertions(+), 19 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index b0775c66bc..532072234c 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -33,6 +33,7 @@ # PDB to glycam atom name maps V,W,Y C7,C2N O7,O2N C8,CME S C10,C5N O10,O5N C11,CME +H C6,C6M,B # PDB to glycam linkage residue name maps SER OLS diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 97406e32ea..f9c2628729 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -341,14 +341,30 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) } int glycam_map_idx = (int)pdb_glycam_name_maps_.size(); pdb_glycam_name_maps_.push_back(NameMapType()); - NameMapType& currentMap = pdb_glycam_name_maps_.back(); + pdb_glycam_name_maps_A_.push_back(NameMapType()); + pdb_glycam_name_maps_B_.push_back(NameMapType()); + NameMapType& currentMap = pdb_glycam_name_maps_.back(); + NameMapType& currentMapA = pdb_glycam_name_maps_A_.back(); + NameMapType& currentMapB = pdb_glycam_name_maps_B_.back(); for (int col = 1; col < argline.Nargs(); col++) { ArgList namepair( argline[col], "," ); - if (namepair.Nargs() != 2) { + NameMapType* currentMapPtr = ¤tMap; + if (namepair.Nargs() == 3) { + // This name mapping is for a particular anomeric form + if (namepair[2] == "A") + currentMapPtr = ¤tMapA; + else if (namepair[2] == "B") + currentMapPtr = ¤tMapB; + else { + mprinterr("Error: For name pair, third arg should only be A or B: %s\n", ptr); + return 1; + } + } else if (namepair.Nargs() != 2) { mprinterr("Error: Expected only 2 names for name pair, got %i\n", namepair.Nargs()); mprinterr("Error: %s\n", ptr); + return 1; } - currentMap.insert( NamePairType(NameType(namepair[0]), NameType(namepair[1])) ); + currentMapPtr->insert( NamePairType(NameType(namepair[0]), NameType(namepair[1])) ); } // END loop over name pair columns // Map will be for each glycam res for (ArgList::const_iterator gres = glycamnames.begin(); gres != glycamnames.end(); ++gres) @@ -1165,7 +1181,8 @@ const } /** Change PDB atom names in residue to glycam ones. */ -int Exec_PrepareForLeap::ChangePdbAtomNamesToGlycam(char resChar, Residue const& res, Topology& topIn) +int Exec_PrepareForLeap::ChangePdbAtomNamesToGlycam(char resChar, Residue const& res, + Topology& topIn, AnomerRetType form) const { // Get the appropriate map @@ -1176,12 +1193,22 @@ const return 0; } NameMapType const& currentMap = pdb_glycam_name_maps_[resIdxPair->second]; + NameMapType const* currentMapAB; + if (form == IS_ALPHA) + currentMapAB = &(pdb_glycam_name_maps_A_[resIdxPair->second]); + else + currentMapAB = &(pdb_glycam_name_maps_B_[resIdxPair->second]); // Change PDB names to Glycam ones for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { - NameMapType::const_iterator namePair = currentMap.find( topIn[at].Name() ); - if (namePair != currentMap.end()) + NameMapType::const_iterator namePair = currentMapAB->find( topIn[at].Name() ); + if (namePair != currentMapAB->end()) ChangeAtomName( topIn.SetAtom(at), namePair->second ); + else { + namePair = currentMap.find( topIn[at].Name() ); + if (namePair != currentMap.end()) + ChangeAtomName( topIn.SetAtom(at), namePair->second ); + } } return 0; } @@ -1504,7 +1531,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, return 1; // Change PDB names to Glycam ones - if (ChangePdbAtomNamesToGlycam(resChar, res, topIn)) { + if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, form)) { mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); return 1; } @@ -2696,6 +2723,20 @@ const return 0; } +void Exec_PrepareForLeap::PrintAtomNameMap(const char* title, + std::vector const& namemap) +{ + mprintf("\t%s:\n", title); + for (std::vector::const_iterator it = namemap.begin(); + it != namemap.end(); ++it) + { + mprintf("\t %li)", it - namemap.begin()); + for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) + mprintf(" %s:%s", *(mit->first), *(mit->second)); + mprintf("\n"); + } +} + // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const { @@ -2816,14 +2857,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tRes char to atom map index map:\n"); for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) mprintf("\t %c -> %i\n", mit->first, mit->second); - mprintf("\tAtom name maps:\n"); - for (std::vector::const_iterator it = pdb_glycam_name_maps_.begin(); it != pdb_glycam_name_maps_.end(); ++it) - { - mprintf("\t %li)", it - pdb_glycam_name_maps_.begin()); - for (NameMapType::const_iterator mit = it->begin(); mit != it->end(); ++mit) - mprintf(" %s:%s", *(mit->first), *(mit->second)); - mprintf("\n"); - } + PrintAtomNameMap("Atom name maps", pdb_glycam_name_maps_); + PrintAtomNameMap("Atom name maps (alpha)", pdb_glycam_name_maps_A_); + PrintAtomNameMap("Atom name maps (beta)", pdb_glycam_name_maps_B_); // DEBUG - print linkage res map mprintf("\tLinkage res name map:\n"); for (NameMapType::const_iterator mit = pdb_glycam_linkageRes_map_.begin(); mit != pdb_glycam_linkageRes_map_.end(); ++mit) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 4afcd89f8d..1b7f144801 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -22,6 +22,9 @@ class Exec_PrepareForLeap : public Exec { class Link; typedef std::vector Iarray; + /// Return type for DetermineAnomericForm + enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; + enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_OH, UNRECOGNIZED_GROUP }; enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, SUGAR_MISSING_RING_O }; @@ -64,10 +67,8 @@ class Exec_PrepareForLeap : public Exec { enum IdSugarRingStatType { ID_OK = 0, ID_ERR, ID_MISSING_O }; /// \return Sugar with atom indices set up Sugar IdSugarRing(int, Topology const&, IdSugarRingStatType&) const; - int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&) const; + int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&, AnomerRetType) const; - /// Return type for DetermineAnomericForm - enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; /// \return Anomeric form of the sugar AnomerRetType DetermineAnomericForm(bool&, Sugar const&, Topology const&, Frame const&) const; /// \return Glycam linkage code for given link atoms @@ -121,8 +122,15 @@ class Exec_PrepareForLeap : public Exec { typedef std::pair NamePairType; typedef std::map NameMapType; - /// Hold maps of pdb atom names to glycam atom names + + static void PrintAtomNameMap(const char*, std::vector const&); + + /// Hold maps of pdb atom names to glycam atom names; multiple residues may share a map std::vector pdb_glycam_name_maps_; + /// Hold maps of pdb atom names to glycam atom names (res in alpha form) + std::vector pdb_glycam_name_maps_A_; + /// Hold maps of pdb atom names to glycam atom names (res in beta form) + std::vector pdb_glycam_name_maps_B_; typedef std::pair ResIdxPairType; typedef std::map ResIdxMapType; From 6a1b85bf50a28a4fc2dd8ef2ed44f0bb11e0eef9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 27 Oct 2021 15:08:58 -0400 Subject: [PATCH 217/368] Add name for iduronic acid --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 532072234c..0dc278237c 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -17,7 +17,7 @@ "Altrose" E ALT "Allose" N ALL,WOO "Talose" T TAL -"Iduronic Acid" U IDS +"Iduronic Acid" U IDS,IDR "Fucose" F FUC,FUL,MXY,MXZ "Lyxose" D LYX "Abequose" A ABE From 24140d3bccac2a4caca0d06d29de6a2d0c40ca9f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 27 Oct 2021 15:22:47 -0400 Subject: [PATCH 218/368] Try to handle cases where ring oxygen has strange coordination --- src/Exec_PrepareForLeap.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f9c2628729..96660fe951 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -975,14 +975,17 @@ const // Try to identify the sugar ring oxygen. Candidate atoms are oxygens // bonded to two carbon atoms in the same residue. if (currentAtom.Element() == Atom::OXYGEN) { - if (currentAtom.Nbonds() == 2) { - if ( topIn[currentAtom.Bond(0)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(0)].ResNum() == rnum && - topIn[currentAtom.Bond(1)].Element() == Atom::CARBON && - topIn[currentAtom.Bond(1)].ResNum() == rnum ) + if (currentAtom.Nbonds() > 1) { + int bonds_to_c = 0; + for (Atom::bond_iterator bat = currentAtom.bondbegin(); + bat != currentAtom.bondend(); ++bat) { - potentialRingStartAtoms.push_back( at ); + if (topIn[*bat].Element() == Atom::CARBON && + topIn[*bat].ResNum() == rnum) + bonds_to_c++; } + if ( bonds_to_c == 2 ) + potentialRingStartAtoms.push_back( at ); } } } From 991fbd6f451ed623ab81e83f5decce6bd9eaf838 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 28 Oct 2021 11:29:14 -0400 Subject: [PATCH 219/368] Add tetra-sulfated version of glucose --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 0dc278237c..4cf7e4d5c7 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -1,7 +1,7 @@ # This file contains the mapping from common PDB names to Glycam residue codes. # Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB # Last updated 09/01/21 10:01:41 -"Glucose" G GLC,MAL,BGC +"Glucose" G GLC,MAL,BGC,GU4 "N-Acetyl Glucosamine" Y NAG,NDG "Glucosamine" Y GCS "Glucuronic Acid" Z GCU,BDP,GCV From c9645b13b18cf6b555dd99747fe3bc28f771cee1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 28 Oct 2021 11:51:48 -0400 Subject: [PATCH 220/368] Remove some unused code --- src/Exec_PrepareForLeap.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 96660fe951..456a3d95cb 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -990,22 +990,12 @@ const } } - // TODO handle case where multiple potential ring start atoms exist if (potentialRingStartAtoms.empty()) { mprintf("Warning: Ring oxygen could not be identified for %s\n", topIn.TruncResNameOnumId(rnum).c_str()); - //resStat_[rnum] = SUGAR_MISSING_RING_O; stat = ID_MISSING_O; return Sugar(res.FirstAtom()); - } /*else if (potentialRingStartAtoms.size() > 1) { - mprinterr("Error: Multiple potential ring start atoms:\n"); - for (Iarray::const_iterator it = potentialRingStartAtoms.begin(); - it != potentialRingStartAtoms.end(); - ++it) - mprinterr("Error: %s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - stat = ID_ERR; - return Sugar(res.FirstAtom()); - }*/ + } // Use the previously-set up AtomMap to help determine stereocenters std::vector atomIsChiral; From 090eec8a869f9bcc55ea28037e36aac2576130a0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 28 Oct 2021 15:06:12 -0400 Subject: [PATCH 221/368] Recognize tetrasulfated fructofuranose --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 4cf7e4d5c7..5d2ea34d3c 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -24,7 +24,7 @@ "Xylose" X XYL,XYS,LXC,XYP "Ribose" R RIB "Bacillosamine" B BAC -"Fructose" C FRU +"Fructose" C FRU,YYJ "Tagatose" J TAG "Sorbose" B SOR "Psicose" P PSI From c2bc73ba4b3ff77b9c64161bb6d8af8770d0200d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 28 Oct 2021 15:10:35 -0400 Subject: [PATCH 222/368] Do not assume anomeric atom is at position 0 in the chain --- src/Exec_PrepareForLeap.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 456a3d95cb..dc88eff285 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1256,7 +1256,9 @@ const t_cc = t_ar; bool t_cc_up = (t_cc > 0); - // By definition, anomeric atom is index 0 in the chain. + // Determine index of anomeric atom (typically index 0 but not always). + int aa_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.AnomericAtom()); + int aa_pos = (aa_idx % 2); // Determine index of the anomeric reference atom in the chain. int ar_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.AnomericRefAtom()); int cc_idx = AtomIdxInArray(sugar.ChainAtoms(), sugar.HighestStereocenter()); @@ -1264,9 +1266,9 @@ const // Determine form and chirality. // May need to adjust definitions based on the positions of the anomeric // reference and config. atoms in the sequence, which alternates. - if ((ar_idx % 2) != 0) + if ((ar_idx % 2) != aa_pos) t_ar_up = !t_ar_up; - if ((cc_idx % 2) != 0) + if ((cc_idx % 2) != aa_pos) t_cc_up = !t_cc_up; if ( debug_ > 0) { From baf08a4d6e24ee9a74bc1da9a94c45d8bb652fe2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 28 Oct 2021 16:50:30 -0400 Subject: [PATCH 223/368] When determining carbon chain, get previous carbons as well. Instead of C1, use T to indicate connectivity via a "terminal" carbon. --- src/Exec_PrepareForLeap.cpp | 62 ++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index dc88eff285..7d76b71059 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1151,6 +1151,28 @@ const for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); } + // See if there is chain prior to anomeric carbon + Iarray previous_chain; + if (FindRemainingChainCarbons(previous_chain, anomeric_atom, topIn, rnum, RA)) { + mprinterr("Error: Could not find previous chain carbons.\n"); + stat = ID_ERR; + return Sugar(res.FirstAtom()); + } + if (!previous_chain.empty()) { + //if (debug_ > 0) { + mprintf("DEBUG: Previous carbon chain (from anomeric carbon):\n"); + for (Iarray::const_iterator it = previous_chain.begin(); it != previous_chain.end(); ++it) + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + //} + for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) + previous_chain.push_back( *it ); + carbon_chain = previous_chain; + //if (debug_ > 0) { + mprintf("DEBUG: Complete carbon chain:\n"); + for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + //} + } // Get the index of the highest stereocenter for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) { @@ -1340,28 +1362,32 @@ const topIn.AtomMaskName(it->Idx()).c_str()); return linkcode; } - linkstr.append( std::string(topIn[it->Idx()].ElementName()) + - integerToString(it->Position()) ); + // Carbon is terminal + if (topIn[it->Idx()].Element() == Atom::CARBON) + linkstr.append("T"); + else + linkstr.append( std::string(topIn[it->Idx()].ElementName()) + + integerToString(it->Position()) ); } mprintf("DEBUG:\t linkstr= '%s'\n", linkstr.c_str()); - if (linkstr == "C1") linkcode = "0"; + if (linkstr == "T") linkcode = "0"; else if (linkstr == "O1") linkcode = "1"; - else if (linkstr == "C1O2") linkcode = "2"; - else if (linkstr == "C1O3") linkcode = "3"; - else if (linkstr == "C1O4") linkcode = "4"; - else if (linkstr == "C1O6") linkcode = "6"; - else if (linkstr == "C1O2O3") linkcode = "Z"; - else if (linkstr == "C1O2O4") linkcode = "Y"; - else if (linkstr == "C1O2O6") linkcode = "X"; - else if (linkstr == "C1O3O4") linkcode = "W"; - else if (linkstr == "C1O3O6") linkcode = "V"; - else if (linkstr == "C1O4O6") linkcode = "U"; - else if (linkstr == "C1O2O3O4") linkcode = "T"; - else if (linkstr == "C1O2O3O6") linkcode = "S"; - else if (linkstr == "C1O2O4O6") linkcode = "R"; - else if (linkstr == "C1O3O4O6") linkcode = "Q"; - else if (linkstr == "C1O2O3O4O6") linkcode = "P"; + else if (linkstr == "TO2") linkcode = "2"; + else if (linkstr == "TO3") linkcode = "3"; + else if (linkstr == "TO4") linkcode = "4"; + else if (linkstr == "TO6") linkcode = "6"; + else if (linkstr == "TO2O3") linkcode = "Z"; + else if (linkstr == "TO2O4") linkcode = "Y"; + else if (linkstr == "TO2O6") linkcode = "X"; + else if (linkstr == "TO3O4") linkcode = "W"; + else if (linkstr == "TO3O6") linkcode = "V"; + else if (linkstr == "TO4O6") linkcode = "U"; + else if (linkstr == "TO2O3O4") linkcode = "T"; + else if (linkstr == "TO2O3O6") linkcode = "S"; + else if (linkstr == "TO2O4O6") linkcode = "R"; + else if (linkstr == "TO3O4O6") linkcode = "Q"; + else if (linkstr == "TO2O3O4O6") linkcode = "P"; if (linkcode.empty()) mprintf("Warning: Could not determine link code for link atoms '%s'.\n", linkstr.c_str()); return linkcode; From 8e77de287c5012ae6c3152afd1396fe97a7ff839 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 09:46:54 -0400 Subject: [PATCH 224/368] If potential anomeric substituents are both in residue or out of residue, go by atomic number --- src/Exec_PrepareForLeap.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7d76b71059..8ba2dc7a32 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -629,10 +629,15 @@ const bool bat_in_res = (topIn[*bat].ResNum() == rnum); bool X_in_res = (topIn[anomeric_atom_X].ResNum() == rnum); if ( (bat_in_res && X_in_res) || (!bat_in_res && !X_in_res) ) { - mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", - topIn.ResNameNumAtomNameNum(*bat).c_str(), - topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); - return 1; + // Both in or both out of residue. Choose based on atomic number. + if (topIn[*bat].AtomicNumber() == topIn[anomeric_atom_X].AtomicNumber()) { + mprinterr("Error: Two potential substituents for anomeric carbon: %s and %s\n", + topIn.ResNameNumAtomNameNum(*bat).c_str(), + topIn.ResNameNumAtomNameNum(anomeric_atom_X).c_str()); + return 1; + } else if (topIn[*bat].AtomicNumber() > topIn[anomeric_atom_X].AtomicNumber()) { + anomeric_atom_X = *bat; + } } else if (bat_in_res) { anomeric_atom_X = *bat; } @@ -1988,6 +1993,7 @@ const } } if (o1_atom == -1) return 0; + mprintf("DEBUG: Terminal check: O1 atom: '%s'\n", topIn.AtomMaskName(o1_atom).c_str()); Iarray selected; FunctionalGroupType groupType = IdFunctionalGroup(selected, rnum, o1_atom, anomericAtom, topIn); @@ -2013,10 +2019,11 @@ const } } */ - // Sanity check + // If terminal group is unrecognized, this could just be a regular O1 linkage if (selected.empty()) { - mprintf("Error: Sugar '%s' has unrecognized terminal group.\n", sugarName.c_str()); - return 1; + if (debug_ > 0) + mprintf("DEBUG: Sugar '%s' has unrecognized terminal group.\n", sugarName.c_str()); + return 0; } // Create atom mask From ade08fe7120b2b4583d7b11f3bb5c9368424975f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 10:42:07 -0400 Subject: [PATCH 225/368] Split Chirality routines into a separate file. --- src/Chirality.cpp | 153 ++++++++++++++++++++++++++++++++++++++++++++++ src/Chirality.h | 15 +++++ 2 files changed, 168 insertions(+) create mode 100644 src/Chirality.cpp create mode 100644 src/Chirality.h diff --git a/src/Chirality.cpp b/src/Chirality.cpp new file mode 100644 index 0000000000..7c9e08ac0e --- /dev/null +++ b/src/Chirality.cpp @@ -0,0 +1,153 @@ +#include "Chirality.h" +#include "Constants.h" +#include "CpptrajStdio.h" +#include "Frame.h" +#include "Topology.h" +#include "TorsionRoutines.h" +#include +#include // sort + +using namespace Cpptraj; + +/// \return Total priority (i.e. sum of atomic numbers) of atoms bonded to given atom. +static int totalPriority(Topology const& topIn, int atnum, int rnum, + int depth, int tgtdepth, std::vector& Visited) +{ + if (Visited[atnum] || depth == tgtdepth) return 0; + Visited[atnum] = true; + if (topIn[atnum].ResNum() != rnum) { + if (depth == 0) + // Atom in another residue bonded to chiral atom (e.g. O to C1) + return topIn[atnum].AtomicNumber(); + else + // Atom in another residue bonded to atom bonded to chiral atom + return 0; + } + int sum = 0; + Atom const& atom = topIn[atnum]; + for (Atom::bond_iterator bat = atom.bondbegin(); bat != atom.bondend(); ++bat) + sum += topIn[*bat].AtomicNumber() + totalPriority(topIn, *bat, rnum, depth+1, tgtdepth, Visited); + return sum; +} + +/// Used to determine priority of moieties bonded to an atom +class priority_element { + public: + /// CONSTRUCT from atom number and initial priority + priority_element(int a, int p1) : atnum_(a), priority1_(p1), priority2_(-1) {} + /// Set priority 2 + void SetPriority2(int p2) { priority2_ = p2; } + /// \return Atom number + int AtNum() const { return atnum_; } + /// \return Priority 1 + int Priority1() const { return priority1_; } + /// \return Priority 2 + int Priority2() const { return priority2_; } + /// Sort on priority 1, then priority 2 + bool operator<(const priority_element& rhs) const { + if (*this != rhs) { + if (priority1_ == rhs.priority1_) { + return (priority2_ > rhs.priority2_); + } else { + return (priority1_ > rhs.priority1_); + } + } else + return false; + } + /// \return true if priorities are identical + bool operator==(const priority_element& rhs) const { + return (priority1_ == rhs.priority1_) && (priority2_ == rhs.priority2_); + } + /// \return true if priorities are not equal + bool operator!=(const priority_element& rhs) const { + if (priority2_ != rhs.priority2_ || + priority1_ != rhs.priority1_) return true; + return false; + } + private: + int atnum_; + int priority1_; + int priority2_; +}; + + +/** Given an atom that is a chiral center, attempt to calculate a + * torsion that will help determine R vs S. Priorities will be + * assigned to bonded atoms as 1, 2, 3, and optionally 4. The + * torsion will then be calculated as + * 1-2-3-0 + * where 0 is the chiral center. Negative is S, positive is R. + */ +Chirality::ChiralType Chirality::DetermineChirality(double& tors, int atnum, + Topology const& topIn, + Frame const& frameIn) +{ + tors = 0.0; + Atom const& atom = topIn[atnum]; + if (atom.Nbonds() < 3) { + mprinterr("Error: CalcChiralAtomTorsion called for atom %s with less than 3 bonds.\n", + topIn.AtomMaskName(atnum).c_str()); + return ERR; + } + // Calculate a priority score for each bonded atom. + // First just use the atomic number. + mprintf("DEBUG: Determining priorities around atom %s\n", topIn.AtomMaskName(atnum).c_str()); + std::vector priority; + for (int idx = 0; idx != atom.Nbonds(); idx++) { + priority.push_back( priority_element(atom.Bond(idx), topIn[atom.Bond(idx)].AtomicNumber()) ); + mprintf("DEBUG:\t\t%i Priority for %s is %i\n", idx, topIn.AtomMaskName(atom.Bond(idx)).c_str(), priority.back().Priority1()); + } + // For any identical priorities, need to check who they are bonded to. + for (int idx1 = 0; idx1 != atom.Nbonds(); idx1++) { + for (int idx2 = idx1+1; idx2 != atom.Nbonds(); idx2++) { + if (priority[idx1] == priority[idx2]) { + bool identical_priorities = true; + int depth = 1; + while (identical_priorities) { + mprintf("DEBUG: Priority of index %i == %i, depth %i\n", idx1, idx2, depth); + std::vector Visited(topIn.Natom(), false); + Visited[atnum] = true; + priority[idx1].SetPriority2(totalPriority(topIn, atom.Bond(idx1), atom.ResNum(), 0, depth, Visited)); + mprintf("DEBUG:\tPriority2 of %i is %i\n", idx1, priority[idx1].Priority2()); + + Visited.assign(topIn.Natom(), false); + Visited[atnum] = true; + priority[idx2].SetPriority2(totalPriority(topIn, atom.Bond(idx2), atom.ResNum(), 0, depth, Visited)); + mprintf("DEBUG:\tPriority2 of %i is %i\n", idx2, priority[idx2].Priority2()); + if (priority[idx1] != priority[idx2]) { + identical_priorities = false; + break; + } + if (depth == 10) { + mprinterr("Error: Could not determine priority around '%s'\n", + topIn.AtomMaskName(atnum).c_str()); + return ERR; + } + depth++; + } // END while identical priorities + } + } + } + std::sort(priority.begin(), priority.end()); + mprintf("DEBUG: Sorted by priority:"); + for (std::vector::const_iterator it = priority.begin(); + it != priority.end(); ++it) + mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); + mprintf("\n"); + + tors = Torsion( frameIn.XYZ(priority[0].AtNum()), + frameIn.XYZ(priority[1].AtNum()), + frameIn.XYZ(priority[2].AtNum()), + frameIn.XYZ(atnum) ); + mprintf("DEBUG: Torsion around '%s' is %f", topIn.AtomMaskName(atnum).c_str(), tors*Constants::RADDEG); + ChiralType ret; + if (tors < 0) { + ret = IS_S; + mprintf(" (S)\n"); + } else { + ret = IS_R; + mprintf(" (R)\n"); + } + return ret; +} + diff --git a/src/Chirality.h b/src/Chirality.h new file mode 100644 index 0000000000..c9ebf70a68 --- /dev/null +++ b/src/Chirality.h @@ -0,0 +1,15 @@ +#ifndef INC_CHIRALITY_H +#define INC_CHIRALITY_H +class Topology; +class Frame; +namespace Cpptraj { +namespace Chirality { + +enum ChiralType { ERR = 0, IS_S, IS_R }; + +/// \return Chirality at specified atom +ChiralType DetermineChirality(double&, int, Topology const&, Frame const&); + +} +} +#endif From b5fa4c1c99b041edf273b141fbadb8a9fd0f991c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 10:42:32 -0400 Subject: [PATCH 226/368] Chiral routines have been moved --- src/Exec_PrepareForLeap.cpp | 142 ------------------------------------ src/Exec_PrepareForLeap.h | 6 -- 2 files changed, 148 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8ba2dc7a32..d3abcc24b3 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -822,148 +822,6 @@ const return 0; } -/// \return Total priority (i.e. sum of atomic numbers) of atoms bonded to given atom. -int Exec_PrepareForLeap::totalPriority(Topology const& topIn, int atnum, int rnum, - int depth, int tgtdepth, std::vector& Visited) -{ - if (Visited[atnum] || depth == tgtdepth) return 0; - Visited[atnum] = true; - if (topIn[atnum].ResNum() != rnum) { - if (depth == 0) - // Atom in another residue bonded to chiral atom (e.g. O to C1) - return topIn[atnum].AtomicNumber(); - else - // Atom in another residue bonded to atom bonded to chiral atom - return 0; - } - int sum = 0; - Atom const& atom = topIn[atnum]; - for (Atom::bond_iterator bat = atom.bondbegin(); bat != atom.bondend(); ++bat) - sum += topIn[*bat].AtomicNumber() + totalPriority(topIn, *bat, rnum, depth+1, tgtdepth, Visited); - return sum; -} - -class priority_element { - public: - /// CONSTRUCT from atom number and initial priority - priority_element(int a, int p1) : atnum_(a), priority1_(p1), priority2_(-1) {} - /// Set priority 2 - void SetPriority2(int p2) { priority2_ = p2; } - /// \return Atom number - int AtNum() const { return atnum_; } - /// \return Priority 1 - int Priority1() const { return priority1_; } - /// \return Priority 2 - int Priority2() const { return priority2_; } - /// Sort on priority 1, then priority 2 - bool operator<(const priority_element& rhs) const { - if (*this != rhs) { - if (priority1_ == rhs.priority1_) { - return (priority2_ > rhs.priority2_); - } else { - return (priority1_ > rhs.priority1_); - } - } else - return false; - } - /// \return true if priorities are identical - bool operator==(const priority_element& rhs) const { - return (priority1_ == rhs.priority1_) && (priority2_ == rhs.priority2_); - } - /// \return true if priorities are not equal - bool operator!=(const priority_element& rhs) const { - if (priority2_ != rhs.priority2_ || - priority1_ != rhs.priority1_) return true; - return false; - } - private: - int atnum_; - int priority1_; - int priority2_; -}; - -/** Given an atom that is a chiral center, attempt to calculate a - * torsion that will help determine R vs S. Priorities will be - * assigned to bonded atoms as 1, 2, 3, and optionally 4. The - * torsion will then be calculated as - * 1-2-3-0 - * where 0 is the chiral center. Negative is S, positive is R. - */ -Exec_PrepareForLeap::ChiralRetType - Exec_PrepareForLeap::CalcChiralAtomTorsion(double& tors, int atnum, - Topology const& topIn, - Frame const& frameIn) -const -{ - tors = 0.0; - Atom const& atom = topIn[atnum]; - if (atom.Nbonds() < 3) { - mprinterr("Error: CalcChiralAtomTorsion called for atom %s with less than 3 bonds.\n", - topIn.AtomMaskName(atnum).c_str()); - return ERR; - } - // Calculate a priority score for each bonded atom. - // First just use the atomic number. - mprintf("DEBUG: Determining priorities around atom %s\n", topIn.AtomMaskName(atnum).c_str()); - std::vector priority; - for (int idx = 0; idx != atom.Nbonds(); idx++) { - priority.push_back( priority_element(atom.Bond(idx), topIn[atom.Bond(idx)].AtomicNumber()) ); - mprintf("DEBUG:\t\t%i Priority for %s is %i\n", idx, topIn.AtomMaskName(atom.Bond(idx)).c_str(), priority.back().Priority1()); - } - // For any identical priorities, need to check who they are bonded to. - for (int idx1 = 0; idx1 != atom.Nbonds(); idx1++) { - for (int idx2 = idx1+1; idx2 != atom.Nbonds(); idx2++) { - if (priority[idx1] == priority[idx2]) { - bool identical_priorities = true; - int depth = 1; - while (identical_priorities) { - mprintf("DEBUG: Priority of index %i == %i, depth %i\n", idx1, idx2, depth); - std::vector Visited(topIn.Natom(), false); - Visited[atnum] = true; - priority[idx1].SetPriority2(totalPriority(topIn, atom.Bond(idx1), atom.ResNum(), 0, depth, Visited)); - mprintf("DEBUG:\tPriority2 of %i is %i\n", idx1, priority[idx1].Priority2()); - - Visited.assign(topIn.Natom(), false); - Visited[atnum] = true; - priority[idx2].SetPriority2(totalPriority(topIn, atom.Bond(idx2), atom.ResNum(), 0, depth, Visited)); - mprintf("DEBUG:\tPriority2 of %i is %i\n", idx2, priority[idx2].Priority2()); - if (priority[idx1] != priority[idx2]) { - identical_priorities = false; - break; - } - if (depth == 10) { - mprinterr("Error: Could not determine priority around '%s'\n", - topIn.AtomMaskName(atnum).c_str()); - return ERR; - } - depth++; - } // END while identical priorities - } - } - } - std::sort(priority.begin(), priority.end()); - mprintf("DEBUG: Sorted by priority:"); - for (std::vector::const_iterator it = priority.begin(); - it != priority.end(); ++it) - mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); - mprintf("\n"); - - tors = Torsion( frameIn.XYZ(priority[0].AtNum()), - frameIn.XYZ(priority[1].AtNum()), - frameIn.XYZ(priority[2].AtNum()), - frameIn.XYZ(atnum) ); - mprintf("DEBUG: Torsion around '%s' is %f", topIn.AtomMaskName(atnum).c_str(), tors*Constants::RADDEG); - ChiralRetType ret; - if (tors < 0) { - ret = IS_S; - mprintf(" (S)\n"); - } else { - ret = IS_R; - mprintf(" (R)\n"); - } - return ret; -} - /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, IdSugarRingStatType& stat) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 1b7f144801..b435794dbe 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -57,12 +57,6 @@ class Exec_PrepareForLeap : public Exec { int CalcConfigCarbonTorsion(double&, int, Iarray const&, Topology const&, Frame const&) const; - static int totalPriority(Topology const&, int, int, int, int, std::vector&); - - /// return type for the CalcChiralAtomTorsion routine - enum ChiralRetType { ERR = 0, IS_S, IS_R }; - - ChiralRetType CalcChiralAtomTorsion(double&, int, Topology const&, Frame const&) const; /// Error status for IdSugarRing enum IdSugarRingStatType { ID_OK = 0, ID_ERR, ID_MISSING_O }; /// \return Sugar with atom indices set up From 27af445ee6a223a15d1f5e0f6e9d0f6c1a04dbe3 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 11:19:58 -0400 Subject: [PATCH 227/368] Add version that doesnt return torsion value --- src/Chirality.cpp | 8 ++++++++ src/Chirality.h | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Chirality.cpp b/src/Chirality.cpp index 7c9e08ac0e..d4837e52b6 100644 --- a/src/Chirality.cpp +++ b/src/Chirality.cpp @@ -151,3 +151,11 @@ Chirality::ChiralType Chirality::DetermineChirality(double& tors, int atnum, return ret; } +/** Determine chirality around specified atom. */ +Chirality::ChiralType Chirality::DetermineChirality(int atnum, + Topology const& topIn, + Frame const& frameIn) +{ + double tors; + return DetermineChirality(tors, atnum, topIn, frameIn); +} diff --git a/src/Chirality.h b/src/Chirality.h index c9ebf70a68..489d738025 100644 --- a/src/Chirality.h +++ b/src/Chirality.h @@ -7,8 +7,10 @@ namespace Chirality { enum ChiralType { ERR = 0, IS_S, IS_R }; -/// \return Chirality at specified atom +/// \return Chirality at specified atom, set torsion value ChiralType DetermineChirality(double&, int, Topology const&, Frame const&); +/// \return Chirality at specified atom +ChiralType DetermineChirality(int, Topology const&, Frame const&); } } From 59d4917b20ee23bb793f6fd7172585f4cebf3a6b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 11:20:58 -0400 Subject: [PATCH 228/368] Add Chirality to cpptrajfiles --- src/cpptrajdepend | 3 ++- src/cpptrajfiles | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 2bd8965261..f1406a9851 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -146,6 +146,7 @@ ByteRoutines.o : ByteRoutines.cpp CIFfile.o : CIFfile.cpp Atom.h BufferedLine.h CIFfile.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h NameType.h Parallel.h SymbolExporting.h CharMask.o : CharMask.cpp Atom.h CharMask.h CpptrajStdio.h MaskToken.h Molecule.h NameType.h Residue.h Segment.h SymbolExporting.h Unit.h CharmmParamFile.o : CharmmParamFile.cpp ArgList.h AtomType.h BufferedLine.h CharmmParamFile.h Constants.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h StringRoutines.h TypeNameHolder.h +Chirality.o : Chirality.cpp Atom.h AtomMask.h AtomType.h Box.h Chirality.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TorsionRoutines.h TypeNameHolder.h Unit.h Vec3.h ClusterMap.o : ClusterMap.cpp AssociatedData.h ClusterMap.h Constants.h CpptrajFile.h CpptrajStdio.h DataSet.h DataSet_2D.h Dimension.h FileIO.h FileName.h MetaData.h Parallel.h ProgressBar.h ProgressTimer.h Range.h TextFormat.h Timer.h Cmd.o : Cmd.cpp Cmd.h DispatchObject.h CmdInput.o : CmdInput.cpp CmdInput.h StringRoutines.h @@ -268,7 +269,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Chirality.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h diff --git a/src/cpptrajfiles b/src/cpptrajfiles index f811825ecb..446f3f0dca 100644 --- a/src/cpptrajfiles +++ b/src/cpptrajfiles @@ -148,6 +148,7 @@ COMMON_SOURCES= \ ByteRoutines.cpp \ CharMask.cpp \ CharmmParamFile.cpp \ + Chirality.cpp \ CIFfile.cpp \ ClusterMap.cpp \ Cmd.cpp \ From b59000ec53538cbc390ea7adbd6ef9f467f3f2f3 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 11:28:00 -0400 Subject: [PATCH 229/368] Add form determination for furanose --- src/Exec_PrepareForLeap.cpp | 185 +++++++++++------------------------- src/Exec_PrepareForLeap.h | 5 +- 2 files changed, 57 insertions(+), 133 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index d3abcc24b3..a5f286591e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2,6 +2,7 @@ #include "CpptrajStdio.h" #include "DistRoutines.h" #include "CharMask.h" +#include "Chirality.h" #include "TorsionRoutines.h" #include "Constants.h" #include "CpptrajFile.h" @@ -1091,12 +1092,53 @@ const return 0; } +/** Determine if anomeric carbon of furanose is up or down. */ +Exec_PrepareForLeap::AnomerRetType + Exec_PrepareForLeap::DetermineUpOrDown(bool& isDform, std::string& formStr, + Sugar const& sugar, + Topology const& topIn, Frame const& frameIn) +const +{ + formStr.clear(); + Cpptraj::Chirality::ChiralType ctypeR = Cpptraj::Chirality:: + DetermineChirality(sugar.HighestStereocenter(), + topIn, frameIn); + if (ctypeR == Cpptraj::Chirality::ERR) { + mprinterr("Error: Could not determine chirality for furanose.\n"); + return A_ERR; + } + if (ctypeR == Cpptraj::Chirality::IS_R) + isDform = true; + else + isDform = false; + + Cpptraj::Chirality::ChiralType ctypeA = Cpptraj::Chirality:: + DetermineChirality(sugar.AnomericAtom(), + topIn, frameIn); + if (ctypeA == Cpptraj::Chirality::ERR) { + mprinterr("Error: Could not determine chirality around anomeric atom for furanose.\n"); + return A_ERR; + } + + if (ctypeR == ctypeA) { + // Up, beta + formStr = "U"; + return IS_BETA; + } else { + // Down, alpha + formStr = "D"; + return IS_ALPHA; + } +} + /** Determine anomeric form of the sugar. */ Exec_PrepareForLeap::AnomerRetType - Exec_PrepareForLeap::DetermineAnomericForm(bool& isDform, Sugar const& sugar, + Exec_PrepareForLeap::DetermineAnomericForm(bool& isDform, std::string& formStr, + Sugar const& sugar, Topology const& topIn, Frame const& frameIn) const { + formStr.clear(); isDform = true; // For determining orientation around anomeric carbon need ring // oxygen atom and next carbon in the ring. @@ -1167,44 +1209,17 @@ const // Same side is beta, opposite is alpha. if (t_an_up == t_ar_up) { form = IS_BETA; + formStr = "B"; //mprintf("DEBUG: Form is Beta\n"); } else { form = IS_ALPHA; + formStr = "A"; //mprintf("DEBUG: Form is Alpha\n"); } // By the atom ordering used by CalcAnomericRefTorsion and // CalcConfigCarbonTorsion, D is a negative (down) torsion. isDform = !t_cc_up; -/* - if (sugar.AnomericRefAtom() == sugar.RingEndAtom()) { - // Anomeric reference is the ring end, same side is beta, opposite is alpha. - isDform = !t_ar_up; - if (t_an_up == t_ar_up) { - form = IS_BETA; - //mprintf("DEBUG: Form is Beta\n"); - } else { - form = IS_ALPHA; - //mprintf("DEBUG: Form is Alpha\n"); - } - } else { - // Anomeric reference isnt the ring end, definition is reversed. - isDform = t_ar_up; - if (t_an_up != t_ar_up) { - form = IS_BETA; - //mprintf("DEBUG: Form is Beta\n"); - } else { - form = IS_ALPHA; - //mprintf("DEBUG: Form is Alpha\n"); - } - } - - if (sugar.HighestStereocenter() != sugar.AnomericRefAtom()) { - double stereo_t = 0; - if (CalcStereocenterTorsion(stereo_t, sugar.HighestStereocenter(), topIn, frameIn)) - return A_ERR; - isDform = (stereo_t > 0); - }*/ return form; } @@ -1401,18 +1416,20 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, // Determine alpha or beta and D or L bool isDform; - AnomerRetType form = DetermineAnomericForm(isDform, sugar, topIn, frameIn); std::string formStr; - if (form == IS_ALPHA) - formStr = "A"; - else if (form == IS_BETA) - formStr = "B"; - else if (form == A_WARNING) { + AnomerRetType form; + if (sugar.RingType() == Sugar::FURANOSE) + form = DetermineUpOrDown(isDform, formStr, sugar, topIn, frameIn); + else + form = DetermineAnomericForm(isDform, formStr, sugar, topIn, frameIn); + if (form == A_WARNING) { // Sugar missing C1-X substituent, non-fatal resStat_[rnum] = SUGAR_MISSING_C1X; return 0; - } else + } else if (formStr.empty() || form == A_ERR) { + mprinterr("Error: alpha/beta determination failed.\n"); return 1; + } // Change PDB names to Glycam ones if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, form)) { @@ -1420,28 +1437,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, return 1; } - - // Find the rest of the carbons in the chain in order to find the - // stereocenter with the highest index. Start from final ring carbon. - //int highest_stereocenter = sugar.HighestStereocenter(); - - //mprintf("\t Highest stereocenter: %s\n", topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); - // Determine D/L -/* double t_sc; - ChiralRetType sc_chirality = CalcChiralAtomTorsion(t_sc, highest_stereocenter, topIn, frameIn); - static const char* chiralStr[] = {0, "S", "R"}; - mprintf("DEBUG: Based on t_sc %s chirality is %s\n", - topIn.TruncResNameOnumId(rnum).c_str(), chiralStr[sc_chirality]); - if (sc_chirality == ERR) { - mprinterr("Error: Could not determine chirality around stereocenter.\n"); - return 1; - } - bool isDform; - if (sc_chirality == IS_R) - isDform = true; - else - isDform = false;*/ - if (isDform) { mprintf("\t %s Form is %s-D\n", sugarName.c_str(), formStr.c_str()); } else { @@ -1455,78 +1450,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprinterr("Error: Determination of sugar linkages failed.\n"); return 1; } -/* - // Use a set to store linkages so they are in alphabetical order for easier identification. - std::set linkages; - // Bonds to non sugars to be removed since these will confuse tleap - BondArray bondsToRemove; - // Loop over sugar atoms - for (int at = res.FirstAtom(); at != res.LastAtom(); at++) - { - // Check for bonds to other residues - for (Atom::bond_iterator bat = topIn[at].bondbegin(); - bat != topIn[at].bondend(); ++bat) - { - if (topIn[*bat].ResNum() != rnum) { - // This atom is bonded to another residue - if (!cmask.AtomInCharMask(*bat)) { - mprintf("\t Sugar %s bonded to non-sugar %s\n", - topIn.ResNameNumAtomNameNum(at).c_str(), - topIn.ResNameNumAtomNameNum(*bat).c_str()); - linkages.insert( topIn[at].Name() ); - bondsToRemove.push_back( BondType(at, *bat, -1) ); - // Check if this is a recognized linkage to non-sugar - Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); - NameMapType::const_iterator lname = pdb_glycam_linkageRes_map_.find( pres.Name() ); - if (lname != pdb_glycam_linkageRes_map_.end()) { - if (debug_ > 0) - mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); - ChangeResName( pres, lname->second ); - resStat_[topIn[*bat].ResNum()] = VALIDATED; - } else if (pres.Name() == terminalHydroxylName_) { - if (debug_ > 0) - mprintf("DEBUG: '%s' is terminal hydroxyl.\n", *(pres.Name())); - resStat_[topIn[*bat].ResNum()] = VALIDATED; - } else { - mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); - resStat_[topIn[*bat].ResNum()] = UNRECOGNIZED_SUGAR_LINKAGE; - } - } else { - mprintf("\t Sugar %s bonded to sugar %s\n", - topIn.ResNameNumAtomNameNum(at).c_str(), - topIn.ResNameNumAtomNameNum(*bat).c_str()); - linkages.insert( topIn[at].Name() ); - // Also remove inter-sugar bonds since leap cant handle branching - if (at < *bat) - sugarBondsToRemove.insert( BondType(at, *bat, -1) ); - else - sugarBondsToRemove.insert( BondType(*bat, at, -1) ); - } - } - } // END loop over bonded atoms - } // END loop over residue atoms - - // Determine linkage - if (debug_ > 0) { - mprintf("\t Link atoms:"); - for (std::set::const_iterator it = linkages.begin(); - it != linkages.end(); ++it) - mprintf(" %4s", *(*it)); - mprintf("\n"); - } - std::string linkcode = LinkageCode(resChar, linkages); - if (debug_ > 0) mprintf("\t Linkage code: %s\n", linkcode.c_str()); - if (linkcode.empty()) { - mprinterr("Error: Unrecognized sugar linkage.\n"); - return 1; - } - // Remove bonds to other residues - for (BondArray::const_iterator bnd = bondsToRemove.begin(); - bnd != bondsToRemove.end(); ++bnd) - { - LeapBond(bnd->A1(), bnd->A2(), topIn, outfile); - topIn.RemoveBond(bnd->A1(), bnd->A2()); - }*/ // Modify residue char to indicate D form if necessary. // We do this here and not above so as not to mess with the diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index b435794dbe..66c94d86eb 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -62,9 +62,10 @@ class Exec_PrepareForLeap : public Exec { /// \return Sugar with atom indices set up Sugar IdSugarRing(int, Topology const&, IdSugarRingStatType&) const; int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&, AnomerRetType) const; - + /// \return If furanose is up or down + AnomerRetType DetermineUpOrDown(bool&, std::string&, Sugar const&, Topology const&, Frame const&) const; /// \return Anomeric form of the sugar - AnomerRetType DetermineAnomericForm(bool&, Sugar const&, Topology const&, Frame const&) const; + AnomerRetType DetermineAnomericForm(bool&, std::string&, Sugar const&, Topology const&, Frame const&) const; /// \return Glycam linkage code for given link atoms std::string GlycamLinkageCode(std::set const&, Topology const&) const; /// Determine linkages for the sugar From 226f725d348741885148c7bd385a1832d037664b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 11:34:30 -0400 Subject: [PATCH 230/368] Make unrecognized linkage a warning --- src/Exec_PrepareForLeap.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a5f286591e..73326a4fa9 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1447,8 +1447,9 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, std::string linkcode = DetermineSugarLinkages(sugar, cmask, topIn, resStat_, outfile, sugarBondsToRemove); if (linkcode.empty()) { - mprinterr("Error: Determination of sugar linkages failed.\n"); - return 1; + resStat_[rnum] = UNRECOGNIZED_SUGAR_LINKAGE; + mprintf("Warning: Determination of sugar linkages failed.\n"); + return 0; } // Modify residue char to indicate D form if necessary. From bebb80d397299350d1fd00f05260a4eca82d35fc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 17:18:26 -0400 Subject: [PATCH 231/368] Fix the sugar index remap code --- src/Exec_PrepareForLeap.cpp | 224 +++++++++++++++++------------------- src/Exec_PrepareForLeap.h | 4 +- 2 files changed, 105 insertions(+), 123 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 73326a4fa9..dd4a05ecbc 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -84,18 +84,26 @@ unsigned int Exec_PrepareForLeap::Sugar::NumRingAtoms() const { return ring_atoms_.size() + 1; } +inline static int find_new_idx(int oldidx, std::vector const& atomMap, int at0, int at1) { + for (int newidx = at0; newidx != at1; newidx++) + if (atomMap[newidx] == oldidx) + return newidx; + return -1; +} + /** Remap internal indices according to given map. */ -void Exec_PrepareForLeap::Sugar::RemapIndices(Iarray const& atomMap) { +void Exec_PrepareForLeap::Sugar::RemapIndices(Iarray const& atomMap, int at0, int at1) { // Always try the anomeric atom - anomeric_atom_ = atomMap[anomeric_atom_]; + anomeric_atom_ = find_new_idx(anomeric_atom_, atomMap, at0, at1); //atomMap[anomeric_atom_]; if (NotSet()) return; - ring_oxygen_atom_ = atomMap[ring_oxygen_atom_]; - ano_ref_atom_ = atomMap[ano_ref_atom_]; - highest_stereocenter_ = atomMap[highest_stereocenter_]; + //mprintf("DEBUG: Ring O old = %i ring O new %i\n", ring_oxygen_atom_+1, atomMap[ring_oxygen_atom_]+1); + ring_oxygen_atom_ = find_new_idx(ring_oxygen_atom_, atomMap, at0, at1); //atomMap[ring_oxygen_atom_]; + ano_ref_atom_ = find_new_idx(ano_ref_atom_, atomMap, at0, at1); //atomMap[ano_ref_atom_]; + highest_stereocenter_ = find_new_idx(highest_stereocenter_, atomMap, at0, at1); //atomMap[highest_stereocenter_]; for (Iarray::iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) - *it = atomMap[*it]; + *it = find_new_idx(*it, atomMap, at0, at1); //atomMap[*it]; for (Iarray::iterator it = chain_atoms_.begin(); it != chain_atoms_.end(); ++it) - *it = atomMap[*it]; + *it = find_new_idx(*it, atomMap, at0, at1); //atomMap[*it]; } // ----------------------------------------------------------------------------- @@ -133,44 +141,6 @@ const leapunitname_.c_str(), topIn[at2].ResNum()+1, *(topIn[at2].Name())); } -/// \return Glycam linkage code for given glycam residue name and linked atoms -/* -static std::string LinkageCode(char glycamChar, std::set const& linkages) -{ - std::string linkcode; - // NOTE: I dont know if this is the best way to ID linkages. Seems easiest though. - std::string linkstr; - for (std::set::const_iterator it = linkages.begin(); it != linkages.end(); ++it) - linkstr.append( it->Truncated() ); - //mprintf("\t linkstr= '%s'\n", linkstr.c_str()); - switch (glycamChar) { - case 'S': - if (linkstr == "C2") linkcode = "0"; - break; - default: - if (linkstr == "C1") linkcode = "0"; - else if (linkstr == "C1O2") linkcode = "2"; - else if (linkstr == "C1O3") linkcode = "3"; - else if (linkstr == "C1O4") linkcode = "4"; - else if (linkstr == "C1O6") linkcode = "6"; - else if (linkstr == "C1O2O3") linkcode = "Z"; - else if (linkstr == "C1O2O4") linkcode = "Y"; - else if (linkstr == "C1O2O6") linkcode = "X"; - else if (linkstr == "C1O3O4") linkcode = "W"; - else if (linkstr == "C1O3O6") linkcode = "V"; - else if (linkstr == "C1O4O6") linkcode = "U"; - else if (linkstr == "C1O2O3O4") linkcode = "T"; - else if (linkstr == "C1O2O3O6") linkcode = "S"; - else if (linkstr == "C1O2O4O6") linkcode = "R"; - else if (linkstr == "C1O3O4O6") linkcode = "Q"; - else if (linkstr == "C1O2O3O4O6") linkcode = "P"; - break; - } - if (linkcode.empty()) - mprintf("Warning: Could not determine link code for link atoms '%s'.\n", linkstr.c_str()); - return linkcode; -}*/ - /** If file not present, use a default set of residue names. */ void Exec_PrepareForLeap::SetPdbResNames() { //Protein @@ -1650,6 +1620,8 @@ int Exec_PrepareForLeap::CheckForFunctionalGroups(Sugar& sugar, const { int rnum = sugar.ResNum(topIn); + int original_at0 = topIn.Res(rnum).FirstAtom(); + int original_at1 = topIn.Res(rnum).LastAtom(); std::string sugarName = topIn.TruncResNameOnumId(rnum); mprintf("DEBUG: Sulfate check: %s\n", sugarName.c_str()); @@ -1729,6 +1701,7 @@ const // Split the sulfate into a new residue named SO3 for Glycam. // This may involve reordering atoms within the residue, but not // any other atoms, so we should not have to update other sugars. + mprintf("DEBUG: Before split: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); Iarray atomMap; if (topIn.SplitResidue(SO3, newResName, atomMap)) { mprinterr("Error: Could not split sulfate from residue '%s'.\n", sugarName.c_str()); @@ -1738,7 +1711,9 @@ const Frame oldFrame = frameIn; frameIn.SetCoordinatesByMap( oldFrame, atomMap ); // Remap the sugar indices - sugar.RemapIndices( atomMap ); + mprintf("DEBUG: Before remap: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); + sugar.RemapIndices( atomMap, original_at0, original_at1 ); + mprintf("DEBUG: After remap: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); } //atomsRemain = false; // DEBUG } // END while atoms remain @@ -1775,7 +1750,7 @@ const } } if (o1_atom == -1) return 0; - mprintf("DEBUG: Terminal check: O1 atom: '%s'\n", topIn.AtomMaskName(o1_atom).c_str()); + mprintf("DEBUG: Terminal check: %s O1 atom: '%s'\n", sugarName.c_str(), topIn.AtomMaskName(o1_atom).c_str()); Iarray selected; FunctionalGroupType groupType = IdFunctionalGroup(selected, rnum, o1_atom, anomericAtom, topIn); @@ -1814,19 +1789,25 @@ const // Split the hydroxyl into a new residue named ROH for Glycam. // This may involve reordering atoms within the residue, but not // any other atoms, so we should not have to update SugarIndices. + int original_at0 = topIn.Res(rnum).FirstAtom(); + int original_at1 = topIn.Res(rnum).LastAtom(); Iarray atomMap; if (topIn.SplitResidue(ROH, terminalHydroxylName_, atomMap)) { mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); return 1; } + // DEBUG + for (int at = original_at0; at != original_at1; at++) + mprintf("DEBUG:\t\tAtomMap[%i] = %i\n", at, atomMap[at]); // Reorder the frame to match Frame oldFrame = frameIn; frameIn.SetCoordinatesByMap( oldFrame, atomMap ); // Remap the sugar indices - sugar.RemapIndices( atomMap ); + sugar.RemapIndices( atomMap, original_at0, original_at1 ); return 0; } + /** Try to fix issues with sugar structure before trying to identify. */ int Exec_PrepareForLeap::FixSugarsStructure(std::vector& sugarResidues, std::string const& sugarMaskStr, @@ -1861,8 +1842,10 @@ const mprintf("Warning: Problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); } - if (!sugar.NotSet()) + if (!sugar.NotSet()) { sugarResidues.push_back( sugar ); + //sugarResidues.back().PrintInfo(topIn); // FIXME + } } if (c1bondsearch) { @@ -1879,6 +1862,10 @@ const } } } + //DEBUG + for (std::vector::const_iterator sugar = sugarResidues.begin(); + sugar != sugarResidues.end(); ++sugar) + sugar->PrintInfo(topIn); if (termsearch) { // Loop over sugar indices to see if residues have ROH that must be split off @@ -1892,6 +1879,11 @@ const } } // End loop over sugar indices } + //DEBUG + //for (std::vector::const_iterator sugar = sugarResidues.begin(); + // sugar != sugarResidues.end(); ++sugar) + // sugar->PrintInfo(topIn); + // if (so3search) { // Loop over chain indices to see if residues need to be split @@ -1912,11 +1904,15 @@ const /** Prepare sugars for leap. */ -int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, +int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, + std::vector const& Sugars, + Topology& topIn, Frame const& frameIn, CpptrajFile* outfile) { - std::set sugarBondsToRemove; + // Need to set up the mask again since topology may have been modified. + AtomMask sugarMask; + if (sugarMask.SetMaskString( sugarmaskstr )) return 1; mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); if (topIn.SetupIntegerMask( sugarMask )) return 1; sugarMask.MaskInfo(); @@ -1925,45 +1921,34 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, else { CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); // Get sugar residue numbers - Iarray sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); + //Iarray sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); // Try to identify sugar rings - std::vector Sugars; - Sugars.reserve( sugarResNums.size() ); - for (Iarray::const_iterator rnum = sugarResNums.begin(); - rnum != sugarResNums.end(); ++rnum) + //std::vector Sugars; + //Sugars.reserve( sugarResNums.size() ); + //for (Iarray::const_iterator rnum = sugarResNums.begin(); + // rnum != sugarResNums.end(); ++rnum) + //{ + // IdSugarRingStatType stat; + // Sugars.push_back( IdSugarRing(*rnum, topIn, stat) ); + // if (stat == ID_ERR) { + // if (errorsAreFatal_) { + // mprinterr("Error: Problem identifying sugar ring for %s\n", + // topIn.TruncResNameOnumId(*rnum).c_str()); + // return 1; + // } else + // mprintf("Warning: Problem identifying sugar ring for %s\n", + // topIn.TruncResNameOnumId(*rnum).c_str()); + // } else if (stat == ID_MISSING_O) + // resStat_[*rnum] = SUGAR_MISSING_RING_O; + // Sugars.back().PrintInfo( topIn ); + //} + for (std::vector::const_iterator sugar = Sugars.begin(); + sugar != Sugars.end(); ++sugar) { - IdSugarRingStatType stat; - Sugars.push_back( IdSugarRing(*rnum, topIn, stat) ); - if (stat == ID_ERR) { - if (errorsAreFatal_) { - mprinterr("Error: Problem identifying sugar ring for %s\n", - topIn.TruncResNameOnumId(*rnum).c_str()); - return 1; - } else - mprintf("Warning: Problem identifying sugar ring for %s\n", - topIn.TruncResNameOnumId(*rnum).c_str()); - } else if (stat == ID_MISSING_O) - resStat_[*rnum] = SUGAR_MISSING_RING_O; - Sugars.back().PrintInfo( topIn ); - } -/* // For each sugar residue, try to fill in missing linkages - if (findC1linkages) { - mprintf("\tAttempting to identify missing linkages to sugar anomeric carbons.\n"); - for (std::vector::const_iterator sugar = Sugars.begin(); - sugar != Sugars.end(); ++sugar) - { - if (FindSugarC1Linkages(*sugar, topIn, frameIn)) { - if (errorsAreFatal_) - return 1; - else - mprintf("Warning: Finding anomeric C linkages for %s failed, skipping.\n", - topIn.TruncResNameOnumId( sugar->ResNum() ).c_str()); - } - } - } else { - mprintf("\tNot attempting to identify missing linkages to sugar anomeric carbons.\n"); - }*/ + sugar->PrintInfo(topIn); + } + std::set sugarBondsToRemove; // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. for (std::vector::const_iterator sugar = Sugars.begin(); @@ -1987,9 +1972,9 @@ int Exec_PrepareForLeap::PrepareSugars(AtomMask& sugarMask, Topology& topIn, LeapBond(bnd->A1(), bnd->A2(), topIn, outfile); topIn.RemoveBond(bnd->A1(), bnd->A2()); } + // Bonds to sugars have been removed, so regenerate molecule info + topIn.DetermineMolecules(); } - // Bonds to sugars have been removed, so regenerate molecule info - topIn.DetermineMolecules(); return 0; } @@ -2777,17 +2762,17 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // Get sugar mask or default sugar mask - AtomMask sugarMask; + //AtomMask sugarMask; std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); if (!sugarmaskstr.empty()) { if (!prepare_sugars) { mprinterr("Error: Cannot specify 'nosugars' and 'sugarmask'\n"); return CpptrajState::ERR; } - if (sugarMask.SetMaskString(sugarmaskstr)) { - mprinterr("Error: Setting sugar mask string.\n"); - return CpptrajState::ERR; - } + //if (sugarMask.SetMaskString(sugarmaskstr)) { + // mprinterr("Error: Setting sugar mask string.\n"); + // return CpptrajState::ERR; + //} } else if (prepare_sugars) { // No sugar mask specified; create one from names in pdb_to_glycam_ map. sugarmaskstr.assign(":"); @@ -2797,15 +2782,16 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) sugarmaskstr.append(","); sugarmaskstr.append( mit->first.Truncated() ); } - if (sugarMask.SetMaskString(sugarmaskstr)) { - mprinterr("Error: Setting sugar mask string.\n"); - return CpptrajState::ERR; - } + //if (sugarMask.SetMaskString(sugarmaskstr)) { + // mprinterr("Error: Setting sugar mask string.\n"); + // return CpptrajState::ERR; + //} } // If preparing sugars, need to set up an atom map and potentially // search for terminal sugars/missing bonds. Do this here after all atom // modifications have been done. + std::vector sugarResidues; if (prepare_sugars) { // Set up an AtomMap for this residue to help determine stereocenters. // This is required by the IdSugarRing() function. @@ -2826,29 +2812,25 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tWill search for missing bonds to sugar anomeric atoms.\n"); else mprintf("\tNot searching for missing bonds to sugar anomeric atoms.\n"); - if (termsearch || c1bondsearch) { - std::vector sugarResidues; - // May need to modify sugar structure/topology, either by splitting - // C1 hydroxyls of terminal sugars into ROH residues, and/or by - // adding missing bonds to C1 atoms. - // This is done before any identification takes place since we want - // to identify based on the most up-to-date topology. - - if (FixSugarsStructure(sugarResidues, sugarmaskstr, topIn, frameIn, - c1bondsearch, termsearch)) - { - mprinterr("Error: Sugar structure modification failed.\n"); - return CpptrajState::ERR; - } - // Since FixSugarsStructure() can re-order atoms, need - // to recreate the map. - myMap_.ClearMap(); - if (myMap_.Setup(topIn, frameIn)) { - mprinterr("Error: Atom map second setup failed\n"); - return CpptrajState::ERR; - } - myMap_.DetermineAtomIDs(); + // May need to modify sugar structure/topology, either by splitting + // C1 hydroxyls of terminal sugars into ROH residues, and/or by + // adding missing bonds to C1 atoms. + // This is done before any identification takes place since we want + // to identify based on the most up-to-date topology. + if (FixSugarsStructure(sugarResidues, sugarmaskstr, topIn, frameIn, + c1bondsearch, termsearch)) + { + mprinterr("Error: Sugar structure modification failed.\n"); + return CpptrajState::ERR; + } + // Since FixSugarsStructure() can re-order atoms, need + // to recreate the map. + myMap_.ClearMap(); + if (myMap_.Setup(topIn, frameIn)) { + mprinterr("Error: Atom map second setup failed\n"); + return CpptrajState::ERR; } + myMap_.DetermineAtomIDs(); } // Each residue starts out unknown. @@ -2914,7 +2896,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Prepare sugars if (prepare_sugars) { - if (PrepareSugars(sugarMask, topIn, frameIn, outfile)) { + if (PrepareSugars(sugarmaskstr, sugarResidues, topIn, frameIn, outfile)) { mprinterr("Error: Sugar preparation failed.\n"); return CpptrajState::ERR; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 66c94d86eb..0d419f46e4 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -87,7 +87,7 @@ class Exec_PrepareForLeap : public Exec { int FixSugarsStructure(std::vector&, std::string const&, Topology&, Frame&, bool, bool) const; - int PrepareSugars(AtomMask&, Topology&, Frame const&, CpptrajFile*); + int PrepareSugars(std::string const&, std::vector const&, Topology&, Frame const&, CpptrajFile*); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*); @@ -173,7 +173,7 @@ class Exec_PrepareForLeap::Sugar { unsigned int NumRingAtoms() const; void PrintInfo(Topology const&) const; /// Remap internal indices according to given atom map. - void RemapIndices(Iarray const&); + void RemapIndices(Iarray const&, int, int); private: int ring_oxygen_atom_; ///< Index of the ring oxygen atom int anomeric_atom_; ///< Index of the anomeric C atom (ring start) From 309b9edd57d4a60f0750440dfc35e05a222f5df0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 29 Oct 2021 17:26:20 -0400 Subject: [PATCH 232/368] Hide debug info --- src/Exec_PrepareForLeap.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index dd4a05ecbc..36fdb63446 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1711,9 +1711,9 @@ const Frame oldFrame = frameIn; frameIn.SetCoordinatesByMap( oldFrame, atomMap ); // Remap the sugar indices - mprintf("DEBUG: Before remap: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); + //mprintf("DEBUG: Before remap: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); sugar.RemapIndices( atomMap, original_at0, original_at1 ); - mprintf("DEBUG: After remap: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); + //mprintf("DEBUG: After remap: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); } //atomsRemain = false; // DEBUG } // END while atoms remain @@ -1797,8 +1797,8 @@ const return 1; } // DEBUG - for (int at = original_at0; at != original_at1; at++) - mprintf("DEBUG:\t\tAtomMap[%i] = %i\n", at, atomMap[at]); + //for (int at = original_at0; at != original_at1; at++) + // mprintf("DEBUG:\t\tAtomMap[%i] = %i\n", at, atomMap[at]); // Reorder the frame to match Frame oldFrame = frameIn; frameIn.SetCoordinatesByMap( oldFrame, atomMap ); @@ -1844,7 +1844,8 @@ const } if (!sugar.NotSet()) { sugarResidues.push_back( sugar ); - //sugarResidues.back().PrintInfo(topIn); // FIXME + if (debug_ > 0) + sugarResidues.back().PrintInfo(topIn); } } @@ -1863,9 +1864,9 @@ const } } //DEBUG - for (std::vector::const_iterator sugar = sugarResidues.begin(); - sugar != sugarResidues.end(); ++sugar) - sugar->PrintInfo(topIn); + //for (std::vector::const_iterator sugar = sugarResidues.begin(); + // sugar != sugarResidues.end(); ++sugar) + // sugar->PrintInfo(topIn); if (termsearch) { // Loop over sugar indices to see if residues have ROH that must be split off From 5b402512fd09122e8b75b1b527f13149d92c6bf1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sat, 30 Oct 2021 15:18:24 -0400 Subject: [PATCH 233/368] When following bonds to complete ring cycle, stay within same residue. Save indices of carbon atoms bonded to potential ring start atoms --- src/Exec_PrepareForLeap.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 36fdb63446..3438398e63 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -470,6 +470,7 @@ const static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector& ring_atoms, int tgt_atom, std::vector& Visited, bool& found) { Visited[atm] = true; + int rnum = topIn[atm].ResNum(); //for (int i = 0; i != idx; i++) // mprintf("\t"); //mprintf("At atom %s\n", topIn.ResNameNumAtomNameNum(atm).c_str()); @@ -482,7 +483,10 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector> ringAtomCarbons; for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { Atom const& currentAtom = topIn[at]; @@ -810,16 +816,18 @@ const // bonded to two carbon atoms in the same residue. if (currentAtom.Element() == Atom::OXYGEN) { if (currentAtom.Nbonds() > 1) { - int bonds_to_c = 0; + Iarray c_atoms; for (Atom::bond_iterator bat = currentAtom.bondbegin(); bat != currentAtom.bondend(); ++bat) { if (topIn[*bat].Element() == Atom::CARBON && topIn[*bat].ResNum() == rnum) - bonds_to_c++; + c_atoms.push_back( *bat ); } - if ( bonds_to_c == 2 ) + if ( c_atoms.size() == 2 ) { potentialRingStartAtoms.push_back( at ); + ringAtomCarbons.push_back( std::pair(c_atoms[0], c_atoms[1]) ); + } } } } @@ -897,9 +905,10 @@ const Iarray carbon_chain; // Will be set true if complete ring can be found bool ring_complete = false; + std::vector>::const_iterator catoms = ringAtomCarbons.begin(); for (Iarray::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); - ++ringat) + ++ringat, ++catoms) { if (debug_ > 0) mprintf("DEBUG: Ring start '%s'\n", topIn.ResNameNumAtomNameNum(*ringat).c_str()); @@ -913,12 +922,12 @@ const // to two carbons, just start at the first carbon to see if we can // get to the second carbon. int c_beg, c_end; - if (topIn[*ringat].Bond(0) < topIn[*ringat].Bond(1)) { - c_beg = topIn[*ringat].Bond(0); - c_end = topIn[*ringat].Bond(1); + if (catoms->first < catoms->second) { + c_beg = catoms->first; + c_end = catoms->second; } else { - c_beg = topIn[*ringat].Bond(1); - c_end = topIn[*ringat].Bond(0); + c_beg = catoms->second; + c_end = catoms->first; } // Try to ascertain which carbon might be the anomeric carbon (i.e. the // carbon that originally started the chain). Tie goes to lower index. From 2bab9467855658d231e092d51ae01186aaae14e4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sun, 31 Oct 2021 11:41:02 -0400 Subject: [PATCH 234/368] Add furanose link --- src/Exec_PrepareForLeap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3438398e63..fc73e3f642 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1231,6 +1231,7 @@ const if (linkstr == "T") linkcode = "0"; else if (linkstr == "O1") linkcode = "1"; else if (linkstr == "TO2") linkcode = "2"; + else if (linkstr == "O2") linkcode = "2"; // Furanose C2-O2-X else if (linkstr == "TO3") linkcode = "3"; else if (linkstr == "TO4") linkcode = "4"; else if (linkstr == "TO6") linkcode = "6"; From 6f92109c6232fe35c916e0d356e89fd8852b9dbc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sun, 31 Oct 2021 13:10:16 -0400 Subject: [PATCH 235/368] Add alpha-D-psicofuranose --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 5d2ea34d3c..5ee2784aeb 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -27,7 +27,7 @@ "Fructose" C FRU,YYJ "Tagatose" J TAG "Sorbose" B SOR -"Psicose" P PSI +"Psicose" P PSI,PSV "N-Acetyl Neuraminic Acid" S SIA # PDB to glycam atom name maps From c3ca4999b66fe373e76943f512367eb20af7f77c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Sun, 31 Oct 2021 15:11:00 -0400 Subject: [PATCH 236/368] Better handle the case where there are multiple potential ring start atoms --- src/Exec_PrepareForLeap.cpp | 170 +++++++++++++++++++++--------------- 1 file changed, 102 insertions(+), 68 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index fc73e3f642..82a55ab6be 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -471,9 +471,9 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector 0 && atm == tgt_atom) { @@ -893,19 +893,20 @@ const // The anomeric reference carbon is the stereocenter farthest from the // anomeric carbon in the ring. int ano_ref_atom = -1; // e.g. C5 - // Out of the potential ring start atoms, see which ones are actually - // part of a ring. Potential ring start atoms only have 2 bonds, - // each one to a carbon. + // Ring oxygen atom int ring_oxygen_atom = -1; // e.g. O5 // This will hold the index of the highest stereocenter, e.g. C5 int highest_stereocenter = -1; // This will hold ring atoms, not including the ring oxygen. - Iarray RA; + std::vector Ring_Atoms; // This will hold carbon chain atoms starting from the anomeric carbon Iarray carbon_chain; - // Will be set true if complete ring can be found - bool ring_complete = false; - std::vector>::const_iterator catoms = ringAtomCarbons.begin(); + + // Out of the potential ring start atoms, see which ones are actually + // part of a ring. Potential ring start atoms only have 2 bonds, + // each one to a carbon. + int ring_atom_idx = -1; + std::vector>::iterator catoms = ringAtomCarbons.begin(); for (Iarray::const_iterator ringat = potentialRingStartAtoms.begin(); ringat != potentialRingStartAtoms.end(); ++ringat, ++catoms) @@ -918,6 +919,9 @@ const if (at != *ringat) Visited[at] = false; Iarray ring_atoms( topIn.Res(rnum).NumAtoms(), -1 ); + // Will be set true if complete ring can be found + bool ring_complete = false; + // Since we have already established that *ringat is an oxygen bonded // to two carbons, just start at the first carbon to see if we can // get to the second carbon. @@ -953,19 +957,27 @@ const // ring_direction = -1; } // mprintf("DEBUG: Potential Ring direction= %i\n", ring_direction); + catoms->first = anomeric_atom; + catoms->second = ring_end_atom; FollowBonds(anomeric_atom, topIn, 0, ring_atoms, ring_end_atom, Visited, ring_complete); if (debug_ > 0) mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); - if (!ring_complete) { - continue; - } else { - ring_oxygen_atom = *ringat; - + if (ring_complete) { + // Able to complete the cycle. + if (ring_atom_idx == -1) + ring_atom_idx = (int)(ringat - potentialRingStartAtoms.begin()); + else { + mprinterr("Error: Multiple potential ring atoms: %s and %s\n", + topIn.ResNameNumAtomNameNum(potentialRingStartAtoms[ring_atom_idx]).c_str(), + topIn.ResNameNumAtomNameNum(*ringat).c_str()); + return Sugar(res.FirstAtom()); + } // Place the ring atoms into an array without the terminating -1 - RA.clear(); + Ring_Atoms.push_back(Iarray()); + Iarray& RA = Ring_Atoms.back(); if (debug_ > 0) mprintf(" :"); // DEBUG for (Iarray::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) { @@ -974,64 +986,86 @@ const RA.push_back( *it ); } if (debug_ > 0) mprintf("\n"); // DEBUG + } + } // END loop over potential ring atoms + if (ring_atom_idx == -1) { + mprinterr("Error: Sugar ring oxygen could not be identified.\n"); + stat = ID_ERR; + return Sugar(res.FirstAtom()); + } - // Find anomeric reference atom. Start at ring end and work down to anomeric atom - for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) - if (atomIsChiral[*arat - topIn.Res(rnum).FirstAtom()]) { - ano_ref_atom = *arat; - break; - } + ring_oxygen_atom = potentialRingStartAtoms[ring_atom_idx]; + anomeric_atom = ringAtomCarbons[ring_atom_idx].first; + ring_end_atom = ringAtomCarbons[ring_atom_idx].second; + Iarray const& RA = Ring_Atoms[ring_atom_idx]; - // Get complete chain starting from the anomeric carbon - carbon_chain = RA; - if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, RA)) { - mprinterr("Error: Could not find remaining chain carbons.\n"); - stat = ID_ERR; - return Sugar(res.FirstAtom()); - } - if (debug_ > 0) { - mprintf("DEBUG: Complete carbon chain (from anomeric carbon):\n"); - for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) - mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - } - // See if there is chain prior to anomeric carbon - Iarray previous_chain; - if (FindRemainingChainCarbons(previous_chain, anomeric_atom, topIn, rnum, RA)) { - mprinterr("Error: Could not find previous chain carbons.\n"); - stat = ID_ERR; - return Sugar(res.FirstAtom()); - } - if (!previous_chain.empty()) { - //if (debug_ > 0) { - mprintf("DEBUG: Previous carbon chain (from anomeric carbon):\n"); - for (Iarray::const_iterator it = previous_chain.begin(); it != previous_chain.end(); ++it) - mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - //} - for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) - previous_chain.push_back( *it ); - carbon_chain = previous_chain; - //if (debug_ > 0) { - mprintf("DEBUG: Complete carbon chain:\n"); - for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) - mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - //} - } - // Get the index of the highest stereocenter + // Find anomeric reference atom. Start at ring end and work down to anomeric atom + for (Iarray::const_iterator arat = RA.end() - 1; arat != RA.begin(); --arat) + if (atomIsChiral[*arat - topIn.Res(rnum).FirstAtom()]) { + ano_ref_atom = *arat; + break; + } + + // Get complete chain starting from the anomeric carbon + carbon_chain = RA; + if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, RA)) { + mprinterr("Error: Could not find remaining chain carbons.\n"); + stat = ID_ERR; + return Sugar(res.FirstAtom()); + } + if (debug_ > 0) { + mprintf("DEBUG: Complete carbon chain (from anomeric carbon):\n"); + for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + } + // See if there is chain prior to anomeric carbon + Iarray previous_chain; + if (FindRemainingChainCarbons(previous_chain, anomeric_atom, topIn, rnum, RA)) { + mprinterr("Error: Could not find previous chain carbons.\n"); + stat = ID_ERR; + return Sugar(res.FirstAtom()); + } + if (!previous_chain.empty()) { + //if (debug_ > 0) { + mprintf("DEBUG: Previous carbon chain (from anomeric carbon):\n"); + for (Iarray::const_iterator it = previous_chain.begin(); it != previous_chain.end(); ++it) + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + //} + for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) + previous_chain.push_back( *it ); + carbon_chain = previous_chain; + //if (debug_ > 0) { + mprintf("DEBUG: Complete carbon chain:\n"); for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) - { - if (atomIsChiral[*it - topIn.Res(rnum).FirstAtom()]) - highest_stereocenter = *it; - } - if (debug_ > 0) - mprintf("DEBUG: Index of highest stereocenter: %s\n", - topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); - } // END ring_complete + mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); + //} + } + // Get the index of the highest stereocenter + for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) + { + if (atomIsChiral[*it - topIn.Res(rnum).FirstAtom()]) + highest_stereocenter = *it; } - if (!ring_complete || RA.empty() || ring_oxygen_atom == -1) { - mprinterr("Error: Sugar ring atoms could not be identified.\n"); + if (debug_ > 0) + mprintf("DEBUG: Index of highest stereocenter: %s\n", + topIn.ResNameNumAtomNameNum(highest_stereocenter).c_str()); + + if (ano_ref_atom == -1) { + mprinterr("Error: Anomeric reference atom could not be identified.\n"); stat = ID_ERR; return Sugar(res.FirstAtom()); } + if (highest_stereocenter == -1) { + mprinterr("Error: Highest stereocenter atom could not be identified.\n"); + stat = ID_ERR; + return Sugar(res.FirstAtom()); + } + +// if (!ring_complete || RA.empty() || ring_oxygen_atom == -1) { +// mprinterr("Error: Sugar ring atoms could not be identified.\n"); +// stat = ID_ERR; +// return Sugar(res.FirstAtom()); +// } if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); return Sugar(ring_oxygen_atom, anomeric_atom, ano_ref_atom, highest_stereocenter, @@ -2806,7 +2840,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (prepare_sugars) { // Set up an AtomMap for this residue to help determine stereocenters. // This is required by the IdSugarRing() function. - myMap_.SetDebug(debug_); + //myMap_.SetDebug(debug_); // DEBUG if (myMap_.Setup(topIn, frameIn)) { mprinterr("Error: Atom map setup failed\n"); return CpptrajState::ERR; From 1b1f9b55d823dabf3e7bd81e254fdeddf39d7f90 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 08:44:45 -0400 Subject: [PATCH 237/368] Handle CIF files with multiple data_ blocks --- src/CIFfile.cpp | 116 +++++++++++++++++++++++++++++++++++----------- src/CIFfile.h | 90 ++++++++++++++++++++++------------- src/cpptrajdepend | 2 +- 3 files changed, 146 insertions(+), 62 deletions(-) diff --git a/src/CIFfile.cpp b/src/CIFfile.cpp index 25543d448d..5cd92896e2 100644 --- a/src/CIFfile.cpp +++ b/src/CIFfile.cpp @@ -1,4 +1,5 @@ #include +#include "ArgList.h" #include "CIFfile.h" #include "CpptrajStdio.h" @@ -191,6 +192,24 @@ void CIFfile::DataBlock::ListData() const { } } +/** Append given DataBlock to this one. */ +void CIFfile::DataBlock::Append(DataBlock const& rhs) { + //mprintf("\tAppending into block '%s'\n", dataHeader_.c_str()); + for (Sarray::const_iterator colname = rhs.columnHeaders_.begin(); + colname != rhs.columnHeaders_.end(); ++colname) + columnHeaders_.push_back( *colname ); + for (std::vector::const_iterator rec = rhs.columnData_.begin(); + rec != rhs.columnData_.end(); ++rec) + { + columnData_.push_back(Sarray()); + for (Sarray::const_iterator col = rec->begin(); + col != rec->end(); ++col) + columnData_.back().push_back( *col ); + } + //mprintf("DEBUG: Post append:\n"); + //ListData(); // DEBUG +} + /** \return the index of the specified column, -1 if not present. */ int CIFfile::DataBlock::ColumnIndex(std::string const& headerIn) const { for (Sarray::const_iterator col = columnHeaders_.begin(); @@ -208,6 +227,37 @@ std::string CIFfile::DataBlock::Data(std::string const& idIn) const { return columnData_[colnum].front(); } +// ----------------------------------------------------------------------------- + +/** CONSTRUCTOR */ +CIFfile::CIFdata::CIFdata(std::string const& nameIn) : dataName_(nameIn) {} + +// CIFfile::GetDataBlock() +CIFfile::DataBlock const& CIFfile::CIFdata::GetDataBlock(std::string const& header) const { + CIF_DataType::const_iterator it = cifdata_.find( header ); + if (it == cifdata_.end()) { + //mprinterr("Error: CIF data block '%s' not found.\n", header.c_str()); + return emptyblock; + } + return it->second; +} + +// CIFfile::AddDataBlock() +int CIFfile::CIFdata::AddDataBlock( DataBlock const& block ) { + if (block.Header().empty()) { + mprinterr("Internal Error: Attempting to add empty CIF data block.\n"); + return 1; + } + CIF_DataType::iterator it = cifdata_.find( block.Header() ); + if (it != cifdata_.end()) { + //mprinterr("Error: Duplicate CIF block found: '%s'\n", block.Header().c_str()); + //return 1; + it->second.Append(block); + } else + cifdata_.insert( std::pair(block.Header(), block) ); + return 0; +} + // ----------------------------------------------------------------------------- /// Used to return empty block for GetDataBlock const CIFfile::DataBlock CIFfile::emptyblock = DataBlock(); @@ -238,10 +288,22 @@ int CIFfile::Read(FileName const& fnameIn, int debugIn) { const char* ptr = file_.Line(); mode currentMode = UNKNOWN; while (ptr != 0) { - /// There are 3 places we can be; a data block, a looped data block, - /// or unknown. - if ( currentMode == UNKNOWN ) { - // Are we at a data block yet? + /// There are 4 places we can be; a data_ statement, a data block + /// or a looped data block corresponding to a previous data_ + /// statement, or unknown. + if (strncmp(ptr, "data_", 5) == 0) { + ArgList dataLine(ptr, " \r\n"); + ArgList dataName(dataLine[0], "_"); + if (dataName.Nargs() < 2) { + mprinterr("Error: malformed 'data_' name.\n"); + mprinterr("%s\n", ptr); + return 1; + } + if (debugIn > 0) mprintf("\tGathering data for '%s'\n", dataName[1].c_str()); + data_.push_back(CIFdata(dataName[1])); + ptr = file_.Line(); + } else if ( currentMode == UNKNOWN ) { + // See if we are at a data block yet if (ptr[0] == '_') currentMode = SERIAL; else if ( strncmp(ptr, "loop_", 5) == 0 ) @@ -258,7 +320,7 @@ int CIFfile::Read(FileName const& fnameIn, int debugIn) { } if (debugIn > 1) serial.ListData(); currentMode = UNKNOWN; - if (AddDataBlock( serial )) return 1; + if (data_.back().AddDataBlock( serial )) return 1; } else if ( currentMode == LOOP ) { DataBlock loop; ptr = file_.Line(); @@ -277,35 +339,33 @@ int CIFfile::Read(FileName const& fnameIn, int debugIn) { } if (debugIn > 1) loop.ListData(); currentMode = UNKNOWN; - if (AddDataBlock( loop )) return 1; + if (data_.back().AddDataBlock( loop )) return 1; } } if (debugIn > 0) mprintf("\tCIF file '%s', %i lines.\n", file_.Filename().full(), file_.LineNumber()); + if (data_.size() > 1) + mprintf("\tCIF file contains %zu data entries.\n", data_.size()); return 0; } -// CIFfile::GetDataBlock() -CIFfile::DataBlock const& CIFfile::GetDataBlock(std::string const& header) const { - CIF_DataType::const_iterator it = cifdata_.find( header ); - if (it == cifdata_.end()) { - //mprinterr("Error: CIF data block '%s' not found.\n", header.c_str()); - return emptyblock; - } - return it->second; -} - -// CIFfile::AddDataBlock() -int CIFfile::AddDataBlock( DataBlock const& block ) { - if (block.Header().empty()) { - mprinterr("Internal Error: Attempting to add empty CIF data block.\n"); - return 1; - } - CIF_DataType::const_iterator it = cifdata_.find( block.Header() ); - if (it != cifdata_.end()) { - mprinterr("Error: Duplicate CIF block found: '%s'\n", block.Header().c_str()); - return 1; +/** Vector with DataBlocks corresponding to given header and value. */ +CIFfile::DataBlock const& CIFfile::GetBlockWithColValue( + std::string const& header, + std::string const& col, + std::string const& value) +const +{ + std::vector::const_iterator> ret; + for (std::vector::const_iterator it = data_.begin(); + it != data_.end(); ++it) + { + DataBlock const& tempBlock = it->GetDataBlock( header ); + if (!tempBlock.empty()) { + std::string data = tempBlock.Data( col ); + if (data == value) + return tempBlock; + } } - cifdata_.insert( std::pair(block.Header(), block) ); - return 0; + return emptyblock; } diff --git a/src/CIFfile.h b/src/CIFfile.h index 8be46d2db2..f1b77276e1 100644 --- a/src/CIFfile.h +++ b/src/CIFfile.h @@ -9,51 +9,75 @@ class CIFfile { typedef std::vector Sarray; public: - /// Used to hold CIF data blocks - class DataBlock { - public: - DataBlock() {} - std::string const& Header() const { return dataHeader_; } - bool empty() const { return dataHeader_.empty(); } - int AddHeader(std::string const&); - int AddSerialDataRecord(const char*, BufferedLine&); - int AddLoopColumn(const char*, BufferedLine&); - int AddLoopData(const char*, BufferedLine&); - void ListData() const; - int ColumnIndex(std::string const&) const; - /// \return Serial data for given ID - std::string Data(std::string const&) const; - // Iterators - typedef std::vector::const_iterator data_it; - data_it begin() const { return columnData_.begin(); } - data_it end() const { return columnData_.end(); } - private: - static int ParseData(std::string const&, std::string&, std::string&); - int GetColumnData(int, BufferedLine&, bool); + /// ----- Used to hold CIF data blocks ------- + class DataBlock { + public: + DataBlock() {} + std::string const& Header() const { return dataHeader_; } + bool empty() const { return dataHeader_.empty(); } + int AddHeader(std::string const&); + int AddSerialDataRecord(const char*, BufferedLine&); + int AddLoopColumn(const char*, BufferedLine&); + int AddLoopData(const char*, BufferedLine&); + void Append(DataBlock const&); + void ListData() const; + int ColumnIndex(std::string const&) const; + /// \return Serial data for given ID + std::string Data(std::string const&) const; + // Iterators + typedef std::vector::const_iterator data_it; + data_it begin() const { return columnData_.begin(); } + data_it end() const { return columnData_.end(); } + private: + static int ParseData(std::string const&, std::string&, std::string&); + int GetColumnData(int, BufferedLine&, bool); - std::string dataHeader_; ///< The data header, e.g. '_atom_site' - Sarray columnHeaders_; ///< Column headers, e.g. 'label_atom_id' - std::vector columnData_; ///< Array of column data, e.g.: - /* - ATOM 1 N N . SER A 1 1 ? -2.559 9.064 0.084 1.00 0.00 ? ? ? ? ? ? 1 SER A N 1 - ATOM 2 C CA . SER A 1 1 ? -3.245 8.118 0.982 1.00 0.00 ? ? ? ? ? ? 1 SER A CA 1 - */ - }; + std::string dataHeader_; ///< The data header, e.g. '_atom_site' + Sarray columnHeaders_; ///< Column headers, e.g. 'label_atom_id' + std::vector columnData_; ///< Array of column data, e.g.: + /* + ATOM 1 N N . SER A 1 1 ? -2.559 9.064 0.084 1.00 0.00 ? ? ? ? ? ? 1 SER A N 1 + ATOM 2 C CA . SER A 1 1 ? -3.245 8.118 0.982 1.00 0.00 ? ? ? ? ? ? 1 SER A CA 1 + */ + }; + /// ----- Used to hold CIF data -------------- + class CIFdata { + public: + CIFdata(std::string const&); + /// Add data block to CIF data + int AddDataBlock(DataBlock const&); + /// Get data block with specified header + DataBlock const& GetDataBlock(std::string const&) const; + private: + typedef std::map CIF_DataType; + /// Map block names to DataBlocks + CIF_DataType cifdata_; + /// data_ name + std::string dataName_; + }; + // ------------------------------------------- CIFfile() {} static bool ID_CIF( CpptrajFile& ); int Read(FileName const&,int); /// \return const reference to the specified data block. - DataBlock const& GetDataBlock(std::string const&) const; FileName const& CIFname() const { return file_.Filename(); } + /// Get data from most recently added data set + DataBlock const& GetDataBlock(std::string const&h) const { return data_.back().GetDataBlock(h); } + + DataBlock const& GetBlockWithColValue(std::string const&, std::string const&, + std::string const&) const; + private: - int AddDataBlock(DataBlock const&); + //int AddDataBlock(DataBlock const&); enum mode { UNKNOWN = 0, SERIAL, LOOP }; BufferedLine file_; - typedef std::map CIF_DataType; - CIF_DataType cifdata_; + //typedef std::map CIF_DataType; + //CIF_DataType cifdata_; static const DataBlock emptyblock; + /// Hold all CIF data + std::vector data_; }; #endif diff --git a/src/cpptrajdepend b/src/cpptrajdepend index f1406a9851..1f51d6c899 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -143,7 +143,7 @@ BoxArgs.o : BoxArgs.cpp ArgList.h Box.h BoxArgs.h CpptrajStdio.h Matrix_3x3.h Pa BufferedFrame.o : BufferedFrame.cpp BufferedFrame.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h Parallel.h TextFormat.h BufferedLine.o : BufferedLine.cpp BufferedLine.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h Parallel.h ByteRoutines.o : ByteRoutines.cpp -CIFfile.o : CIFfile.cpp Atom.h BufferedLine.h CIFfile.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h NameType.h Parallel.h SymbolExporting.h +CIFfile.o : CIFfile.cpp ArgList.h Atom.h BufferedLine.h CIFfile.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h NameType.h Parallel.h SymbolExporting.h CharMask.o : CharMask.cpp Atom.h CharMask.h CpptrajStdio.h MaskToken.h Molecule.h NameType.h Residue.h Segment.h SymbolExporting.h Unit.h CharmmParamFile.o : CharmmParamFile.cpp ArgList.h AtomType.h BufferedLine.h CharmmParamFile.h Constants.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h StringRoutines.h TypeNameHolder.h Chirality.o : Chirality.cpp Atom.h AtomMask.h AtomType.h Box.h Chirality.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TorsionRoutines.h TypeNameHolder.h Unit.h Vec3.h From bcf02e27eefb0017813b3aff97ec94d799c70518 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:23:17 -0400 Subject: [PATCH 238/368] Add CSV with glycam codes and PDB names --- dat/GlycamCodes.csv | 68 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 dat/GlycamCodes.csv diff --git a/dat/GlycamCodes.csv b/dat/GlycamCodes.csv new file mode 100644 index 0000000000..c1eb4dcf5c --- /dev/null +++ b/dat/GlycamCodes.csv @@ -0,0 +1,68 @@ +Abbreviation,Name,PDB,Glycam +Ara,Arabinose,64K ARA SEJ ARB BXY AHR BXX FUB,A +Lyx,Lyxose,LDY Z4W,D +Rib,Ribose,YYM RIP 0MK RIB Z6J BDR 32O,R +Xyl,Xylose,XYS HSY HSZ XYP LXC XYZ,X +All,Allose,AFD Z2D ALL WOO VDV VDS,N +Alt,Altrose,SHD Z6H 3MK,E +Gal,Galactose,GLA GXL GAL GIV GZL,L +Glc,Glucose,GLC BGC Z8T,G +Gul,Gulose,4GL GUP GL0 Z8H,K +Ido,Idose,ZCD Z0F 4N2,. +Man,Mannose,MAN BMA,M +Tal,Talose,SDY ZEE A5C,T +Fru,Fructose,BDF Z9N FRU LFR,C +Psi,Psicose,PSV SF6 TTV SF9,P +Sor,Sorbose,SOE UEA,B +Tag,Tagatose,T6T,J +Fuc,Fucose,FCA FUC FCB FUL GYE,F +Qui,Quinovose,G6D YYK,Q +Rha,Rhamnose,XXR RAM RM4,H +GalA,Galacturonic Acid,ADA GTR,O +GlcA,Glucuronic Acid,GCU BDP,Z +IdoA,Iduronic Acid,IDR IDS,U +GalNAc,N-Acetyl Galactosamine,A2G YYQ NGA,V +GlcNAc,N-Acetyl Glucosamine,NDG NGZ NAG,Y +ManNAc,N-Acetyl Mannosamine,BM3 BM7,W +Neu5Ac,N-Acetyl Neuraminic Acid,SIA SLB,S +GlcN,Glucosamine,GCS,. +QuiNAc,N-Acetyl Quinovosamine,.,. +Oli,Olivose,OLI,. +ManN,Mannosamine,.,. +ManA,Mannuronic Acid,MAV BEM,. +RhaNAc,N-Acetyl Rhamnosamine,.,. +Tyv,Tyvelose,TYV,. +GalN,Galactosamine,.,. +GulNAc,N-Acetyl Gulosamine,.,. +GulN,Gulosamine,.,. +GulA,Guluronic Acid,LGU,. +AltNAc,N-Acetyl Altrosamine,.,. +AltN,Altrosamine,.,. +AltA,Altruronic Acid,.,. +6dAlt,6-Deoxy Altrose,.,. +AllNAc,N-Acetyl Allosamine,.,. +AllN,Allosamine,.,. +AllA,Alluronic Acid,.,. +TalNAc,N-Acetyl Talosamine,.,. +TalN,Talosamine,.,. +TalA,Taluronic Acid,.,. +6dTal,6-Deoxy Talose,.,. +IdoNAc,N-Acetyl Idosamine,.,. +IdoN,Idosamine,.,. +FucNAc,N-Acetyl Fucosamine,.,. +Abe,Abequose,ABE,. +Par,Paratose,PAR,. +Dig,Digitoxose,DIG,. +Col,Colitose,COL,. +Bac,Bacillosamine,BAC,. +Api,Apicose,API,. +Dha,3-Deoxy Lyxo-Heptulosaric Acid,DHA,. +Kdn,Keto-Deoxy Nonulonic Acid,KDN,. +Kdo,Keto-Deoxy Octulonic Acid,KDO,. +Neu,Neuraminic Acid,NEU,. +Neu5Gc,N-Glycolyl Neuraminic Acid,.,. +Mur,Muramic Acid,MUR,. +MurNAc,N-Acetyl Muramic Acid,.,. +MurNGc,N-Glycolyl Muramic Acid,.,. +LDManHep,L-Glycero-D-Manno Heptose,GMH,. +DDManHep,D-Glycero-D-Manno-Heptose,.,. From 2e9f10538cc9b7acdbc5c60d623602d71515e340 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:28:47 -0400 Subject: [PATCH 239/368] Change ordering to match glycam table and csv file. Remove wrong names --- dat/Carbohydrate_PDB_Glycam_Names.txt | 40 ++++++++++++--------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 5ee2784aeb..cba7eeac77 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -1,33 +1,29 @@ # This file contains the mapping from common PDB names to Glycam residue codes. # Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB # Last updated 09/01/21 10:01:41 +"Arabinose" A ARA,AHR,ARB,AXR,BXY +"Lyxose" D LYX +"Ribose" R RIB +"Xylose" X XYL,XYS,LXC,XYP +"Allose" N ALL,WOO +"Altrose" E ALT +"Galactose" L GAL,GLA,GXL "Glucose" G GLC,MAL,BGC,GU4 -"N-Acetyl Glucosamine" Y NAG,NDG -"Glucosamine" Y GCS -"Glucuronic Acid" Z GCU,BDP,GCV -"Quinovose" Q QUI +"Gulose" K GUL,GUP,GL0,Z8H "Mannose" M MAN,BMA +"Talose" T TAL,SDY,ZEE +"Fructose" C FRU,YYJ +"Psicose" P PSI,PSV +"Sorbose" B SOR +"Tagatose" J TAG +"Fucose" F FUC,FUL,MXY,MXZ +"Quinovose" Q QUI "Rhamnose" H RAM -"Tyvelose" T TYV -"Arabinose" A ARA,AHR,ARB -"Galactose" L GAL,GLA,GXL -"N-Acetyl Galactosamine" V NGA,A2G,NG6,ASG "Galacturonic Acid" O ADA -"Gulose" K GUL,GUP,GL0 -"Altrose" E ALT -"Allose" N ALL,WOO -"Talose" T TAL +"Glucuronic Acid" Z GCU,BDP,GCV "Iduronic Acid" U IDS,IDR -"Fucose" F FUC,FUL,MXY,MXZ -"Lyxose" D LYX -"Abequose" A ABE -"Xylose" X XYL,XYS,LXC,XYP -"Ribose" R RIB -"Bacillosamine" B BAC -"Fructose" C FRU,YYJ -"Tagatose" J TAG -"Sorbose" B SOR -"Psicose" P PSI,PSV +"N-Acetyl Galactosamine" V NGA,A2G,NG6,ASG +"N-Acetyl Glucosamine" Y NAG,NDG "N-Acetyl Neuraminic Acid" S SIA # PDB to glycam atom name maps From b04131e739b0fa4b9d4a6e33aa6081d0151111e8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:29:21 -0400 Subject: [PATCH 240/368] Change origin, no longer from website --- devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp index 7dcc3fc59b..e65e189f72 100644 --- a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -23,7 +23,8 @@ int main(int argc, char** argv) { return 1; } fprintf(outfile,"# This file contains the mapping from common PDB names to Glycam residue codes.\n"); - fprintf(outfile,"# Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB\n"); + //fprintf(outfile,"# Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB\n"); + fprintf(outfile,"# Information obtained from mining the PDB chemical database (components.cif).\n"); fprintf(outfile,"# Last updated %s\n", TimeString().c_str()); char buffer[1024]; @@ -42,6 +43,7 @@ int main(int argc, char** argv) { err = 1; break; } + // Header is: Abbreviation,Name,PDB,Glycam if (argline[0] == "Abbreviation") continue; // 0 1 2 3 // infile: Abbreviation Name PDB Glycam From 7b3157135dc3f28a49376fb80007cb1165fb5de4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:29:34 -0400 Subject: [PATCH 241/368] Add sulfated residue --- dat/GlycamCodes.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/GlycamCodes.csv b/dat/GlycamCodes.csv index c1eb4dcf5c..69e4bba96c 100644 --- a/dat/GlycamCodes.csv +++ b/dat/GlycamCodes.csv @@ -6,7 +6,7 @@ Xyl,Xylose,XYS HSY HSZ XYP LXC XYZ,X All,Allose,AFD Z2D ALL WOO VDV VDS,N Alt,Altrose,SHD Z6H 3MK,E Gal,Galactose,GLA GXL GAL GIV GZL,L -Glc,Glucose,GLC BGC Z8T,G +Glc,Glucose,GLC BGC Z8T GU4,G Gul,Gulose,4GL GUP GL0 Z8H,K Ido,Idose,ZCD Z0F 4N2,. Man,Mannose,MAN BMA,M From 9fa3dc81c53d75467ee8e50aa5b6f3f47705f535 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:29:52 -0400 Subject: [PATCH 242/368] Convert to unix line endings --- dat/GlycamCodes.csv | 136 ++++++++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/dat/GlycamCodes.csv b/dat/GlycamCodes.csv index 69e4bba96c..db408241f8 100644 --- a/dat/GlycamCodes.csv +++ b/dat/GlycamCodes.csv @@ -1,68 +1,68 @@ -Abbreviation,Name,PDB,Glycam -Ara,Arabinose,64K ARA SEJ ARB BXY AHR BXX FUB,A -Lyx,Lyxose,LDY Z4W,D -Rib,Ribose,YYM RIP 0MK RIB Z6J BDR 32O,R -Xyl,Xylose,XYS HSY HSZ XYP LXC XYZ,X -All,Allose,AFD Z2D ALL WOO VDV VDS,N -Alt,Altrose,SHD Z6H 3MK,E -Gal,Galactose,GLA GXL GAL GIV GZL,L -Glc,Glucose,GLC BGC Z8T GU4,G -Gul,Gulose,4GL GUP GL0 Z8H,K -Ido,Idose,ZCD Z0F 4N2,. -Man,Mannose,MAN BMA,M -Tal,Talose,SDY ZEE A5C,T -Fru,Fructose,BDF Z9N FRU LFR,C -Psi,Psicose,PSV SF6 TTV SF9,P -Sor,Sorbose,SOE UEA,B -Tag,Tagatose,T6T,J -Fuc,Fucose,FCA FUC FCB FUL GYE,F -Qui,Quinovose,G6D YYK,Q -Rha,Rhamnose,XXR RAM RM4,H -GalA,Galacturonic Acid,ADA GTR,O -GlcA,Glucuronic Acid,GCU BDP,Z -IdoA,Iduronic Acid,IDR IDS,U -GalNAc,N-Acetyl Galactosamine,A2G YYQ NGA,V -GlcNAc,N-Acetyl Glucosamine,NDG NGZ NAG,Y -ManNAc,N-Acetyl Mannosamine,BM3 BM7,W -Neu5Ac,N-Acetyl Neuraminic Acid,SIA SLB,S -GlcN,Glucosamine,GCS,. -QuiNAc,N-Acetyl Quinovosamine,.,. -Oli,Olivose,OLI,. -ManN,Mannosamine,.,. -ManA,Mannuronic Acid,MAV BEM,. -RhaNAc,N-Acetyl Rhamnosamine,.,. -Tyv,Tyvelose,TYV,. -GalN,Galactosamine,.,. -GulNAc,N-Acetyl Gulosamine,.,. -GulN,Gulosamine,.,. -GulA,Guluronic Acid,LGU,. -AltNAc,N-Acetyl Altrosamine,.,. -AltN,Altrosamine,.,. -AltA,Altruronic Acid,.,. -6dAlt,6-Deoxy Altrose,.,. -AllNAc,N-Acetyl Allosamine,.,. -AllN,Allosamine,.,. -AllA,Alluronic Acid,.,. -TalNAc,N-Acetyl Talosamine,.,. -TalN,Talosamine,.,. -TalA,Taluronic Acid,.,. -6dTal,6-Deoxy Talose,.,. -IdoNAc,N-Acetyl Idosamine,.,. -IdoN,Idosamine,.,. -FucNAc,N-Acetyl Fucosamine,.,. -Abe,Abequose,ABE,. -Par,Paratose,PAR,. -Dig,Digitoxose,DIG,. -Col,Colitose,COL,. -Bac,Bacillosamine,BAC,. -Api,Apicose,API,. -Dha,3-Deoxy Lyxo-Heptulosaric Acid,DHA,. -Kdn,Keto-Deoxy Nonulonic Acid,KDN,. -Kdo,Keto-Deoxy Octulonic Acid,KDO,. -Neu,Neuraminic Acid,NEU,. -Neu5Gc,N-Glycolyl Neuraminic Acid,.,. -Mur,Muramic Acid,MUR,. -MurNAc,N-Acetyl Muramic Acid,.,. -MurNGc,N-Glycolyl Muramic Acid,.,. -LDManHep,L-Glycero-D-Manno Heptose,GMH,. -DDManHep,D-Glycero-D-Manno-Heptose,.,. +Abbreviation,Name,PDB,Glycam +Ara,Arabinose,64K ARA SEJ ARB BXY AHR BXX FUB,A +Lyx,Lyxose,LDY Z4W,D +Rib,Ribose,YYM RIP 0MK RIB Z6J BDR 32O,R +Xyl,Xylose,XYS HSY HSZ XYP LXC XYZ,X +All,Allose,AFD Z2D ALL WOO VDV VDS,N +Alt,Altrose,SHD Z6H 3MK,E +Gal,Galactose,GLA GXL GAL GIV GZL,L +Glc,Glucose,GLC BGC Z8T GU4,G +Gul,Gulose,4GL GUP GL0 Z8H,K +Ido,Idose,ZCD Z0F 4N2,. +Man,Mannose,MAN BMA,M +Tal,Talose,SDY ZEE A5C,T +Fru,Fructose,BDF Z9N FRU LFR,C +Psi,Psicose,PSV SF6 TTV SF9,P +Sor,Sorbose,SOE UEA,B +Tag,Tagatose,T6T,J +Fuc,Fucose,FCA FUC FCB FUL GYE,F +Qui,Quinovose,G6D YYK,Q +Rha,Rhamnose,XXR RAM RM4,H +GalA,Galacturonic Acid,ADA GTR,O +GlcA,Glucuronic Acid,GCU BDP,Z +IdoA,Iduronic Acid,IDR IDS,U +GalNAc,N-Acetyl Galactosamine,A2G YYQ NGA,V +GlcNAc,N-Acetyl Glucosamine,NDG NGZ NAG,Y +ManNAc,N-Acetyl Mannosamine,BM3 BM7,W +Neu5Ac,N-Acetyl Neuraminic Acid,SIA SLB,S +GlcN,Glucosamine,GCS,. +QuiNAc,N-Acetyl Quinovosamine,.,. +Oli,Olivose,OLI,. +ManN,Mannosamine,.,. +ManA,Mannuronic Acid,MAV BEM,. +RhaNAc,N-Acetyl Rhamnosamine,.,. +Tyv,Tyvelose,TYV,. +GalN,Galactosamine,.,. +GulNAc,N-Acetyl Gulosamine,.,. +GulN,Gulosamine,.,. +GulA,Guluronic Acid,LGU,. +AltNAc,N-Acetyl Altrosamine,.,. +AltN,Altrosamine,.,. +AltA,Altruronic Acid,.,. +6dAlt,6-Deoxy Altrose,.,. +AllNAc,N-Acetyl Allosamine,.,. +AllN,Allosamine,.,. +AllA,Alluronic Acid,.,. +TalNAc,N-Acetyl Talosamine,.,. +TalN,Talosamine,.,. +TalA,Taluronic Acid,.,. +6dTal,6-Deoxy Talose,.,. +IdoNAc,N-Acetyl Idosamine,.,. +IdoN,Idosamine,.,. +FucNAc,N-Acetyl Fucosamine,.,. +Abe,Abequose,ABE,. +Par,Paratose,PAR,. +Dig,Digitoxose,DIG,. +Col,Colitose,COL,. +Bac,Bacillosamine,BAC,. +Api,Apicose,API,. +Dha,3-Deoxy Lyxo-Heptulosaric Acid,DHA,. +Kdn,Keto-Deoxy Nonulonic Acid,KDN,. +Kdo,Keto-Deoxy Octulonic Acid,KDO,. +Neu,Neuraminic Acid,NEU,. +Neu5Gc,N-Glycolyl Neuraminic Acid,.,. +Mur,Muramic Acid,MUR,. +MurNAc,N-Acetyl Muramic Acid,.,. +MurNGc,N-Glycolyl Muramic Acid,.,. +LDManHep,L-Glycero-D-Manno Heptose,GMH,. +DDManHep,D-Glycero-D-Manno-Heptose,.,. From b8f1877770b2d5daaf155623bb4f2f9c68b31ccf Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:38:45 -0400 Subject: [PATCH 243/368] Add substituted residue names --- dat/GlycamCodes.csv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dat/GlycamCodes.csv b/dat/GlycamCodes.csv index db408241f8..bbe0dd7b3d 100644 --- a/dat/GlycamCodes.csv +++ b/dat/GlycamCodes.csv @@ -1,5 +1,5 @@ Abbreviation,Name,PDB,Glycam -Ara,Arabinose,64K ARA SEJ ARB BXY AHR BXX FUB,A +Ara,Arabinose,64K ARA SEJ ARB BXY AHR BXX FUB AXR,A Lyx,Lyxose,LDY Z4W,D Rib,Ribose,YYM RIP 0MK RIB Z6J BDR 32O,R Xyl,Xylose,XYS HSY HSZ XYP LXC XYZ,X @@ -11,17 +11,17 @@ Gul,Gulose,4GL GUP GL0 Z8H,K Ido,Idose,ZCD Z0F 4N2,. Man,Mannose,MAN BMA,M Tal,Talose,SDY ZEE A5C,T -Fru,Fructose,BDF Z9N FRU LFR,C +Fru,Fructose,BDF Z9N FRU LFR YYJ,C Psi,Psicose,PSV SF6 TTV SF9,P Sor,Sorbose,SOE UEA,B Tag,Tagatose,T6T,J -Fuc,Fucose,FCA FUC FCB FUL GYE,F +Fuc,Fucose,FCA FUC FCB FUL GYE MXY MXZ,F Qui,Quinovose,G6D YYK,Q Rha,Rhamnose,XXR RAM RM4,H GalA,Galacturonic Acid,ADA GTR,O -GlcA,Glucuronic Acid,GCU BDP,Z +GlcA,Glucuronic Acid,GCU BDP GCV,Z IdoA,Iduronic Acid,IDR IDS,U -GalNAc,N-Acetyl Galactosamine,A2G YYQ NGA,V +GalNAc,N-Acetyl Galactosamine,A2G YYQ NGA NG6 ASG,V GlcNAc,N-Acetyl Glucosamine,NDG NGZ NAG,Y ManNAc,N-Acetyl Mannosamine,BM3 BM7,W Neu5Ac,N-Acetyl Neuraminic Acid,SIA SLB,S From 178e20ddd9765eb238c081f70ba8dab0b86a1eb6 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:39:04 -0400 Subject: [PATCH 244/368] Add Rhamnose beta map --- devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp index e65e189f72..e4488019d6 100644 --- a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -70,6 +70,7 @@ int main(int argc, char** argv) { fprintf(outfile, "\n# PDB to glycam atom name maps\n"); fprintf(outfile, "V,W,Y C7,C2N O7,O2N C8,CME\n"); fprintf(outfile, "S C10,C5N O10,O5N C11,CME\n"); + fprintf(outfile, "H C6,C6M,B\n"); // Add linkage res name map section manually fprintf(outfile, "\n# PDB to glycame linkage residue name maps\n"); From 33a177cb44f74fd02973a05e15df173d5a7bb31f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 10:41:39 -0400 Subject: [PATCH 245/368] Fix typos --- devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp index e4488019d6..4703160b17 100644 --- a/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp +++ b/devtools/converters/glycam.csv.to.dat/glycam.csv.to.dat.cpp @@ -50,7 +50,7 @@ int main(int argc, char** argv) { if (argline[2] == ".") { printf("\"%s\" has no PDB name(s), skipping.\n", argline[1].c_str()); } else if (argline[3] == ".") { - printf("\"%s\" has no Gycam name, skipping.\n", argline[1].c_str()); + printf("\"%s\" has no Glycam name, skipping.\n", argline[1].c_str()); } else { // outfile: Name Glycam PDB(commas) std::string name_with_commas = "\"" + argline[1] + "\""; @@ -73,7 +73,7 @@ int main(int argc, char** argv) { fprintf(outfile, "H C6,C6M,B\n"); // Add linkage res name map section manually - fprintf(outfile, "\n# PDB to glycame linkage residue name maps\n"); + fprintf(outfile, "\n# PDB to glycam linkage residue name maps\n"); fprintf(outfile, "SER OLS\n"); fprintf(outfile, "THR OLT\n"); fprintf(outfile, "HYP OLP\n"); From 9209b41bec8423a44f238c410e23876c04c2c64a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 13:04:16 -0400 Subject: [PATCH 246/368] Update with the latest from components.cif. Remove a lot of wrong res names. --- dat/Carbohydrate_PDB_Glycam_Names.txt | 49 ++++++++++++++------------- src/Exec_PrepareForLeap.cpp | 19 ++++++----- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index cba7eeac77..d31f08d0a6 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -1,30 +1,31 @@ # This file contains the mapping from common PDB names to Glycam residue codes. -# Information largely obtained from http://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/#PDB -# Last updated 09/01/21 10:01:41 -"Arabinose" A ARA,AHR,ARB,AXR,BXY -"Lyxose" D LYX -"Ribose" R RIB -"Xylose" X XYL,XYS,LXC,XYP -"Allose" N ALL,WOO -"Altrose" E ALT -"Galactose" L GAL,GLA,GXL -"Glucose" G GLC,MAL,BGC,GU4 -"Gulose" K GUL,GUP,GL0,Z8H +# Information obtained from mining the PDB chemical database (components.cif). +# Last updated 11/02/21 10:40:19 +"Arabinose" A 64K,ARA,SEJ,ARB,BXY,AHR,BXX,FUB,AXR +"Lyxose" D LDY,Z4W +"Ribose" R YYM,RIP,0MK,RIB,Z6J,BDR,32O +"Xylose" X XYS,HSY,HSZ,XYP,LXC,XYZ +"Allose" N AFD,Z2D,ALL,WOO,VDV,VDS +"Altrose" E SHD,Z6H,3MK +"Galactose" L GLA,GXL,GAL,GIV,GZL +"Glucose" G GLC,BGC,Z8T,GU4 +"Gulose" K 4GL,GUP,GL0,Z8H "Mannose" M MAN,BMA -"Talose" T TAL,SDY,ZEE -"Fructose" C FRU,YYJ -"Psicose" P PSI,PSV -"Sorbose" B SOR -"Tagatose" J TAG -"Fucose" F FUC,FUL,MXY,MXZ -"Quinovose" Q QUI -"Rhamnose" H RAM -"Galacturonic Acid" O ADA +"Talose" T SDY,ZEE,A5C +"Fructose" C BDF,Z9N,FRU,LFR,YYJ +"Psicose" P PSV,SF6,TTV,SF9 +"Sorbose" B SOE,UEA +"Tagatose" J T6T +"Fucose" F FCA,FUC,FCB,FUL,GYE,MXY,MXZ +"Quinovose" Q G6D,YYK +"Rhamnose" H XXR,RAM,RM4 +"Galacturonic Acid" O ADA,GTR "Glucuronic Acid" Z GCU,BDP,GCV -"Iduronic Acid" U IDS,IDR -"N-Acetyl Galactosamine" V NGA,A2G,NG6,ASG -"N-Acetyl Glucosamine" Y NAG,NDG -"N-Acetyl Neuraminic Acid" S SIA +"Iduronic Acid" U IDR,IDS +"N-Acetyl Galactosamine" V A2G,YYQ,NGA,NG6,ASG +"N-Acetyl Glucosamine" Y NDG,NGZ,NAG +"N-Acetyl Mannosamine" W BM3,BM7 +"N-Acetyl Neuraminic Acid" S SIA,SLB # PDB to glycam atom name maps V,W,Y C7,C2N O7,O2N C8,CME diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 82a55ab6be..d799d5f716 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -965,6 +965,8 @@ const if (debug_ > 0) mprintf("DEBUG: Potential ring start atom %s, Ring complete = %i", topIn.ResNameNumAtomNameNum(*ringat).c_str(), (int)ring_complete); + // Create empty array for ring atoms + Ring_Atoms.push_back(Iarray()); if (ring_complete) { // Able to complete the cycle. if (ring_atom_idx == -1) @@ -976,7 +978,6 @@ const return Sugar(res.FirstAtom()); } // Place the ring atoms into an array without the terminating -1 - Ring_Atoms.push_back(Iarray()); Iarray& RA = Ring_Atoms.back(); if (debug_ > 0) mprintf(" :"); // DEBUG for (Iarray::const_iterator it = ring_atoms.begin(); it != ring_atoms.end(); ++it) @@ -985,8 +986,8 @@ const if (*it == -1) break; RA.push_back( *it ); } - if (debug_ > 0) mprintf("\n"); // DEBUG } + if (debug_ > 0) mprintf("\n"); // DEBUG } // END loop over potential ring atoms if (ring_atom_idx == -1) { mprinterr("Error: Sugar ring oxygen could not be identified.\n"); @@ -2868,14 +2869,16 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprinterr("Error: Sugar structure modification failed.\n"); return CpptrajState::ERR; } + // NOTE: If IdSugarRing() is to be used after this point, the map + // will need to be recreated. // Since FixSugarsStructure() can re-order atoms, need // to recreate the map. - myMap_.ClearMap(); - if (myMap_.Setup(topIn, frameIn)) { - mprinterr("Error: Atom map second setup failed\n"); - return CpptrajState::ERR; - } - myMap_.DetermineAtomIDs(); + //myMap_.ClearMap(); + //if (myMap_.Setup(topIn, frameIn)) { + // mprinterr("Error: Atom map second setup failed\n"); + // return CpptrajState::ERR; + //} + //myMap_.DetermineAtomIDs(); } // Each residue starts out unknown. From 96af8d298b299d90aaf5324b8e49165c3a9b41c9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 13:16:40 -0400 Subject: [PATCH 247/368] Cleanup; remove old code, add some comments --- src/Exec_PrepareForLeap.cpp | 196 ++---------------------------------- 1 file changed, 10 insertions(+), 186 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index d799d5f716..6e273e8f3d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -13,7 +13,7 @@ #include // tolower #include // sort -// ----- Sugar Class ----------------------------------------------------------- +// ===== Sugar Class =========================================================== /** CONSTRUCTOR - Incomplete setup; set anomeric atom as residue first atom * so that ResNum() works. */ @@ -84,6 +84,7 @@ unsigned int Exec_PrepareForLeap::Sugar::NumRingAtoms() const { return ring_atoms_.size() + 1; } +/// \return what oldidx should be according to atomMap inline static int find_new_idx(int oldidx, std::vector const& atomMap, int at0, int at1) { for (int newidx = at0; newidx != at1; newidx++) if (atomMap[newidx] == oldidx) @@ -106,7 +107,7 @@ void Exec_PrepareForLeap::Sugar::RemapIndices(Iarray const& atomMap, int at0, in *it = find_new_idx(*it, atomMap, at0, at1); //atomMap[*it]; } -// ----------------------------------------------------------------------------- +// ============================================================================= /** CONSTRUCTOR */ Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), @@ -357,61 +358,7 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) return 0; } -/** Determine torsion around non-ring stereocenter. */ -/* -int Exec_PrepareForLeap::CalcStereocenterTorsion(double& torsion, - int idx, - Topology const& topIn, Frame const& frameIn) -const -{ - // Assume part of a carbon chain, e.g. - // X - // | - // C0 - C - C1 - // | - // Y - // where X is heavy atom and Y may or may not exist if it is hydrogen. - // Try to order like so: - // C0 - C - C1 - X - int i0 = -1; - int i1 = -1; - int ix = -1; - //int iy = -1; - - for (Atom::bond_iterator bat = topIn[idx].bondbegin(); bat != topIn[idx].bondend(); ++bat) - { - if ( topIn[*bat].Element() == Atom::CARBON ) { - if (i0 == -1) { - i0 = *bat; - } else if (i1 == -1) { - i1 = *bat; - } else { - mprinterr("Error: Too many carbons around stereocenter %s\n", - topIn.ResNameNumAtomNameNum(idx).c_str()); - return 1; - } - } else { - if (ix == -1) { - ix = *bat; - } else { - if ( topIn[*bat].Element() > topIn[ix].Element() ) { - //iy = ix; - ix = *bat; - } //else - //iy = ix; - } - } - } - if (i0 == -1) {mprinterr("Error: CalcStereocenterTorsion: Lower C is empty.\n"); return 1;} - if (i1 == -1) {mprinterr("Error: CalcStereocenterTorsion: Higher C is empty.\n"); return 1;} - if (ix == -1) {mprinterr("Error: CalcStereocenterTorsion: X substituent is empty.\n"); return 1;} - torsion = Torsion(frameIn.XYZ(i0), frameIn.XYZ(idx), frameIn.XYZ(i1), frameIn.XYZ(ix)); - mprintf("\t Stereocenter torsion: %s-%s-%s-%s = %f\n", - *(topIn[i0].Name()), *(topIn[idx].Name()), *(topIn[i1].Name()), *(topIn[ix].Name()), - torsion * Constants::RADDEG); - return 0; -}*/ - +// ----------------------------------------------------------------------------- /// Recursive function for finding and recording all carbons static void Find_Carbons(int atm, Topology const& topIn, std::vector& Visited, std::vector& remainingChainCarbons) @@ -493,79 +440,7 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector 0) - mprintf("\tSugar %s anomeric carbon is already bonded to another residue, skipping.\n", - topIn.TruncResNameOnumId(sugar.ResNum()).c_str()); - return 0; - } - } - - // residue first atom to residue first atom cutoff^2 - const double rescut2 = 64.0; - // bond cutoff offset - const double offset = 0.2; - - Atom::AtomicElementType a1Elt = topIn[c_beg].Element(); // Should always be C - if (debug_ > 0) - mprintf("DEBUG: Anomeric ring carbon: %s\n", topIn.ResNameNumAtomNameNum(c_beg).c_str()); - // Loop over other residues - for (int rnum2 = 0; rnum2 < topIn.Nres(); rnum2++) - { - if (rnum2 != rnum1) { - Residue const& res2 = topIn.Res(rnum2); - // Ignore solvent residues - if (res2.Name() != solventResName_) { - int at1 = res1.FirstAtom(); - int at2 = res2.FirstAtom(); - // Initial residue-residue distance based on first atoms in each residue - double dist2_1 = DIST2_NoImage( frameIn.XYZ(at1), frameIn.XYZ(at2) ); - if (dist2_1 < rescut2) { - if (debug_ > 1) - mprintf("DEBUG: %s to %s = %f\n", - topIn.TruncResNameOnumId(rnum1).c_str(), topIn.TruncResNameOnumId(rnum2).c_str(), - sqrt(dist2_1)); - // Do the rest of the atoms in res2 to the anomeric carbon - for (; at2 != res2.LastAtom(); ++at2) - { - if (!topIn[c_beg].IsBondedTo(at2)) { - double D2 = DIST2_NoImage( frameIn.XYZ(c_beg), frameIn.XYZ(at2) ); - Atom::AtomicElementType a2Elt = topIn[at2].Element(); - double cutoff2 = Atom::GetBondLength(a1Elt, a2Elt) + offset; - cutoff2 *= cutoff2; - if (D2 < cutoff2) { - mprintf("\t Adding bond between %s and %s\n", - topIn.ResNameNumAtomNameNum(c_beg).c_str(), - topIn.ResNameNumAtomNameNum(at2).c_str()); - topIn.AddBond(c_beg, at2); - } - } - } // END loop over res2 atoms - } // END res1-res2 distance cutoff - } // END res2 is not solvent - } // END res1 != res2 - } // END res2 loop over other residues - - return 0; -}*/ - +// ----------------------------------------------- /** Determine torsion around the anomeric carbon. */ int Exec_PrepareForLeap::CalcAnomericTorsion(double& torsion, int anomeric_atom, int ring_oxygen_atom, @@ -797,6 +672,7 @@ const return 0; } +// ----------------------------------------------- /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, IdSugarRingStatType& stat) @@ -1715,15 +1591,7 @@ const mprinterr("Internal Error: Sulfate index is negative.\n"); return 1; } - /*// Select S and other 3 O atoms - Iarray selected(1, so3_idx); - for (Atom::bond_iterator bat = topIn[so3_idx].bondbegin(); - bat != topIn[so3_idx].bondend(); ++bat) - { - if (*bat != o_idx) { - selected.push_back( *bat ); - } - }*/ + // Change the atom names std::string newResName; if (groupType == G_SO3) { @@ -1807,20 +1675,7 @@ const if (selected.size() > 1) ChangeAtomName(topIn.SetAtom(selected[1]), "HO1"); } -/* // Ensure the oxygen is itself terminal (no other bonds or only H) - if (topIn[o1_atom].Nbonds() > 1) { - for (Atom::bond_iterator bat = topIn[o1_atom].bondbegin(); - bat != topIn[o1_atom].bondend(); ++bat) - { - if (topIn[*bat].Element() == Atom::HYDROGEN) - selected.push_back( *bat ); - else if (*bat != anomericAtom) { - // Bonded to something other than H. - return 0; - } - } - } -*/ + // If terminal group is unrecognized, this could just be a regular O1 linkage if (selected.empty()) { if (debug_ > 0) @@ -1948,7 +1803,6 @@ const return 0; } - /** Prepare sugars for leap. */ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, std::vector const& Sugars, @@ -1966,28 +1820,7 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); else { CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); - // Get sugar residue numbers - //Iarray sugarResNums = topIn.ResnumsSelectedBy( sugarMask ); - // Try to identify sugar rings - //std::vector Sugars; - //Sugars.reserve( sugarResNums.size() ); - //for (Iarray::const_iterator rnum = sugarResNums.begin(); - // rnum != sugarResNums.end(); ++rnum) - //{ - // IdSugarRingStatType stat; - // Sugars.push_back( IdSugarRing(*rnum, topIn, stat) ); - // if (stat == ID_ERR) { - // if (errorsAreFatal_) { - // mprinterr("Error: Problem identifying sugar ring for %s\n", - // topIn.TruncResNameOnumId(*rnum).c_str()); - // return 1; - // } else - // mprintf("Warning: Problem identifying sugar ring for %s\n", - // topIn.TruncResNameOnumId(*rnum).c_str()); - // } else if (stat == ID_MISSING_O) - // resStat_[*rnum] = SUGAR_MISSING_RING_O; - // Sugars.back().PrintInfo( topIn ); - //} + for (std::vector::const_iterator sugar = Sugars.begin(); sugar != Sugars.end(); ++sugar) { @@ -2000,7 +1833,6 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, for (std::vector::const_iterator sugar = Sugars.begin(); sugar != Sugars.end(); ++sugar) { - //Residue const& Res = coords.Top().Res(*rnum); // See if we recognize this sugar. if (IdentifySugar(*sugar, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) { @@ -2024,6 +1856,7 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, return 0; } +// ----------------------------------------------------------------------------- /** Determine where molecules end based on connectivity. */ int Exec_PrepareForLeap::FindTerByBonds(Topology& topIn, CharMask const& maskIn) const @@ -2808,17 +2641,12 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // Get sugar mask or default sugar mask - //AtomMask sugarMask; std::string sugarmaskstr = argIn.GetStringKey("sugarmask"); if (!sugarmaskstr.empty()) { if (!prepare_sugars) { mprinterr("Error: Cannot specify 'nosugars' and 'sugarmask'\n"); return CpptrajState::ERR; } - //if (sugarMask.SetMaskString(sugarmaskstr)) { - // mprinterr("Error: Setting sugar mask string.\n"); - // return CpptrajState::ERR; - //} } else if (prepare_sugars) { // No sugar mask specified; create one from names in pdb_to_glycam_ map. sugarmaskstr.assign(":"); @@ -2828,10 +2656,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) sugarmaskstr.append(","); sugarmaskstr.append( mit->first.Truncated() ); } - //if (sugarMask.SetMaskString(sugarmaskstr)) { - // mprinterr("Error: Setting sugar mask string.\n"); - // return CpptrajState::ERR; - //} } // If preparing sugars, need to set up an atom map and potentially From f6fdc5098b7e94198bf3eb9078ffa146b5bee036 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 13:24:16 -0400 Subject: [PATCH 248/368] Hide some debug info --- src/Exec_PrepareForLeap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6e273e8f3d..8bb2b81ff9 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -418,9 +418,9 @@ static void FollowBonds(int atm, Topology const& topIn, int idx, std::vector 0 && atm == tgt_atom) { From d700a85b82bb283863c002ca69dfb7f06c502786 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 2 Nov 2021 13:46:24 -0400 Subject: [PATCH 249/368] Add file for reading components.cif. Does not compile yet, but added for recordkeeping --- .../converters/glycam.csv.to.dat/Makefile | 24 ++- .../glycam.csv.to.dat/ReadComponents.cpp | 183 ++++++++++++++++++ 2 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 devtools/converters/glycam.csv.to.dat/ReadComponents.cpp diff --git a/devtools/converters/glycam.csv.to.dat/Makefile b/devtools/converters/glycam.csv.to.dat/Makefile index f83efd6672..e4c06daa20 100644 --- a/devtools/converters/glycam.csv.to.dat/Makefile +++ b/devtools/converters/glycam.csv.to.dat/Makefile @@ -1,9 +1,29 @@ include ../../../config.h +all: glycam.csv.to.dat ReadComponents + +clean: + -/bin/rm glycam.csv.to.dat ReadComponents + +# ----------------------------------------------- CPPTRAJ_SOURCE=../../../src/ArgList.cpp ../../../src/StringRoutines.cpp ../../../src/CpptrajStdio.cpp glycam.csv.to.dat: glycam.csv.to.dat.cpp ../../../src/ArgList.h ../../../src/StringRoutines.h $(CPPTRAJ_SOURCE) $(CXX) -o glycam.csv.to.dat glycam.csv.to.dat.cpp $(CPPTRAJ_SOURCE) -clean: - -/bin/rm glycam.csv.to.dat +# ----------------------------------------------- +#SOURCES=ArgList.cpp CIFfile.cpp \ +# FileIO_Bzip2.cpp FileIO_MpiShared.cpp \ +# StringRoutines.cpp Atom.cpp CpptrajFile.cpp \ +# FileIO_Gzip.cpp FileIO_Std.cpp BufferedLine.cpp \ +# CpptrajStdio.cpp FileIO_Mpi.cpp ReadComponents.cpp \ +# FileName.cpp NameType.cpp +#OBJECTS=$(SOURCES:.cpp=.o) +LIBS=$(CPPTRAJLIB)/libcpptraj_core.a $(CPPTRAJLIB)/libcpptraj_file.a + +ReadComponents: ReadComponents.cpp $(OBJECTS) libs + $(CXX) -I../../../src -o ReadComponents ReadComponents.cpp $(LIBS) $(LDFLAGS) + +libs: + cd ../../../src && $(MAKE) libstatic + diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp new file mode 100644 index 0000000000..677da4d6d5 --- /dev/null +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -0,0 +1,183 @@ +#include "ArgList.h" +#include "CIFfile.h" + +int ReadComponents(const char* fname) { + FILE* infile = fopen(fname, "rb"); + if (infile == 0) { + fprintf(stderr,"Error: Could not open file.\n"); + return 1; + } + + const int bufsize = 2047; + char buffer[bufsize+1]; + + while ( (fgets(buffer, bufsize, infile)) != 0) + { + ArgList line(buffer, " \r\n"); + if (line.Nargs() > 1) { + ArgList flag(line[0], "."); + if (flag.Nargs() > 1 && + flag[0] == "_chem_comp" && + flag[1] == "id") + { + //printf("%s", buffer); + // Get name + bool hasname = false; + fgets(buffer, bufsize, infile); + ArgList line2(buffer, " \r\n"); + if (line2.Nargs() == 1 && line2[0] == "_chem_comp.name") { + printf("Warning: semicolon name.\n"); + } else if (line2.Nargs() > 1) { + ArgList flag2(line2[0], "."); + if (flag2.Nargs() > 1 && + flag2[0] == "_chem_comp" || + flag2[1] == "name") + hasname = true; + } + if (!hasname) { + fprintf(stdout,"Warning: id not followed by name: %s\n", line[1].c_str()); + fprintf(stdout,"%s", buffer); + //fclose(infile); + //return 1; + } + } + } + } + + fclose(infile); + + return 0; +} + +/** Extract the "id" field from data with given name. */ +std::string ExtractId(CIFfile const& cif, std::string const& name) { + std::string id; + printf("NAME: %s", name.c_str()); + CIFfile::DataBlock const& block = cif.GetBlockWithColValue("_chem_comp", "name", name); + if (!block.empty()) { + //block.ListData(); + id.assign( block.Data("id") ); + std::string replaced_by = block.Data("pdbx_replaced_by"); + if (!replaced_by.empty() && replaced_by != "?") + printf(" 'replaced by %s' ", replaced_by.c_str()); + } + return id; +} + +/** Print ID to stdout. */ +void PrintId(std::string const& name, std::string const& id) { + if (!id.empty()) { + printf(" %s %s", name.c_str(), id.c_str()); + } + printf("\n\n"); +} + +typedef std::vector Sarray; + +/** Loop over alpha, beta, D, and L forms. */ +void Loops(CIFfile const& cif, std::string const& lead, + Sarray const& prefixes, Sarray const& suffixes) +{ + Sarray forms; + forms.push_back("alpha"); + forms.push_back("beta"); + + Sarray chirality; + chirality.push_back("D"); + chirality.push_back("L"); + + for (Sarray::const_iterator pref = prefixes.begin(); pref != prefixes.end(); ++pref) { + for (Sarray::const_iterator suff = suffixes.begin(); suff != suffixes.end(); ++suff) { + for (Sarray::const_iterator form = forms.begin(); form != forms.end(); ++form) { + for (Sarray::const_iterator chir = chirality.begin(); chir != chirality.end(); ++chir) { + std::string name; + if (!lead.empty()) + name.assign( lead + "-" ); + name.append( *form + "-" + *chir + "-" + *pref + *suff ); + std::string id = ExtractId(cif, name); + PrintId( name, id ); + } + } + } + } +} + +/** Loops, no lead string. */ +void Loops(CIFfile const& cif, Sarray const& prefixes, Sarray const& suffixes) { + Loops(cif, std::string(""), prefixes, suffixes); +} + +/** Read everything from the given CIF file. */ +int ReadCIF(const char* fname) { + CIFfile cif; + + if (cif.Read(fname, 0)) return 1; + + // DEBUG +// //CIFfile::DataBlock lastBlock = cif.GetDataBlock("_chem_comp"); +// CIFfile::DataBlock const& lastBlock = cif.GetBlockWithColValue("_chem_comp", +// "name", +// "alpha-D-arabinopyranose"); +// lastBlock.ListData(); + + Sarray prefixes; + prefixes.push_back("arabino"); // A + prefixes.push_back("lyxo"); // D + prefixes.push_back("ribo"); // R + prefixes.push_back("xylo"); // X + prefixes.push_back("allo"); // N + prefixes.push_back("altro"); // E + prefixes.push_back("galacto"); // L + prefixes.push_back("gluco"); // G + prefixes.push_back("gulo"); // K + prefixes.push_back("ido"); // I (glycam does not have?) + prefixes.push_back("manno"); // M + prefixes.push_back("talo"); // T + prefixes.push_back("fructo"); // C + prefixes.push_back("psico"); // P + prefixes.push_back("sorbo"); // B + prefixes.push_back("tagato"); // J + prefixes.push_back("fuco"); // F + prefixes.push_back("quinovo"); // Q + prefixes.push_back("rhamno"); // H + + Sarray suffixes; + suffixes.push_back("pyranose"); + suffixes.push_back("furanose"); + + Loops(cif, prefixes, suffixes); + + // ----------------------------------- + Sarray pprefixes; + pprefixes.push_back("galacto"); // O + pprefixes.push_back("gluco"); // Z + pprefixes.push_back("ido"); // U + + Sarray psuffixes; + psuffixes.push_back("pyranuronic acid"); + + Loops(cif, pprefixes, psuffixes); + + // ----------------------------------- + std::string lead("2-acetamido-2-deoxy"); + Sarray prefixes3; + prefixes3.push_back("galacto"); // V + prefixes3.push_back("gluco"); // Y + prefixes3.push_back("manno"); // W + + Sarray suffixes3; + suffixes3.push_back("pyranose"); + + Loops(cif, lead, prefixes3, suffixes3); + // ----------------------------------- + PrintId("N-acetyl-alpha-neuraminic acid", ExtractId(cif, "N-acetyl-alpha-neuraminic acid")); // SA + PrintId("N-acetyl-beta-neuraminic acid", ExtractId(cif, "N-acetyl-beta-neuraminic acid")); // SB + + return 0; +} + +int main(int argc, char** argv) { + //if (ReadComponents("components.cif")) return 1; + if (ReadCIF("components.cif")) return 1; + return 0; +} From 3a6c5e1aa0aa58a935fbbd39425d16aab263b53d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 3 Nov 2021 10:32:59 -0400 Subject: [PATCH 250/368] Recognized terminal OME group. Recognize Terminal-O5 linkage for furanose --- src/Exec_PrepareForLeap.cpp | 51 +++++++++++++++++++++++++++++++++---- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8bb2b81ff9..b599ae86b8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1145,6 +1145,7 @@ const else if (linkstr == "O2") linkcode = "2"; // Furanose C2-O2-X else if (linkstr == "TO3") linkcode = "3"; else if (linkstr == "TO4") linkcode = "4"; + else if (linkstr == "TO5") linkcode = "5"; else if (linkstr == "TO6") linkcode = "6"; else if (linkstr == "TO2O3") linkcode = "Z"; else if (linkstr == "TO2O4") linkcode = "Y"; @@ -1496,8 +1497,8 @@ const } else if (topIn[atIdx].Element() == Atom::OXYGEN && topIn[atIdx].ResNum() == rnum) { selected.push_back( atIdx ); - // If only 1 bond, -OH if (topIn[atIdx].Nbonds() == 1) + // If only 1 bond, -OH return G_OH; else if (topIn[atIdx].Nbonds() == 2) { int bonded_atom; @@ -1506,8 +1507,25 @@ const else bonded_atom = topIn[atIdx].Bond(0); if (topIn[bonded_atom].Element() == Atom::HYDROGEN) { + // -OH selected.push_back(bonded_atom); return G_OH; + } else if (topIn[bonded_atom].Element() == Atom::CARBON) { + // Might be -OCH3 + int c_idx = bonded_atom; + selected.push_back(c_idx); + // Check for only 1 bond or 3 bonds to hydrogen + int bonds_to_h = 0; + for (Atom::bond_iterator bat = topIn[c_idx].bondbegin(); + bat != topIn[c_idx].bondend(); ++bat) + { + if (topIn[*bat].Element() == Atom::HYDROGEN) { + bonds_to_h++; + selected.push_back(*bat); + } + } + if (topIn[c_idx].Nbonds() == 1 || bonds_to_h == 3) + return G_OME; } } @@ -1531,6 +1549,11 @@ const } else if (groupType == G_OH) { mprintf("\tFound OH group centered on atom '%s' bonded to '%s'\n", topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + } else if (groupType == G_OME) { + mprintf("\tFound OCH3 group centered on atom '%s' bonded to '%s'\n", + topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + } else if (groupType != UNRECOGNIZED_GROUP) { + mprinterr("Internal Error: Unhandled group from IdFunctionalGroup()\n"); } return groupType; } @@ -1544,7 +1567,7 @@ const int original_at0 = topIn.Res(rnum).FirstAtom(); int original_at1 = topIn.Res(rnum).LastAtom(); std::string sugarName = topIn.TruncResNameOnumId(rnum); - mprintf("DEBUG: Sulfate check: %s\n", sugarName.c_str()); + mprintf("DEBUG: Functional group check: %s\n", sugarName.c_str()); bool atomsRemain = true; while (atomsRemain) { @@ -1588,7 +1611,7 @@ const else { // sanity check if (so3_idx == -1 || o_idx == -1 || selected.empty()) { - mprinterr("Internal Error: Sulfate index is negative.\n"); + mprinterr("Internal Error: Functional group index is negative.\n"); return 1; } @@ -1608,6 +1631,9 @@ const ChangeAtomName(topIn.SetAtom(selected[3]), "H3"); } newResName = "MEX"; + } else { + mprinterr("Internal Error: Unhandled group in CheckForFunctionalGroups()\n"); + return 1; } // Create array with SO3 selected AtomMask SO3(selected, topIn.Natom()); @@ -1668,13 +1694,28 @@ const Iarray selected; FunctionalGroupType groupType = IdFunctionalGroup(selected, rnum, o1_atom, anomericAtom, topIn); + std::string newResName; if (groupType == G_OH) { - mprintf("\t Will split into %s group.\n", terminalHydroxylName_.c_str()); + newResName = terminalHydroxylName_; // Change atom names ChangeAtomName(topIn.SetAtom(selected[0]), "O1"); if (selected.size() > 1) ChangeAtomName(topIn.SetAtom(selected[1]), "HO1"); + } else if (groupType == G_OME) { + newResName = "OME"; + // Change atom names + ChangeAtomName(topIn.SetAtom(selected[0]), "O"); + ChangeAtomName(topIn.SetAtom(selected[1]), "CH3"); + if (selected.size() > 2) { + ChangeAtomName(topIn.SetAtom(selected[2]), "H1"); + ChangeAtomName(topIn.SetAtom(selected[3]), "H2"); + ChangeAtomName(topIn.SetAtom(selected[4]), "H3"); + } + } else if (groupType != UNRECOGNIZED_GROUP) { + mprinterr("Internal Error: Unhandled group in CheckIfSugarIsTerminal\n"); + return 1; } + mprintf("\t Will split into %s group.\n", newResName.c_str()); // If terminal group is unrecognized, this could just be a regular O1 linkage if (selected.empty()) { @@ -1692,7 +1733,7 @@ const int original_at0 = topIn.Res(rnum).FirstAtom(); int original_at1 = topIn.Res(rnum).LastAtom(); Iarray atomMap; - if (topIn.SplitResidue(ROH, terminalHydroxylName_, atomMap)) { + if (topIn.SplitResidue(ROH, newResName, atomMap)) { mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); return 1; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 0d419f46e4..aa016d033f 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -25,7 +25,7 @@ class Exec_PrepareForLeap : public Exec { /// Return type for DetermineAnomericForm enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; - enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_OH, UNRECOGNIZED_GROUP }; + enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_OH, G_OME, UNRECOGNIZED_GROUP }; enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, SUGAR_MISSING_RING_O }; typedef std::vector ResStatArray; From 8b532bf1e7106b85a871c93d431aa6d9d5cf30e3 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 3 Nov 2021 11:26:46 -0400 Subject: [PATCH 251/368] Recognize OME as valid --- src/Exec_PrepareForLeap.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b599ae86b8..a87bcc2c76 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1235,6 +1235,10 @@ const if (debug_ > 0) mprintf("DEBUG: '%s' is a methyl group.\n", *(pres.Name())); resStatIn[topIn[*bat].ResNum()] = VALIDATED; + } else if (pres.Name() == "OME") { + if (debug_ > 0) + mprintf("DEBUG: '%s' is an O-methyl group.\n", *(pres.Name())); + resStatIn[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); resStatIn[topIn[*bat].ResNum()] = UNRECOGNIZED_SUGAR_LINKAGE; From 052f1c31e8cddcede09597513ab2a974eee3794d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 3 Nov 2021 11:36:46 -0400 Subject: [PATCH 252/368] Add a methylated form of G --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index d31f08d0a6..7e325a49aa 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -8,7 +8,7 @@ "Allose" N AFD,Z2D,ALL,WOO,VDV,VDS "Altrose" E SHD,Z6H,3MK "Galactose" L GLA,GXL,GAL,GIV,GZL -"Glucose" G GLC,BGC,Z8T,GU4 +"Glucose" G GLC,BGC,Z8T,GU4,MGL "Gulose" K 4GL,GUP,GL0,Z8H "Mannose" M MAN,BMA "Talose" T SDY,ZEE,A5C From 68afcb425f43eaaee25abdd2a1c1dc3ceb6c65fa Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 09:45:12 -0400 Subject: [PATCH 253/368] Add interface to leap --- src/LeapInterface.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++ src/LeapInterface.h | 28 ++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/LeapInterface.cpp create mode 100644 src/LeapInterface.h diff --git a/src/LeapInterface.cpp b/src/LeapInterface.cpp new file mode 100644 index 0000000000..709bef71d0 --- /dev/null +++ b/src/LeapInterface.cpp @@ -0,0 +1,77 @@ +#include "LeapInterface.h" +#include "CpptrajFile.h" +#include "CpptrajStdio.h" +#include "File_TempName.h" +#include + +using namespace Cpptraj; +/** CONSTRUCTOR */ +LeapInterface::LeapInterface() {} + +/** Set up leap to run. */ +int LeapInterface::AddInputFile(std::string const& fname) { + if (fname.empty()) return 1; + input_files_.push_back( fname ); + return 0; +} + +/** Clear all input files. */ +void LeapInterface::ClearInputFiles() { + input_files_.clear(); +} + +/** Execute the leap process */ +int LeapInterface::execute_leap(FileName const& input) const { + // Add source commands and quit to temp leap input + CpptrajFile leapin; + + if (leapin.OpenWrite(input)) { + mprinterr("Error: Could not open temporary leap input file '%s'\n", input.full()); + return 1; + } + + for (Sarray::const_iterator it = input_files_.begin(); it != input_files_.end(); ++it) + leapin.Printf("source %s\n", it->c_str()); + leapin.Printf("quit\n"); + + leapin.CloseFile(); + + CpptrajFile leapout; + if (leapout.OpenWrite(leapOutName_)) { + mprinterr("Error: Could not open leap output file '%s'\n", leapOutName_.c_str()); + return 1; + } + + std::string cmd("tleap -f " + input.Full()); + FILE* file = popen(cmd.c_str(), "r"); + if (file == 0) { + mprinterr("Error: Could not execute '%s'\n", cmd.c_str()); + return 1; + } + + static const unsigned int BUFSIZE = 1023; + char buffer[BUFSIZE+1]; + char* ptr = fgets(buffer, BUFSIZE, file); + while (ptr != 0) { + std::string line(ptr); + leapout.Write(line.c_str(), line.size()); + ptr = fgets(buffer, BUFSIZE, file); + } + + leapout.CloseFile(); + pclose(file); + + return 0; +} + +/** Run leap. */ +int LeapInterface::RunLeap() const { + // Create temporary leap input file + FileName tmp_leap_input = File::GenTempName(); + + int err = execute_leap( tmp_leap_input ); + + // Free up temp name + File::FreeTempName( tmp_leap_input ); + return err; +} diff --git a/src/LeapInterface.h b/src/LeapInterface.h new file mode 100644 index 0000000000..fd80b1c19f --- /dev/null +++ b/src/LeapInterface.h @@ -0,0 +1,28 @@ +#ifndef INC_LEAPINTERFACE_H +#define INC_LEAPINTERFACE_H +#include +#include +class FileName; +namespace Cpptraj { +/// Provide an interface to generate a topology from Amber LEaP +class LeapInterface { + public: + /// CONSTRUCTOR + LeapInterface(); + /// Add input file + int AddInputFile(std::string const&); + /// Clear input files + void ClearInputFiles(); + /// Run leap + int RunLeap() const; + private: + typedef std::vector Sarray; + + /// Execute leap process + int execute_leap(FileName const&) const; + + Sarray input_files_; ///< Array of leap input files to source + std::string leapOutName_; ///< Leap output file name +}; +} +#endif From a38597afd4698a83f631817a6150b9f428f1b42a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 10:58:14 -0400 Subject: [PATCH 254/368] Try to execute leap --- src/Exec_PrepareForLeap.cpp | 70 +++++++++++++++++++++++++++++++++---- src/Exec_PrepareForLeap.h | 2 ++ src/LeapInterface.cpp | 20 +++++++++-- src/LeapInterface.h | 3 ++ src/cpptrajdepend | 3 +- src/cpptrajfiles | 1 + 6 files changed, 89 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a87bcc2c76..a6399e3606 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1,14 +1,15 @@ #include "Exec_PrepareForLeap.h" -#include "CpptrajStdio.h" -#include "DistRoutines.h" #include "CharMask.h" #include "Chirality.h" -#include "TorsionRoutines.h" #include "Constants.h" #include "CpptrajFile.h" +#include "CpptrajStdio.h" +#include "DataSet_Coords_CRD.h" +#include "DistRoutines.h" +#include "LeapInterface.h" +#include "TorsionRoutines.h" #include "Trajout_Single.h" #include "StringRoutines.h" // integerToString -#include "DataSet_Coords_CRD.h" #include #include // tolower #include // sort @@ -2456,11 +2457,41 @@ void Exec_PrepareForLeap::PrintAtomNameMap(const char* title, } } +/** Run leap to generate topology. Modify the topology if needed. */ +int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, + std::string const& leapfilename) const +{ + if (leapfilename.empty()) { + mprintf("Warning: No leap input file name was specified, not running leap.\n"); + return 0; + } + if (ff_file.empty()) { + mprintf("Warning: No leap input file with force fields was specified, not running leap.\n"); + return 0; + } + + Cpptraj::LeapInterface LEAP; + LEAP.AddInputFile( ff_file ); + LEAP.AddInputFile( leapfilename ); + LEAP.AddCommand("saveamberparm " + leapunitname_ + " " + + leapunitname_ + ".parm7 " + + leapunitname_ + ".rst7"); + + if (LEAP.RunLeap()) { + mprinterr("Error: Leap failed.\n"); + return 1; + } + + + return 0; +} + // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const { mprintf("\tcrdset [frame <#>] name [pdbout ]\n" - "\t[leapunitname ] [out [skiperrors]\n" + "\t[leapunitname ] [out [runleap ]]\n" + "\t[skiperrors]\n" "\t[nowat [watername ] [noh] [keepaltloc ]\n" "\t[stripmask ] [solventresname ]\n" "\t[{nohisdetect |\n" @@ -2530,10 +2561,30 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } mprintf("\tPrepared system will be saved to COORDS set '%s'\n", outCoords->legend()); + std::string leapffname = argIn.GetStringKey("runleap"); + if (!leapffname.empty()) + mprintf("\tWill attempt to run leap with force fields specified in file '%s'\n", + leapffname.c_str()); + std::string pdbout = argIn.GetStringKey("pdbout"); if (!pdbout.empty()) mprintf("\tPDB will be written to %s\n", pdbout.c_str()); + else { + if (!leapffname.empty()) { + mprinterr("Error: Must specify PDB file name with 'pdbout' if 'runleap' specified.\n"); + return CpptrajState::ERR; + } + } + std::string leapfilename = argIn.GetStringKey("out"); + if (!leapfilename.empty()) + mprintf("\tWriting leap input to '%s'\n", leapfilename); + else { + if (!leapffname.empty()) { + mprinterr("Error: Must specify leap input file name with 'out' if 'runleap' specified.\n"); + return CpptrajState::ERR; + } + } leapunitname_ = argIn.GetStringKey("leapunitname", "m"); mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); solventResName_ = argIn.GetStringKey("solventresname", "HOH"); @@ -2787,7 +2838,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } - CpptrajFile* outfile = State.DFL().AddCpptrajFile(argIn.GetStringKey("out"), + CpptrajFile* outfile = State.DFL().AddCpptrajFile(leapfilename, "LEaP Input", DataFileList::TEXT, true); if (outfile == 0) return CpptrajState::ERR; mprintf("\tLEaP input containing 'loadpdb' and bond commands for disulfides,\n" @@ -2911,5 +2962,12 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) PDB.EndTraj(); } + if (!leapffname.empty()) { + if (RunLeap( leapffname, leapfilename )) { + mprinterr("Error: Running leap failed.\n"); + return CpptrajState::ERR; + } + } + return CpptrajState::OK; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index aa016d033f..222fe0c12b 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -104,6 +104,8 @@ class Exec_PrepareForLeap : public Exec { int DetermineHisProt(std::vector&, Iarray&, Topology const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&) const; + /// Run leap to generate topology, perform any modifications + int RunLeap(std::string const&, std::string const&) const; typedef std::pair PairType; diff --git a/src/LeapInterface.cpp b/src/LeapInterface.cpp index 709bef71d0..3f8321ee23 100644 --- a/src/LeapInterface.cpp +++ b/src/LeapInterface.cpp @@ -3,6 +3,7 @@ #include "CpptrajStdio.h" #include "File_TempName.h" #include +#include using namespace Cpptraj; /** CONSTRUCTOR */ @@ -15,6 +16,13 @@ int LeapInterface::AddInputFile(std::string const& fname) { return 0; } +/** Add command to run after input is sourced. */ +int LeapInterface::AddCommand(std::string const& cmd) { + if (cmd.empty()) return 1; + commands_.push_back( cmd ); + return 0; +} + /** Clear all input files. */ void LeapInterface::ClearInputFiles() { input_files_.clear(); @@ -32,17 +40,23 @@ int LeapInterface::execute_leap(FileName const& input) const { for (Sarray::const_iterator it = input_files_.begin(); it != input_files_.end(); ++it) leapin.Printf("source %s\n", it->c_str()); + for (Sarray::const_iterator it = commands_.begin(); it != commands_.end(); ++it) + leapin.Printf("%s\n", it->c_str()); leapin.Printf("quit\n"); leapin.CloseFile(); + std::string cmd("tleap -f " + input.Full()); + mprintf("DEBUG: %s\n", cmd.c_str()); + + int err = system( cmd.c_str() ); +/* CpptrajFile leapout; if (leapout.OpenWrite(leapOutName_)) { mprinterr("Error: Could not open leap output file '%s'\n", leapOutName_.c_str()); return 1; } - std::string cmd("tleap -f " + input.Full()); FILE* file = popen(cmd.c_str(), "r"); if (file == 0) { mprinterr("Error: Could not execute '%s'\n", cmd.c_str()); @@ -59,9 +73,9 @@ int LeapInterface::execute_leap(FileName const& input) const { } leapout.CloseFile(); - pclose(file); + pclose(file);*/ - return 0; + return err; } /** Run leap. */ diff --git a/src/LeapInterface.h b/src/LeapInterface.h index fd80b1c19f..22b1605ec6 100644 --- a/src/LeapInterface.h +++ b/src/LeapInterface.h @@ -11,6 +11,8 @@ class LeapInterface { LeapInterface(); /// Add input file int AddInputFile(std::string const&); + /// Add command to run after input files are sourced + int AddCommand(std::string const&); /// Clear input files void ClearInputFiles(); /// Run leap @@ -22,6 +24,7 @@ class LeapInterface { int execute_leap(FileName const&) const; Sarray input_files_; ///< Array of leap input files to source + Sarray commands_; ///< Array of leap commands to run after files are sourced std::string leapOutName_; ///< Leap output file name }; } diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 1f51d6c899..6d4b91d215 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -269,7 +269,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Chirality.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Chirality.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h LeapInterface.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h @@ -316,6 +316,7 @@ Image_List_Pair.o : Image_List_Pair.cpp Atom.h AtomMask.h AtomType.h Box.h Const Image_List_Unit.o : Image_List_Unit.cpp Atom.h AtomMask.h AtomType.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h Image_List.h Image_List_Unit.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TypeNameHolder.h Unit.h Vec3.h InputTrajCommon.o : InputTrajCommon.cpp CpptrajStdio.h FileName.h InputTrajCommon.h TrajFrameCounter.h KDE.o : KDE.cpp AssociatedData.h Constants.h CpptrajFile.h CpptrajStdio.h DataSet.h DataSet_1D.h DataSet_double.h Dimension.h FileIO.h FileName.h HistBin.h KDE.h MetaData.h Parallel.h Range.h TextFormat.h +LeapInterface.o : LeapInterface.cpp CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h File_TempName.h LeapInterface.h Parallel.h LeastSquaresPlaneVector.o : LeastSquaresPlaneVector.cpp Atom.h AtomMask.h Box.h Constants.h CoordinateInfo.h Frame.h LeastSquaresPlaneVector.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Unit.h Vec3.h MapAtom.o : MapAtom.cpp Atom.h MapAtom.h NameType.h SymbolExporting.h MaskArray.o : MaskArray.cpp Atom.h AtomMask.h AtomType.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h MaskArray.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TypeNameHolder.h Unit.h Vec3.h diff --git a/src/cpptrajfiles b/src/cpptrajfiles index 446f3f0dca..42bd2fa5ee 100644 --- a/src/cpptrajfiles +++ b/src/cpptrajfiles @@ -315,6 +315,7 @@ COMMON_SOURCES= \ Image_List_Unit.cpp \ InputTrajCommon.cpp \ KDE.cpp \ + LeapInterface.cpp \ LeastSquaresPlaneVector.cpp \ MapAtom.cpp \ MaskArray.cpp \ From 01f2ef5a31e84b24b718723bc946cabbe51df799 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 11:02:26 -0400 Subject: [PATCH 255/368] Ensure leap input file is closed before trying to use it --- src/Exec_PrepareForLeap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a6399e3606..0fa0f00550 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2962,6 +2962,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) PDB.EndTraj(); } + outfile->CloseFile(); if (!leapffname.empty()) { if (RunLeap( leapffname, leapfilename )) { mprinterr("Error: Running leap failed.\n"); From 155941cabd6065bcf3ec72060fe689a9b64fc178 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 11:05:30 -0400 Subject: [PATCH 256/368] Do not put the leap input file on the master data file list since it needs to contain ONLY leap input --- src/Exec_PrepareForLeap.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0fa0f00550..41167666b6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2838,8 +2838,12 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } - CpptrajFile* outfile = State.DFL().AddCpptrajFile(leapfilename, - "LEaP Input", DataFileList::TEXT, true); + //CpptrajFile* outfile = State.DFL().AddCpptrajFile(leapfilename, + // "LEaP Input", DataFileList::TEXT, true); + // NOTE: This needs to contain ONLY leap input, so dont put it on the master file list + CpptrajFile LEAPOUT; + if (LEAPOUT.OpenWrite(leapfilename)) return CpptrajState::ERR; + CpptrajFile* outfile = &LEAPOUT; if (outfile == 0) return CpptrajState::ERR; mprintf("\tLEaP input containing 'loadpdb' and bond commands for disulfides,\n" "\t sugars, etc will be written to '%s'\n", outfile->Filename().full()); From aa4f985601326aa89ab24be841beb73d493bd104 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 11:12:21 -0400 Subject: [PATCH 257/368] Actually capture the leap output --- src/LeapInterface.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/LeapInterface.cpp b/src/LeapInterface.cpp index 3f8321ee23..0ed8141d1b 100644 --- a/src/LeapInterface.cpp +++ b/src/LeapInterface.cpp @@ -3,7 +3,7 @@ #include "CpptrajStdio.h" #include "File_TempName.h" #include -#include +//#incl ude using namespace Cpptraj; /** CONSTRUCTOR */ @@ -49,8 +49,8 @@ int LeapInterface::execute_leap(FileName const& input) const { std::string cmd("tleap -f " + input.Full()); mprintf("DEBUG: %s\n", cmd.c_str()); - int err = system( cmd.c_str() ); -/* +// int err = system( cmd.c_str() ); + CpptrajFile leapout; if (leapout.OpenWrite(leapOutName_)) { mprinterr("Error: Could not open leap output file '%s'\n", leapOutName_.c_str()); @@ -66,16 +66,25 @@ int LeapInterface::execute_leap(FileName const& input) const { static const unsigned int BUFSIZE = 1023; char buffer[BUFSIZE+1]; char* ptr = fgets(buffer, BUFSIZE, file); + bool cleanExit = false; + std::string exitLine; while (ptr != 0) { std::string line(ptr); leapout.Write(line.c_str(), line.size()); + std::size_t found = line.find("Exiting LEaP"); + if (found != std::string::npos) { + cleanExit = true; + exitLine = line; + } ptr = fgets(buffer, BUFSIZE, file); } leapout.CloseFile(); - pclose(file);*/ + pclose(file); - return err; + if (!cleanExit) return 1; + mprintf("DEBUG: Leap Exit line '%s'\n", exitLine.c_str()); + return 0; } /** Run leap. */ From fe86f11b030de0b2be01ad47bf133438744f35b9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 11:44:22 -0400 Subject: [PATCH 258/368] Record error messages from leap --- src/Exec_PrepareForLeap.cpp | 3 ++- src/LeapInterface.cpp | 31 +++++++++++++++++++++++++------ src/LeapInterface.h | 1 + src/cpptrajdepend | 2 +- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 41167666b6..7eab865a21 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2469,6 +2469,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, mprintf("Warning: No leap input file with force fields was specified, not running leap.\n"); return 0; } + mprintf("\tExecuting leap.\n"); Cpptraj::LeapInterface LEAP; LEAP.AddInputFile( ff_file ); @@ -2578,7 +2579,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) std::string leapfilename = argIn.GetStringKey("out"); if (!leapfilename.empty()) - mprintf("\tWriting leap input to '%s'\n", leapfilename); + mprintf("\tWriting leap input to '%s'\n", leapfilename.c_str()); else { if (!leapffname.empty()) { mprinterr("Error: Must specify leap input file name with 'out' if 'runleap' specified.\n"); diff --git a/src/LeapInterface.cpp b/src/LeapInterface.cpp index 0ed8141d1b..9e89e8e3f8 100644 --- a/src/LeapInterface.cpp +++ b/src/LeapInterface.cpp @@ -1,13 +1,15 @@ #include "LeapInterface.h" +#include "ArgList.h" #include "CpptrajFile.h" #include "CpptrajStdio.h" #include "File_TempName.h" +#include "StringRoutines.h" #include //#incl ude using namespace Cpptraj; /** CONSTRUCTOR */ -LeapInterface::LeapInterface() {} +LeapInterface::LeapInterface() : debug_(0) {} /** Set up leap to run. */ int LeapInterface::AddInputFile(std::string const& fname) { @@ -50,11 +52,14 @@ int LeapInterface::execute_leap(FileName const& input) const { mprintf("DEBUG: %s\n", cmd.c_str()); // int err = system( cmd.c_str() ); + Sarray errorMessages; CpptrajFile leapout; - if (leapout.OpenWrite(leapOutName_)) { - mprinterr("Error: Could not open leap output file '%s'\n", leapOutName_.c_str()); - return 1; + if (debug_ > 0 || !leapOutName_.empty()) { + if (leapout.OpenWrite(leapOutName_)) { + mprinterr("Error: Could not open leap output file '%s'\n", leapOutName_.c_str()); + return 1; + } } FILE* file = popen(cmd.c_str(), "r"); @@ -70,8 +75,12 @@ int LeapInterface::execute_leap(FileName const& input) const { std::string exitLine; while (ptr != 0) { std::string line(ptr); - leapout.Write(line.c_str(), line.size()); - std::size_t found = line.find("Exiting LEaP"); + if (leapout.IsOpen()) + leapout.Write(line.c_str(), line.size()); + std::size_t found = line.find("FATAL:"); + if (found != std::string::npos) + errorMessages.push_back( NoTrailingWhitespace(line) ); + found = line.find("Exiting LEaP"); if (found != std::string::npos) { cleanExit = true; exitLine = line; @@ -84,6 +93,16 @@ int LeapInterface::execute_leap(FileName const& input) const { if (!cleanExit) return 1; mprintf("DEBUG: Leap Exit line '%s'\n", exitLine.c_str()); + ArgList exitArgs(exitLine, " :=;."); + int nerr = exitArgs.getKeyInt("Errors", -1); + int nwarn = exitArgs.getKeyInt("Warnings", -1); + int nnotes = exitArgs.getKeyInt("Notes", -1); + mprintf("\tLeap Errors= %i Warnings= %i Notes= %i\n", nerr, nwarn, nnotes); + if (nerr == -1 || nerr > 0) { + for (Sarray::const_iterator it = errorMessages.begin(); it != errorMessages.end(); ++it) + mprintf("%s\n", it->c_str()); + return 1; + } return 0; } diff --git a/src/LeapInterface.h b/src/LeapInterface.h index 22b1605ec6..46ad9c390d 100644 --- a/src/LeapInterface.h +++ b/src/LeapInterface.h @@ -26,6 +26,7 @@ class LeapInterface { Sarray input_files_; ///< Array of leap input files to source Sarray commands_; ///< Array of leap commands to run after files are sourced std::string leapOutName_; ///< Leap output file name + int debug_; ///< Debug level }; } #endif diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 6d4b91d215..cf848edca2 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -316,7 +316,7 @@ Image_List_Pair.o : Image_List_Pair.cpp Atom.h AtomMask.h AtomType.h Box.h Const Image_List_Unit.o : Image_List_Unit.cpp Atom.h AtomMask.h AtomType.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h Image_List.h Image_List_Unit.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TypeNameHolder.h Unit.h Vec3.h InputTrajCommon.o : InputTrajCommon.cpp CpptrajStdio.h FileName.h InputTrajCommon.h TrajFrameCounter.h KDE.o : KDE.cpp AssociatedData.h Constants.h CpptrajFile.h CpptrajStdio.h DataSet.h DataSet_1D.h DataSet_double.h Dimension.h FileIO.h FileName.h HistBin.h KDE.h MetaData.h Parallel.h Range.h TextFormat.h -LeapInterface.o : LeapInterface.cpp CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h File_TempName.h LeapInterface.h Parallel.h +LeapInterface.o : LeapInterface.cpp ArgList.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h File_TempName.h LeapInterface.h Parallel.h StringRoutines.h LeastSquaresPlaneVector.o : LeastSquaresPlaneVector.cpp Atom.h AtomMask.h Box.h Constants.h CoordinateInfo.h Frame.h LeastSquaresPlaneVector.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Unit.h Vec3.h MapAtom.o : MapAtom.cpp Atom.h MapAtom.h NameType.h SymbolExporting.h MaskArray.o : MaskArray.cpp Atom.h AtomMask.h AtomType.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h MaskArray.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TypeNameHolder.h Unit.h Vec3.h From eeaf39a239e9016eedea54f133bf68bba54279dc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 11:46:22 -0400 Subject: [PATCH 259/368] Save file names in variables --- src/Exec_PrepareForLeap.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7eab865a21..b20f15c163 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2471,12 +2471,14 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, } mprintf("\tExecuting leap.\n"); + std::string topname = leapunitname_ + ".parm7"; + std::string rstname = leapunitname_ + ".rst7"; + Cpptraj::LeapInterface LEAP; LEAP.AddInputFile( ff_file ); LEAP.AddInputFile( leapfilename ); LEAP.AddCommand("saveamberparm " + leapunitname_ + " " + - leapunitname_ + ".parm7 " + - leapunitname_ + ".rst7"); + topname + " " + rstname); if (LEAP.RunLeap()) { mprinterr("Error: Leap failed.\n"); From 3c39f7105ba13abda94f3edff1fe8b7c5258f741 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 12:09:49 -0400 Subject: [PATCH 260/368] Read topology written by leap --- src/Exec_PrepareForLeap.cpp | 6 ++++++ src/cpptrajdepend | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b20f15c163..bb57b2b0a1 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -7,6 +7,7 @@ #include "DataSet_Coords_CRD.h" #include "DistRoutines.h" #include "LeapInterface.h" +#include "ParmFile.h" #include "TorsionRoutines.h" #include "Trajout_Single.h" #include "StringRoutines.h" // integerToString @@ -2485,6 +2486,11 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, return 1; } + // Load the leap topology; + Topology leaptop; + ParmFile parm; + if (parm.ReadTopology(leaptop, topname, debug_)) return 1; + return 0; } diff --git a/src/cpptrajdepend b/src/cpptrajdepend index cf848edca2..aba1ff0231 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -269,7 +269,7 @@ Exec_ParmStrip.o : Exec_ParmStrip.cpp Action.h ActionList.h ActionState.h Analys Exec_ParmWrite.o : Exec_ParmWrite.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ParmWrite.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_PermuteDihedrals.o : Exec_PermuteDihedrals.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h ExclusionArray.h Exec.h Exec_PermuteDihedrals.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h PairList.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StructureCheck.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_Precision.o : Exec_Precision.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Precision.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h -Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Chirality.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h LeapInterface.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h +Exec_PrepareForLeap.o : Exec_PrepareForLeap.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMap.h AtomMask.h AtomType.h BaseIOtype.h Box.h CharMask.h Chirality.h CompactFrameArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrepareForLeap.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h ImageOption.h InputTrajCommon.h LeapInterface.h MapAtom.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h ParmFile.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TorsionRoutines.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h TypeNameHolder.h Unit.h Vec3.h Exec_PrintData.o : Exec_PrintData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_PrintData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_Random.o : Exec_Random.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_Random.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h Exec_ReadData.o : Exec_ReadData.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h Exec.h Exec_ReadData.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h TypeNameHolder.h Unit.h Vec3.h From 0c881071ce7f87f8d7182dd42d900716df2f6660 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 13:48:03 -0400 Subject: [PATCH 261/368] Print out total charges on residues --- src/Exec_PrepareForLeap.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index bb57b2b0a1..350f38d468 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2491,6 +2491,15 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, ParmFile parm; if (parm.ReadTopology(leaptop, topname, debug_)) return 1; + // DEBUG: Print out total charge on each residue + for (Topology::res_iterator res = leaptop.ResStart(); res != leaptop.ResEnd(); ++res) + { + double tcharge = 0; + for (int at = res->FirstAtom(); at != res->LastAtom(); ++at) + tcharge += leaptop[at].Charge(); + mprintf("\tResidue %10s charge= %12.5f\n", + leaptop.TruncResNameOnumId(res-leaptop.ResStart()).c_str(), tcharge); + } return 0; } From 2cce2b50d5891263e48a923f4607ecb6f6ea17eb Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 16:12:26 -0400 Subject: [PATCH 262/368] Adjust sulfate charges --- src/Exec_PrepareForLeap.cpp | 28 ++++++++++++++++++++++++++++ src/Exec_PrepareForLeap.h | 14 +++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 350f38d468..48fd3c8034 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2491,6 +2491,34 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, ParmFile parm; if (parm.ReadTopology(leaptop, topname, debug_)) return 1; + // Go through each residue. Find ones that need to be adjusted. + for (int rnum = 0; rnum != leaptop.Nres(); rnum++) + { + Residue const& res = leaptop.Res(rnum); + if (res.Name() == "SO3") { + // Need to adjust the charge on the bonded oxygen by +0.31 + int o_idx = -1; + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { + if (leaptop[at].Element() == Atom::SULFUR) { + for (Atom::bond_iterator bat = leaptop[at].bondbegin(); + bat != leaptop[at].bondend(); ++bat) + { + if (leaptop[*bat].Element() == Atom::OXYGEN && leaptop[*bat].ResNum() != rnum) { + o_idx = *bat; + break; + } + } + } + if (o_idx != -1) break; + } + double newcharge = leaptop[o_idx].Charge() + 0.031; + mprintf("\tChanging charge on %s from %f to %f\n", + leaptop.AtomMaskName(o_idx).c_str(), leaptop[o_idx].Charge(), newcharge); + leaptop.SetAtom(o_idx).SetCharge( newcharge ); + } + } + + // DEBUG: Print out total charge on each residue for (Topology::res_iterator res = leaptop.ResStart(); res != leaptop.ResEnd(); ++res) { diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 222fe0c12b..eda5180b79 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -20,6 +20,8 @@ class Exec_PrepareForLeap : public Exec { class Sugar; /// Hold indices for sugar link atoms class Link; + /// Hold information for the various functional group types (FunctionalGroupType) + class FunctionalGroup; typedef std::vector Iarray; /// Return type for DetermineAnomericForm @@ -107,7 +109,6 @@ class Exec_PrepareForLeap : public Exec { /// Run leap to generate topology, perform any modifications int RunLeap(std::string const&, std::string const&) const; - typedef std::pair PairType; typedef std::map MapType; MapType pdb_to_glycam_; ///< Map PDB residue names to Glycam 1 char names @@ -143,6 +144,7 @@ class Exec_PrepareForLeap : public Exec { std::string solventResName_; ///< Solvent residue name std::string terminalHydroxylName_; ///< Terminal hydroxyl name AtomMap myMap_; + std::vector functionalGroups_; ///< Recognized functional groups (FunctionalGroupType). }; // ----- Sugar class ---------------------------------------------------------- class Exec_PrepareForLeap::Sugar { @@ -208,4 +210,14 @@ class Exec_PrepareForLeap::Link { int idx_; ///< Atom index in topology int position_; ///< Position in sugar carbon chain, starting from 1 at the anomeric carbon }; +// ----- FunctionalGroup class ------------------------------------------------- +class Exec_PrepareForLeap::FunctionalGroup { + public: + FunctionalGroup(); + private: + NameType resname_; ///< Functional group residue name. + std::vector anames_; ///< Functional group atom names. Heavy atoms first. + Atom::AtomicElementType chargeAtom_; ///< Element of atom which needs charge adjusted. + double chargeOffset_; ///< Charge offset for adjusting charge. +}; #endif From baf23773b4003868cac373bb0df14db41fc392a0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 18:58:11 -0400 Subject: [PATCH 263/368] Add MEX adjustment --- src/Exec_PrepareForLeap.cpp | 62 +++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 48fd3c8034..71ea6183da 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2458,6 +2458,37 @@ void Exec_PrepareForLeap::PrintAtomNameMap(const char* title, } } +/// \return index of oxygen atom bonded to this atom but not in same residue +static inline int getLinkOxygenIdx(Topology const& leaptop, int at, int rnum) { + int o_idx = -1; + for (Atom::bond_iterator bat = leaptop[at].bondbegin(); + bat != leaptop[at].bondend(); ++bat) + { + if (leaptop[*bat].Element() == Atom::OXYGEN && leaptop[*bat].ResNum() != rnum) { + o_idx = *bat; + break; + } + } + return o_idx; +} + +/// \return index of carbon bonded to link oxygen not in same residue +static inline int getLinkCarbonIdx(Topology const& leaptop, int at, int rnum) +{ + int o_idx = getLinkOxygenIdx(leaptop, at, rnum); + if (o_idx == -1) return o_idx; + int c_idx = -1; + for (Atom::bond_iterator bat = leaptop[o_idx].bondbegin(); + bat != leaptop[o_idx].bondend(); ++bat) + { + if (leaptop[*bat].Element() == Atom::CARBON && leaptop[*bat].ResNum() != rnum) { + c_idx = *bat; + break; + } + } + return c_idx; +} + /** Run leap to generate topology. Modify the topology if needed. */ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, std::string const& leapfilename) const @@ -2496,10 +2527,12 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, { Residue const& res = leaptop.Res(rnum); if (res.Name() == "SO3") { - // Need to adjust the charge on the bonded oxygen by +0.31 int o_idx = -1; + // Need to adjust the charge on the bonded oxygen by +0.031 for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { if (leaptop[at].Element() == Atom::SULFUR) { + o_idx = getLinkOxygenIdx( leaptop, at, rnum ); +/* for (Atom::bond_iterator bat = leaptop[at].bondbegin(); bat != leaptop[at].bondend(); ++bat) { @@ -2507,14 +2540,37 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, o_idx = *bat; break; } - } + }*/ + if (o_idx != -1) break; } - if (o_idx != -1) break; + } + if (o_idx == -1) { + mprinterr("Error: Could not find oxygen link atom for '%s'\n", + leaptop.TruncResNameOnumId(rnum).c_str()); + return 1; } double newcharge = leaptop[o_idx].Charge() + 0.031; mprintf("\tChanging charge on %s from %f to %f\n", leaptop.AtomMaskName(o_idx).c_str(), leaptop[o_idx].Charge(), newcharge); leaptop.SetAtom(o_idx).SetCharge( newcharge ); + } else if (res.Name() == "MEX") { + int c_idx = -1; + // Need to adjust the charge on the carbon bonded to link oxygen by -0.039 + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { + if (leaptop[at].Element() == Atom::CARBON) { + c_idx = getLinkCarbonIdx( leaptop, at, rnum ); + if (c_idx != -1) break; + } + } + if (c_idx == -1) { + mprinterr("Error: Could not find carbon bonded to oxygen link atom for '%s'\n", + leaptop.TruncResNameOnumId(rnum).c_str()); + return 1; + } + double newcharge = leaptop[c_idx].Charge() - 0.039; + mprintf("\tChanging charge on %s from %f to %f\n", + leaptop.AtomMaskName(c_idx).c_str(), leaptop[c_idx].Charge(), newcharge); + leaptop.SetAtom(c_idx).SetCharge( newcharge ); } } From dda59f9c74587489454a9aba905b276947c1aa04 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 19:27:06 -0400 Subject: [PATCH 264/368] Save format type when reading to allow easy write back in same format if desired --- src/ParmFile.cpp | 16 +++++++++------- src/ParmFile.h | 3 ++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/ParmFile.cpp b/src/ParmFile.cpp index c054bbab4b..268e8da2d9 100644 --- a/src/ParmFile.cpp +++ b/src/ParmFile.cpp @@ -13,7 +13,9 @@ #include "Parm_Gromacs.h" /** CONSTRUCTOR */ -ParmFile::ParmFile() {} +ParmFile::ParmFile() : + pfType_(UNKNOWN_PARM) +{} // ----- STATIC VARS / ROUTINES ------------------------------------------------ // NOTE: Must be in same order as ParmFormatType @@ -115,7 +117,7 @@ int ParmFile::ReadTopology(Topology& Top, FileName const& fnameIn, } parmName_ = fnameIn; ArgList argIn = argListIn; - ParmFormatType pfType; + pfType_ = UNKNOWN_PARM; ParmIO* parmio = 0; Top.SetDebug( debugIn ); BondSearch::Type bstype; @@ -154,20 +156,20 @@ int ParmFile::ReadTopology(Topology& Top, FileName const& fnameIn, // 'as' keyword specifies a format std::string as_arg = argIn.GetStringKey("as"); if (!as_arg.empty()) { - pfType = (ParmFormatType)FileTypes::GetFormatFromString( PF_KeyArray, as_arg, UNKNOWN_PARM ); - if (pfType == UNKNOWN_PARM) { + pfType_ = (ParmFormatType)FileTypes::GetFormatFromString( PF_KeyArray, as_arg, UNKNOWN_PARM ); + if (pfType_ == UNKNOWN_PARM) { mprinterr("Error: Topology format '%s' not recognized.\n", as_arg.c_str()); return 1; } - parmio = (ParmIO*)FileTypes::AllocIO( PF_AllocArray, pfType, false ); + parmio = (ParmIO*)FileTypes::AllocIO( PF_AllocArray, pfType_, false ); } else - parmio = DetectFormat( parmName_, pfType ); + parmio = DetectFormat( parmName_, pfType_ ); if (parmio == 0) { mprinterr("Error: Could not determine format of topology '%s'\n", parmName_.full()); return 1; } mprintf("\tReading '%s' as %s\n", parmName_.full(), - FileTypes::FormatDescription(PF_AllocArray, pfType) ); + FileTypes::FormatDescription(PF_AllocArray, pfType_) ); parmio->SetDebug( debugIn ); parmio->SetOffset( bondoffset ); parmio->SetBondSearchType( bstype ); diff --git a/src/ParmFile.h b/src/ParmFile.h index 2b09704e79..c003761ff2 100644 --- a/src/ParmFile.h +++ b/src/ParmFile.h @@ -47,6 +47,7 @@ class ParmFile { /// \return Allocated ParmIO if given file matches known type, 0 otherwise. static ParmIO* DetectFormat(FileName const&, ParmFormatType&); - FileName parmName_; ///< Topology input/output file name. + FileName parmName_; ///< Topology input/output file name. + ParmFormatType pfType_; ///< Format of topology file. }; #endif From 0b1f4fc7d88f9e3ee1280ee5ab346192649b692d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 4 Nov 2021 20:32:00 -0400 Subject: [PATCH 265/368] Add function to return last type read --- src/ParmFile.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ParmFile.h b/src/ParmFile.h index c003761ff2..dd9e632b17 100644 --- a/src/ParmFile.h +++ b/src/ParmFile.h @@ -43,6 +43,8 @@ class ParmFile { FileName const& ParmFilename() { return parmName_; } /// \return ParmFormatType of given file or UNKNOWN_PARM. static ParmFormatType DetectFormat(FileName const&); + /// \return Format of last read file + ParmFormatType CurrentFormat() const { return pfType_; } private : /// \return Allocated ParmIO if given file matches known type, 0 otherwise. static ParmIO* DetectFormat(FileName const&, ParmFormatType&); From d0b8cfb4d16e482c5ca49902b45bf9bfc5c10dc0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 09:46:59 -0400 Subject: [PATCH 266/368] If topology becomes modified, write it back out --- src/Exec_PrepareForLeap.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 71ea6183da..8ededf4fd7 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2522,6 +2522,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, ParmFile parm; if (parm.ReadTopology(leaptop, topname, debug_)) return 1; + bool top_is_modified = false; // Go through each residue. Find ones that need to be adjusted. for (int rnum = 0; rnum != leaptop.Nres(); rnum++) { @@ -2532,15 +2533,6 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { if (leaptop[at].Element() == Atom::SULFUR) { o_idx = getLinkOxygenIdx( leaptop, at, rnum ); -/* - for (Atom::bond_iterator bat = leaptop[at].bondbegin(); - bat != leaptop[at].bondend(); ++bat) - { - if (leaptop[*bat].Element() == Atom::OXYGEN && leaptop[*bat].ResNum() != rnum) { - o_idx = *bat; - break; - } - }*/ if (o_idx != -1) break; } } @@ -2553,6 +2545,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, mprintf("\tChanging charge on %s from %f to %f\n", leaptop.AtomMaskName(o_idx).c_str(), leaptop[o_idx].Charge(), newcharge); leaptop.SetAtom(o_idx).SetCharge( newcharge ); + top_is_modified = true; } else if (res.Name() == "MEX") { int c_idx = -1; // Need to adjust the charge on the carbon bonded to link oxygen by -0.039 @@ -2571,10 +2564,10 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, mprintf("\tChanging charge on %s from %f to %f\n", leaptop.AtomMaskName(c_idx).c_str(), leaptop[c_idx].Charge(), newcharge); leaptop.SetAtom(c_idx).SetCharge( newcharge ); + top_is_modified = true; } } - // DEBUG: Print out total charge on each residue for (Topology::res_iterator res = leaptop.ResStart(); res != leaptop.ResEnd(); ++res) { @@ -2585,6 +2578,12 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, leaptop.TruncResNameOnumId(res-leaptop.ResStart()).c_str(), tcharge); } + // If topology was modified, write it back out + if (top_is_modified) { + mprintf("\tWriting modified topology back to '%s'\n", topname.c_str()); + parm.WriteTopology(leaptop, topname, parm.CurrentFormat(), debug_); + } + return 0; } From 6beee9c0ff2b7f642b651de8ec0f3d3e4233d023 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 10:08:27 -0400 Subject: [PATCH 267/368] Add modification for ACX --- src/Exec_PrepareForLeap.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8ededf4fd7..16031d9d9b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2565,6 +2565,33 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, leaptop.AtomMaskName(c_idx).c_str(), leaptop[c_idx].Charge(), newcharge); leaptop.SetAtom(c_idx).SetCharge( newcharge ); top_is_modified = true; + } else if (res.Name() == "ACX") { + int c_idx = -1; + // Need to adjust the charge on the carbon bonded to link oxygen by +0.008 + for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { + if (leaptop[at].Element() == Atom::CARBON) { + // This needs to be the acetyl carbon, ensure it is bonded to an oxygen + for (Atom::bond_iterator bat = leaptop[at].bondbegin(); + bat != leaptop[at].bondend(); ++bat) + { + if (leaptop[*bat].Element() == Atom::OXYGEN) { + c_idx = getLinkCarbonIdx( leaptop, at, rnum ); + if (c_idx != -1) break; + } + } + if (c_idx != -1) break; + } + } + if (c_idx == -1) { + mprinterr("Error: Could not find carbon bonded to oxygen link atom for '%s'\n", + leaptop.TruncResNameOnumId(rnum).c_str()); + return 1; + } + double newcharge = leaptop[c_idx].Charge() + 0.008; + mprintf("\tChanging charge on %s from %f to %f\n", + leaptop.AtomMaskName(c_idx).c_str(), leaptop[c_idx].Charge(), newcharge); + leaptop.SetAtom(c_idx).SetCharge( newcharge ); + top_is_modified = true; } } From 8dbc24434fb8e4f5a1a4f112967a11699d3f9969 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 10:23:45 -0400 Subject: [PATCH 268/368] Add ACX recognition --- src/Exec_PrepareForLeap.cpp | 46 ++++++++++++++++++++++++++++++++++++- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 16031d9d9b..4f3190969b 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1459,6 +1459,7 @@ Exec_PrepareForLeap::FunctionalGroupType const { selected.clear(); + // ----- Sulfur ---------------------- if (topIn[atIdx].Element() == Atom::SULFUR && topIn[atIdx].ResNum() == rnum && topIn[atIdx].Nbonds() == 4) { @@ -1479,6 +1480,7 @@ const if (bonds_to_o == 4) { return G_SO3; } + // ----- Carbon ---------------------- } else if (topIn[atIdx].Element() == Atom::CARBON && topIn[atIdx].ResNum() == rnum) { //so3_idx = atIdx; @@ -1499,7 +1501,37 @@ const } } else if (topIn[atIdx].Nbonds() == 1) return G_CH3; - + } else if (topIn[atIdx].Nbonds() == 3) { + // O + // || + // Check for - C - CH3 + bool has_o = false; + bool has_ch3 = false; + Iarray ch3_atoms; + for (Atom::bond_iterator bat = topIn[atIdx].bondbegin(); + bat != topIn[atIdx].bondend(); ++bat) + { + if (*bat != linkAtIdx) { + if (topIn[*bat].Element() == Atom::OXYGEN) { + has_o = true; + selected.push_back(*bat); + } else if (topIn[*bat].Element() == Atom::CARBON) { + FunctionalGroupType fgt = IdFunctionalGroup_Silent(ch3_atoms, rnum, *bat, atIdx, topIn); + has_ch3 = (fgt == G_CH3); + } else { + // If bonded to anything else, not Acetyl + has_o = false; + has_ch3 = false; + break; + } + } + } + if (has_o && has_ch3) { + for (Iarray::const_iterator cit = ch3_atoms.begin(); cit != ch3_atoms.end(); ++cit) + selected.push_back(*cit); + return G_ACX; + } + // ----- Oxygen ---------------------- } else if (topIn[atIdx].Element() == Atom::OXYGEN && topIn[atIdx].ResNum() == rnum) { selected.push_back( atIdx ); @@ -1552,6 +1584,9 @@ const } else if (groupType == G_CH3) { mprintf("\tFound CH3 group centered on atom '%s' bonded to '%s'\n", topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); + } else if (groupType == G_ACX) { + mprintf("\tFound Acetyl group centered on atom '%s' bonded to '%s'\n", + topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); } else if (groupType == G_OH) { mprintf("\tFound OH group centered on atom '%s' bonded to '%s'\n", topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); @@ -1637,6 +1672,15 @@ const ChangeAtomName(topIn.SetAtom(selected[3]), "H3"); } newResName = "MEX"; + } else if (groupType == G_ACX) { + ChangeAtomName(topIn.SetAtom(selected[0]), "C1A"); + ChangeAtomName(topIn.SetAtom(selected[1]), "O1A"); + ChangeAtomName(topIn.SetAtom(selected[2]), "C2A"); + if (selected.size() > 3) { + ChangeAtomName(topIn.SetAtom(selected[3]), "H1A"); + ChangeAtomName(topIn.SetAtom(selected[4]), "H2A"); + ChangeAtomName(topIn.SetAtom(selected[5]), "H3A"); + } } else { mprinterr("Internal Error: Unhandled group in CheckForFunctionalGroups()\n"); return 1; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index eda5180b79..af7cd99473 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -27,7 +27,7 @@ class Exec_PrepareForLeap : public Exec { /// Return type for DetermineAnomericForm enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; - enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_OH, G_OME, UNRECOGNIZED_GROUP }; + enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_ACX, G_OH, G_OME, UNRECOGNIZED_GROUP }; enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, SUGAR_MISSING_RING_O }; typedef std::vector ResStatArray; From 112de33c5fe2fdaa757fb03557e38803e39f5c73 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 10:51:42 -0400 Subject: [PATCH 269/368] Add note about deoxy carbon charge --- src/Exec_PrepareForLeap.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4f3190969b..d7903a6b55 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2568,6 +2568,8 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, bool top_is_modified = false; // Go through each residue. Find ones that need to be adjusted. + // NOTE: If deoxy carbons are ever handled, need to add H1 hydrogen and + // remove 0.274 from carbon. for (int rnum = 0; rnum != leaptop.Nres(); rnum++) { Residue const& res = leaptop.Res(rnum); From 991a8e445b99c90eb25091be0592fc9e44c0aebd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 11:37:24 -0400 Subject: [PATCH 270/368] Put tng and xdr in the cpp link var --- configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 8d8b8045da..fdc616fbf3 100755 --- a/configure +++ b/configure @@ -324,7 +324,7 @@ LIB_FLAG[$LXDRFILE]='-lxdrfile' LIB_STTC[$LXDRFILE]='libxdrfile.a' LIB_D_ON[$LXDRFILE]='' LIB_DOFF[$LXDRFILE]='-DNO_XDRFILE' -LIB_TYPE[$LXDRFILE]='ld' +LIB_TYPE[$LXDRFILE]='cpp' LIB_STAT[$LSANDER]='amberopt' LIB_CKEY[$LSANDER]='sanderlib' @@ -367,7 +367,7 @@ LIB_FLAG[$LTNGFILE]='-ltng_io' LIB_STTC[$LTNGFILE]='libtng_io.a' LIB_D_ON[$LTNGFILE]='-DHAS_TNGFILE' LIB_DOFF[$LTNGFILE]='' -LIB_TYPE[$LTNGFILE]='ld' +LIB_TYPE[$LTNGFILE]='cpp' LIB_STAT[$LOPENMM]='off' LIB_CKEY[$LOPENMM]='openmm' From 360814a22e173de3dfaa68910cd214ebef04040f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 11:37:49 -0400 Subject: [PATCH 271/368] Fix lib ordering --- devtools/converters/glycam.csv.to.dat/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/Makefile b/devtools/converters/glycam.csv.to.dat/Makefile index e4c06daa20..732d2ebaa3 100644 --- a/devtools/converters/glycam.csv.to.dat/Makefile +++ b/devtools/converters/glycam.csv.to.dat/Makefile @@ -12,14 +12,14 @@ glycam.csv.to.dat: glycam.csv.to.dat.cpp ../../../src/ArgList.h ../../../src/Str $(CXX) -o glycam.csv.to.dat glycam.csv.to.dat.cpp $(CPPTRAJ_SOURCE) # ----------------------------------------------- -#SOURCES=ArgList.cpp CIFfile.cpp \ +#SOURCES=../../src/ArgList.cpp CIFfile.cpp \ # FileIO_Bzip2.cpp FileIO_MpiShared.cpp \ # StringRoutines.cpp Atom.cpp CpptrajFile.cpp \ # FileIO_Gzip.cpp FileIO_Std.cpp BufferedLine.cpp \ # CpptrajStdio.cpp FileIO_Mpi.cpp ReadComponents.cpp \ # FileName.cpp NameType.cpp #OBJECTS=$(SOURCES:.cpp=.o) -LIBS=$(CPPTRAJLIB)/libcpptraj_core.a $(CPPTRAJLIB)/libcpptraj_file.a +LIBS=$(CPPTRAJLIB)/libcpptraj_file.a $(CPPTRAJLIB)/libcpptraj_core.a ReadComponents: ReadComponents.cpp $(OBJECTS) libs $(CXX) -I../../../src -o ReadComponents ReadComponents.cpp $(LIBS) $(LDFLAGS) From 4450cf599a930c124531dae722276ca7fb566a06 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 11:38:06 -0400 Subject: [PATCH 272/368] Remove obsolete code --- .../glycam.csv.to.dat/ReadComponents.cpp | 49 ------------------- 1 file changed, 49 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 677da4d6d5..73f783287c 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -1,54 +1,6 @@ #include "ArgList.h" #include "CIFfile.h" -int ReadComponents(const char* fname) { - FILE* infile = fopen(fname, "rb"); - if (infile == 0) { - fprintf(stderr,"Error: Could not open file.\n"); - return 1; - } - - const int bufsize = 2047; - char buffer[bufsize+1]; - - while ( (fgets(buffer, bufsize, infile)) != 0) - { - ArgList line(buffer, " \r\n"); - if (line.Nargs() > 1) { - ArgList flag(line[0], "."); - if (flag.Nargs() > 1 && - flag[0] == "_chem_comp" && - flag[1] == "id") - { - //printf("%s", buffer); - // Get name - bool hasname = false; - fgets(buffer, bufsize, infile); - ArgList line2(buffer, " \r\n"); - if (line2.Nargs() == 1 && line2[0] == "_chem_comp.name") { - printf("Warning: semicolon name.\n"); - } else if (line2.Nargs() > 1) { - ArgList flag2(line2[0], "."); - if (flag2.Nargs() > 1 && - flag2[0] == "_chem_comp" || - flag2[1] == "name") - hasname = true; - } - if (!hasname) { - fprintf(stdout,"Warning: id not followed by name: %s\n", line[1].c_str()); - fprintf(stdout,"%s", buffer); - //fclose(infile); - //return 1; - } - } - } - } - - fclose(infile); - - return 0; -} - /** Extract the "id" field from data with given name. */ std::string ExtractId(CIFfile const& cif, std::string const& name) { std::string id; @@ -177,7 +129,6 @@ int ReadCIF(const char* fname) { } int main(int argc, char** argv) { - //if (ReadComponents("components.cif")) return 1; if (ReadCIF("components.cif")) return 1; return 0; } From 4c17f56ba8fdde0368e614044519110f5dd2567f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 11:38:28 -0400 Subject: [PATCH 273/368] Remove old code --- src/Exec_PrepareForLeap.cpp | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index d7903a6b55..3491a3ecb3 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2278,32 +2278,9 @@ const for (AtomMask::const_iterator atm = mask.begin(); atm != mask.end(); ++atm) atomsToKeep[*atm] = false; } -/* - unsigned int nRemoved = 0; - for (Topology::mol_iterator mol = topIn.MolStart(); mol != topIn.MolEnd(); ++mol) { - if (mol->IsSolvent()) { - for (Unit::const_iterator seg = mol->MolUnit().segBegin(); - seg != mol->MolUnit().segEnd(); - ++seg) - for (int satm = seg->Begin(); satm < seg->End(); ++satm) - { - atomsToKeep[satm] = false; - ++nRemoved; - } - } - } - if (nRemoved == 0) - mprintf("\tNo solvent to remove.\n"); - else - mprintf("\t# solvent removed: %u\n", nRemoved); -*/ - } - //if (remove_h) { - // for (Topology::atom_iterator atom = topIn.begin(); atom != topIn.end(); ++atom) { - // if (atom->Element() == Atom::HYDROGEN) - // atomsToKeep[atom - topIn.begin()] = false; - // } - //} + + } + // Remove extra alternate atom locations if (altLocChar != '\0') { if (topIn.AtomAltLoc().empty()) { mprintf("\tNo alternate atom locations.\n"); @@ -2974,6 +2951,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) //} //myMap_.DetermineAtomIDs(); } + // ----------------------------------- // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); From c56d7ccd62d57463faabbb42bfde254595353c02 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 13:54:38 -0400 Subject: [PATCH 274/368] Fix the deoxy note --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3491a3ecb3..9a6c7aae5f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2546,7 +2546,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, bool top_is_modified = false; // Go through each residue. Find ones that need to be adjusted. // NOTE: If deoxy carbons are ever handled, need to add H1 hydrogen and - // remove 0.274 from carbon. + // add the former -OH charge to the carbon. for (int rnum = 0; rnum != leaptop.Nres(); rnum++) { Residue const& res = leaptop.Res(rnum); From e9c67e51bc8b409df2f2fc3d055d735c7c404412 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 5 Nov 2021 14:25:36 -0400 Subject: [PATCH 275/368] Do better error reporting when sugars are not recognized. --- src/Exec_PrepareForLeap.cpp | 66 ++++++++++++++++++++++--------------- src/Exec_PrepareForLeap.h | 25 ++++++++++---- 2 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9a6c7aae5f..8670dedb92 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -19,7 +19,8 @@ /** CONSTRUCTOR - Incomplete setup; set anomeric atom as residue first atom * so that ResNum() works. */ -Exec_PrepareForLeap::Sugar::Sugar(int firstat) : +Exec_PrepareForLeap::Sugar::Sugar(StatType status, int firstat) : + stat_(status), ring_oxygen_atom_(-1), anomeric_atom_(firstat), ano_ref_atom_(-1), @@ -30,6 +31,7 @@ Exec_PrepareForLeap::Sugar::Sugar(int firstat) : /** CONSTRUCTOR - Set ring atom indices and ring type. */ Exec_PrepareForLeap::Sugar::Sugar(int roa, int aa, int ara, int hs, Iarray const& RA, Iarray const& CA) : + stat_(SETUP_OK), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), @@ -51,10 +53,16 @@ int Exec_PrepareForLeap::Sugar::ResNum(Topology const& topIn) const { return topIn[anomeric_atom_].ResNum(); } +/** Correspond to Sugar::StatType */ +const char* Exec_PrepareForLeap::Sugar::StatTypeStr_[] = { + "OK", "Missing ring oxygen", "Multiple ring oxygens", "Missing chain atoms", + "Missing anomeric reference", "Missing configurational carbon" }; + /** Print info about the sugar to STDOUT. */ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { if (NotSet()) { - mprintf("\t%s : Not Set.\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str()); + mprintf("\t%s : Not Set. %s\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str(), + StatTypeStr_[stat_]); } else { mprintf("\t%s :\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str()); mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); @@ -676,11 +684,9 @@ const // ----------------------------------------------- /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ -Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn, - IdSugarRingStatType& stat) +Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn) const { - stat = ID_OK; Residue const& res = topIn.Res(rnum); // Determine candidates for ring oxygen atoms. @@ -713,8 +719,7 @@ const if (potentialRingStartAtoms.empty()) { mprintf("Warning: Ring oxygen could not be identified for %s\n", topIn.TruncResNameOnumId(rnum).c_str()); - stat = ID_MISSING_O; - return Sugar(res.FirstAtom()); + return Sugar(Sugar::MISSING_O, res.FirstAtom()); } // Use the previously-set up AtomMap to help determine stereocenters @@ -853,7 +858,7 @@ const mprinterr("Error: Multiple potential ring atoms: %s and %s\n", topIn.ResNameNumAtomNameNum(potentialRingStartAtoms[ring_atom_idx]).c_str(), topIn.ResNameNumAtomNameNum(*ringat).c_str()); - return Sugar(res.FirstAtom()); + return Sugar(Sugar::MULTIPLE_O, res.FirstAtom()); } // Place the ring atoms into an array without the terminating -1 Iarray& RA = Ring_Atoms.back(); @@ -869,8 +874,7 @@ const } // END loop over potential ring atoms if (ring_atom_idx == -1) { mprinterr("Error: Sugar ring oxygen could not be identified.\n"); - stat = ID_ERR; - return Sugar(res.FirstAtom()); + return Sugar(Sugar::MISSING_O, res.FirstAtom()); } ring_oxygen_atom = potentialRingStartAtoms[ring_atom_idx]; @@ -889,8 +893,7 @@ const carbon_chain = RA; if (FindRemainingChainCarbons(carbon_chain, ring_end_atom, topIn, rnum, RA)) { mprinterr("Error: Could not find remaining chain carbons.\n"); - stat = ID_ERR; - return Sugar(res.FirstAtom()); + return Sugar(Sugar::MISSING_CHAIN, res.FirstAtom()); } if (debug_ > 0) { mprintf("DEBUG: Complete carbon chain (from anomeric carbon):\n"); @@ -901,8 +904,7 @@ const Iarray previous_chain; if (FindRemainingChainCarbons(previous_chain, anomeric_atom, topIn, rnum, RA)) { mprinterr("Error: Could not find previous chain carbons.\n"); - stat = ID_ERR; - return Sugar(res.FirstAtom()); + return Sugar(Sugar::MISSING_CHAIN, res.FirstAtom()); } if (!previous_chain.empty()) { //if (debug_ > 0) { @@ -931,13 +933,11 @@ const if (ano_ref_atom == -1) { mprinterr("Error: Anomeric reference atom could not be identified.\n"); - stat = ID_ERR; - return Sugar(res.FirstAtom()); + return Sugar(Sugar::MISSING_ANO_REF, res.FirstAtom()); } if (highest_stereocenter == -1) { mprinterr("Error: Highest stereocenter atom could not be identified.\n"); - stat = ID_ERR; - return Sugar(res.FirstAtom()); + return Sugar(Sugar::MISSING_CONFIG, res.FirstAtom()); } // if (!ring_complete || RA.empty() || ring_oxygen_atom == -1) { @@ -1822,8 +1822,12 @@ const for (Iarray::const_iterator rnum = sugarResNums.begin(); rnum != sugarResNums.end(); ++rnum) { - IdSugarRingStatType stat; - Sugar sugar = IdSugarRing(*rnum, topIn, stat); + Sugar sugar = IdSugarRing(*rnum, topIn); + if (sugar.Status() != Sugar::SETUP_OK) { + mprintf("Warning: Problem identifying atoms for sugar '%s'\n", + topIn.TruncResNameOnumId(*rnum).c_str()); + } +/* if (stat == ID_ERR) { if (errorsAreFatal_) { mprinterr("Error: Problem identifying sugar ring for %s\n", @@ -1832,12 +1836,12 @@ const } else mprintf("Warning: Problem identifying sugar ring for %s\n", topIn.TruncResNameOnumId(*rnum).c_str()); - } - if (!sugar.NotSet()) { + }*/ + //if (!sugar.NotSet()) { sugarResidues.push_back( sugar ); if (debug_ > 0) sugarResidues.back().PrintInfo(topIn); - } + //} } if (c1bondsearch) { @@ -1845,6 +1849,7 @@ const for (std::vector::const_iterator sugar = sugarResidues.begin(); sugar != sugarResidues.end(); ++sugar) { + if (sugar->NotSet()) continue; int anomericAtom = sugar->AnomericAtom(); int rnum = sugar->ResNum(topIn); if (FindSugarC1Linkages(rnum, anomericAtom, topIn, frameIn)) { @@ -1864,6 +1869,7 @@ const for (std::vector::iterator sugar = sugarResidues.begin(); sugar != sugarResidues.end(); ++sugar) { + if (sugar->NotSet()) continue; if (CheckIfSugarIsTerminal(*sugar, topIn, frameIn)) { mprinterr("Error: Checking if sugar %s is terminal failed.\n", topIn.TruncResNameOnumId(sugar->ResNum(topIn)).c_str()); @@ -1882,6 +1888,7 @@ const for (std::vector::iterator sugar = sugarResidues.begin(); sugar != sugarResidues.end(); ++sugar) { + if (sugar->NotSet()) continue; if (CheckForFunctionalGroups(*sugar, topIn, frameIn)) { mprinterr("Error: Checking if sugar %s has sulfates failed.\n", topIn.TruncResNameOnumId( sugar->ResNum(topIn) ).c_str()); @@ -1904,9 +1911,10 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, // Need to set up the mask again since topology may have been modified. AtomMask sugarMask; if (sugarMask.SetMaskString( sugarmaskstr )) return 1; - mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); + //mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); if (topIn.SetupIntegerMask( sugarMask )) return 1; - sugarMask.MaskInfo(); + //sugarMask.MaskInfo(); + mprintf("\t%i sugar atoms selected.\n", sugarMask.Nselected()); if (sugarMask.None()) mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); else { @@ -1924,6 +1932,10 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, for (std::vector::const_iterator sugar = Sugars.begin(); sugar != Sugars.end(); ++sugar) { + if (sugar->NotSet()) { + resStat_[sugar->ResNum(topIn)] = SUGAR_SETUP_FAILED; + continue; + } // See if we recognize this sugar. if (IdentifySugar(*sugar, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) { @@ -3063,8 +3075,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } else if ( *it == SUGAR_MISSING_C1X ) { mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); - } else if ( *it == SUGAR_MISSING_RING_O ) { - mprintf("\t%s%s Sugar is missing ring oxygen and cannot be identified.\n", + } else if ( *it == SUGAR_SETUP_FAILED ) { + mprintf("\t%s%s Sugar setup failed and could not be identified.\n", msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); } } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index af7cd99473..2df62fa8fb 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -26,10 +26,9 @@ class Exec_PrepareForLeap : public Exec { typedef std::vector Iarray; /// Return type for DetermineAnomericForm enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; - enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_ACX, G_OH, G_OME, UNRECOGNIZED_GROUP }; enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, - SUGAR_MISSING_RING_O }; + SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; inline void ChangeResName(Residue&, NameType const&) const; @@ -59,10 +58,9 @@ class Exec_PrepareForLeap : public Exec { int CalcConfigCarbonTorsion(double&, int, Iarray const&, Topology const&, Frame const&) const; - /// Error status for IdSugarRing - enum IdSugarRingStatType { ID_OK = 0, ID_ERR, ID_MISSING_O }; /// \return Sugar with atom indices set up - Sugar IdSugarRing(int, Topology const&, IdSugarRingStatType&) const; + Sugar IdSugarRing(int, Topology const&) const; + /// Change PDB atom names to Glycam names int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&, AnomerRetType) const; /// \return If furanose is up or down AnomerRetType DetermineUpOrDown(bool&, std::string&, Sugar const&, Topology const&, Frame const&) const; @@ -154,12 +152,21 @@ class Exec_PrepareForLeap::Sugar { FURANOSE, ///< Ring is 4 carbons, 1 oxygen UNKNOWN_RING ///< Some unknown ring type }; - /// CONSTRUCTOR - residue first atom, incomplete setup - Sugar(int); + /// Sugar status. Keep synced with StatTypeStr_ + enum StatType { SETUP_OK = 0, ///< Regular sugar, setup complete + MISSING_O, ///< Could not find ring oxygen + MULTIPLE_O, ///< Multiple potential ring oxygen atoms + MISSING_CHAIN, ///< Could not find all chain carbons + MISSING_ANO_REF, ///< Missing anomeric reference atom + MISSING_CONFIG ///< Missing configurational carbon + }; + /// CONSTRUCTOR - Status and residue first atom, incomplete setup + Sugar(StatType, int); /// CONSTRUCTOR - ring O, Anomeric, Anomeric Ref, Highest Sterocenter, ring atoms, chain atoms Sugar(int,int,int,int,Iarray const&,Iarray const&); inline int ResNum(Topology const&) const; + StatType Status() const { return stat_; } int RingOxygenAtom() const { return ring_oxygen_atom_; } int AnomericAtom() const { return anomeric_atom_; } int AnomericRefAtom() const { return ano_ref_atom_; } @@ -179,6 +186,10 @@ class Exec_PrepareForLeap::Sugar { /// Remap internal indices according to given atom map. void RemapIndices(Iarray const&, int, int); private: + /// Strings corresponding to StatType + static const char* StatTypeStr_[]; + + StatType stat_; ///< Setup status int ring_oxygen_atom_; ///< Index of the ring oxygen atom int anomeric_atom_; ///< Index of the anomeric C atom (ring start) int ano_ref_atom_; ///< Index of the anomeric reference C atom From c35f0b18a0f85ed9a9999e27327afd89eb27e399 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 8 Nov 2021 09:58:16 -0500 Subject: [PATCH 276/368] Add direct PDB to glycam mapping --- .../glycam.csv.to.dat/ReadComponents.cpp | 135 ++++++++++++------ 1 file changed, 94 insertions(+), 41 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 73f783287c..5494aafeda 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -1,6 +1,9 @@ #include "ArgList.h" #include "CIFfile.h" +/// File for direct PDB name to glycam mapping +static FILE* direct_pdb_to_glycam = 0; + /** Extract the "id" field from data with given name. */ std::string ExtractId(CIFfile const& cif, std::string const& name) { std::string id; @@ -16,10 +19,50 @@ std::string ExtractId(CIFfile const& cif, std::string const& name) { return id; } +void NameToForm(std::string const& name, std::string const& glyc, + std::string& form, std::string& chirality, std::string& ring) +{ + // alpha-L-arabinopyranose + ArgList list1(name, "-"); + if (list1.hasKey("alpha")) + form = "A"; + else if (list1.hasKey("beta")) + form = "B"; + else + fprintf(stdout,"ERROR: Could not extract form.\n"); + if (glyc == "S") + // S is always D for glycam + chirality = "D"; + else if (list1.hasKey("D")) + chirality = "D"; + else if (list1.hasKey("L")) + chirality = "L"; + else + fprintf(stdout,"ERROR: Could not extract chirality.\n"); + ArgList remain = list1.RemainingArgs(); + ring = "P"; + for (int iarg = 0; iarg != remain.Nargs(); iarg++) + { + std::size_t found = remain[iarg].find("furanose"); + if (found != std::string::npos) { + ring = "F"; + break; + } + //else + ////found = list1[2].find("furanose") + //// assume P + //ring = "P"; + } +} + /** Print ID to stdout. */ -void PrintId(std::string const& name, std::string const& id) { +void PrintId(std::string const& name, std::string const& id, std::string const& glyc) { if (!id.empty()) { - printf(" %s %s", name.c_str(), id.c_str()); + printf(" %s %s %s", name.c_str(), id.c_str(), glyc.c_str()); + std::string form, chirality, ring; + NameToForm(name, glyc, form, chirality, ring); + fprintf(direct_pdb_to_glycam, "%s %s %s %s %s\n", + id.c_str(), glyc.c_str(), form.c_str(), chirality.c_str(), ring.c_str()); } printf("\n\n"); } @@ -28,7 +71,7 @@ typedef std::vector Sarray; /** Loop over alpha, beta, D, and L forms. */ void Loops(CIFfile const& cif, std::string const& lead, - Sarray const& prefixes, Sarray const& suffixes) + Sarray const& prefixes, Sarray const& suffixes, Sarray const& glycam) { Sarray forms; forms.push_back("alpha"); @@ -38,7 +81,8 @@ void Loops(CIFfile const& cif, std::string const& lead, chirality.push_back("D"); chirality.push_back("L"); - for (Sarray::const_iterator pref = prefixes.begin(); pref != prefixes.end(); ++pref) { + Sarray::const_iterator glyc = glycam.begin(); + for (Sarray::const_iterator pref = prefixes.begin(); pref != prefixes.end(); ++pref, ++glyc) { for (Sarray::const_iterator suff = suffixes.begin(); suff != suffixes.end(); ++suff) { for (Sarray::const_iterator form = forms.begin(); form != forms.end(); ++form) { for (Sarray::const_iterator chir = chirality.begin(); chir != chirality.end(); ++chir) { @@ -47,7 +91,7 @@ void Loops(CIFfile const& cif, std::string const& lead, name.assign( lead + "-" ); name.append( *form + "-" + *chir + "-" + *pref + *suff ); std::string id = ExtractId(cif, name); - PrintId( name, id ); + PrintId( name, id, *glyc ); } } } @@ -55,16 +99,24 @@ void Loops(CIFfile const& cif, std::string const& lead, } /** Loops, no lead string. */ -void Loops(CIFfile const& cif, Sarray const& prefixes, Sarray const& suffixes) { - Loops(cif, std::string(""), prefixes, suffixes); +void Loops(CIFfile const& cif, Sarray const& prefixes, Sarray const& suffixes, + Sarray const& glycam) +{ + Loops(cif, std::string(""), prefixes, suffixes, glycam); } /** Read everything from the given CIF file. */ int ReadCIF(const char* fname) { - CIFfile cif; + direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); + if (direct_pdb_to_glycam == 0) { + fprintf(stderr,"Error: Could not open direct pdb to glycam file.\n"); + return 1; + } + CIFfile cif; if (cif.Read(fname, 0)) return 1; + // DEBUG // //CIFfile::DataBlock lastBlock = cif.GetDataBlock("_chem_comp"); // CIFfile::DataBlock const& lastBlock = cif.GetBlockWithColValue("_chem_comp", @@ -72,59 +124,60 @@ int ReadCIF(const char* fname) { // "alpha-D-arabinopyranose"); // lastBlock.ListData(); - Sarray prefixes; - prefixes.push_back("arabino"); // A - prefixes.push_back("lyxo"); // D - prefixes.push_back("ribo"); // R - prefixes.push_back("xylo"); // X - prefixes.push_back("allo"); // N - prefixes.push_back("altro"); // E - prefixes.push_back("galacto"); // L - prefixes.push_back("gluco"); // G - prefixes.push_back("gulo"); // K - prefixes.push_back("ido"); // I (glycam does not have?) - prefixes.push_back("manno"); // M - prefixes.push_back("talo"); // T - prefixes.push_back("fructo"); // C - prefixes.push_back("psico"); // P - prefixes.push_back("sorbo"); // B - prefixes.push_back("tagato"); // J - prefixes.push_back("fuco"); // F - prefixes.push_back("quinovo"); // Q - prefixes.push_back("rhamno"); // H + Sarray prefixes; Sarray glycam; + prefixes.push_back("arabino"); glycam.push_back("A"); // A + prefixes.push_back("lyxo"); glycam.push_back("D"); // D + prefixes.push_back("ribo"); glycam.push_back("R"); // R + prefixes.push_back("xylo"); glycam.push_back("X"); // X + prefixes.push_back("allo"); glycam.push_back("N"); // N + prefixes.push_back("altro"); glycam.push_back("E"); // E + prefixes.push_back("galacto"); glycam.push_back("L"); // L + prefixes.push_back("gluco"); glycam.push_back("G"); // G + prefixes.push_back("gulo"); glycam.push_back("K"); // K + prefixes.push_back("ido"); glycam.push_back("I"); // I (glycam does not have?) + prefixes.push_back("manno"); glycam.push_back("M"); // M + prefixes.push_back("talo"); glycam.push_back("T"); // T + prefixes.push_back("fructo"); glycam.push_back("C"); // C + prefixes.push_back("psico"); glycam.push_back("P"); // P + prefixes.push_back("sorbo"); glycam.push_back("B"); // B + prefixes.push_back("tagato"); glycam.push_back("J"); // J + prefixes.push_back("fuco"); glycam.push_back("F"); // F + prefixes.push_back("quinovo"); glycam.push_back("Q"); // Q + prefixes.push_back("rhamno"); glycam.push_back("H"); // H Sarray suffixes; suffixes.push_back("pyranose"); suffixes.push_back("furanose"); - Loops(cif, prefixes, suffixes); + Loops(cif, prefixes, suffixes, glycam); // ----------------------------------- - Sarray pprefixes; - pprefixes.push_back("galacto"); // O - pprefixes.push_back("gluco"); // Z - pprefixes.push_back("ido"); // U + Sarray pprefixes; Sarray pglycam; + pprefixes.push_back("galacto"); pglycam.push_back("O"); // O + pprefixes.push_back("gluco"); pglycam.push_back("Z"); // Z + pprefixes.push_back("ido"); pglycam.push_back("U"); // U Sarray psuffixes; psuffixes.push_back("pyranuronic acid"); - Loops(cif, pprefixes, psuffixes); + Loops(cif, pprefixes, psuffixes, pglycam); // ----------------------------------- std::string lead("2-acetamido-2-deoxy"); - Sarray prefixes3; - prefixes3.push_back("galacto"); // V - prefixes3.push_back("gluco"); // Y - prefixes3.push_back("manno"); // W + Sarray prefixes3; Sarray glycam3; + prefixes3.push_back("galacto"); glycam3.push_back("V"); // V + prefixes3.push_back("gluco"); glycam3.push_back("Y"); // Y + prefixes3.push_back("manno"); glycam3.push_back("W"); // W Sarray suffixes3; suffixes3.push_back("pyranose"); - Loops(cif, lead, prefixes3, suffixes3); + Loops(cif, lead, prefixes3, suffixes3, glycam3); // ----------------------------------- - PrintId("N-acetyl-alpha-neuraminic acid", ExtractId(cif, "N-acetyl-alpha-neuraminic acid")); // SA - PrintId("N-acetyl-beta-neuraminic acid", ExtractId(cif, "N-acetyl-beta-neuraminic acid")); // SB + PrintId("N-acetyl-alpha-neuraminic acid", ExtractId(cif, "N-acetyl-alpha-neuraminic acid"), "S"); // SA + PrintId("N-acetyl-beta-neuraminic acid", ExtractId(cif, "N-acetyl-beta-neuraminic acid"), "S"); // SB + fclose(direct_pdb_to_glycam); return 0; } From 29d441c821abe37adbaab4c5ecd5a09bf93ec13e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 9 Nov 2021 09:07:42 -0500 Subject: [PATCH 277/368] Documentation --- src/Exec_PrepareForLeap.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 8670dedb92..fc2392daca 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2963,12 +2963,13 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) //} //myMap_.DetermineAtomIDs(); } - // ----------------------------------- + + // ----- Below here, no more removing/reordering atoms. ------------ // Each residue starts out unknown. resStat_.assign( topIn.Nres(), UNKNOWN ); - // Get masks for molecules now since topology may be modified later. + // Get masks for molecules now since bond info in topology may be modified later. std::vector molMasks; std::string mstr = argIn.GetStringKey("molmask"); while (!mstr.empty()) { From 8dd6433c5efbdcffa5f38a44e46ea962bf402f62 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 9 Nov 2021 09:32:45 -0500 Subject: [PATCH 278/368] Clean up output, hide some debug info --- src/Exec_PrepareForLeap.cpp | 57 +++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index fc2392daca..06d4d4224f 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1140,7 +1140,8 @@ const integerToString(it->Position()) ); } - mprintf("DEBUG:\t linkstr= '%s'\n", linkstr.c_str()); + if (debug_ > 0) + mprintf("DEBUG:\t linkstr= '%s'\n", linkstr.c_str()); if (linkstr == "T") linkcode = "0"; else if (linkstr == "O1") linkcode = "1"; else if (linkstr == "TO2") linkcode = "2"; @@ -1213,9 +1214,10 @@ const // Check if the other residue is a sugar or not if (!cmask.AtomInCharMask(*bat)) { // Atom is bonded to non-sugar residue. - mprintf("\t Sugar %s bonded to non-sugar %s at position %i\n", - topIn.ResNameNumAtomNameNum(at).c_str(), - topIn.ResNameNumAtomNameNum(*bat).c_str(), atomChainPosition+1); + mprintf("\t Sugar %s %s bonded to non-sugar %s %s at position %i\n", + topIn.TruncResNameOnumId(rnum).c_str(), *(topIn[at].Name()), + topIn.TruncResNameOnumId(topIn[*bat].ResNum()).c_str(), + *(topIn[*bat].Name()), atomChainPosition+1); bondsToRemove.push_back( BondType(at, *bat, -1) ); // Check if this is a recognized linkage to non-sugar Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); @@ -1247,9 +1249,10 @@ const } } else { // Atom is bonded to sugar residue - mprintf("\t Sugar %s bonded to sugar %s at position %i\n", - topIn.ResNameNumAtomNameNum(at).c_str(), - topIn.ResNameNumAtomNameNum(*bat).c_str(), atomChainPosition+1); + mprintf("\t Sugar %s %s bonded to sugar %s %s at position %i\n", + topIn.TruncResNameOnumId(rnum).c_str(), *(topIn[at].Name()), + topIn.TruncResNameOnumId(topIn[*bat].ResNum()).c_str(), + *(topIn[*bat].Name()), atomChainPosition+1); // Also remove inter-sugar bonds since leap cant handle branching if (at < *bat) sugarBondsToRemove.insert( BondType(at, *bat, -1) ); @@ -1335,10 +1338,11 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, return 1; } + static const char* AnomerRetStr[] = { 0, 0, "Alpha", "Beta" }; if (isDform) { - mprintf("\t %s Form is %s-D\n", sugarName.c_str(), formStr.c_str()); + mprintf("\t %s Form is %s(%s)-D\n", sugarName.c_str(), AnomerRetStr[form], formStr.c_str()); } else { - mprintf("\t %s Form is %s-L\n", sugarName.c_str(), formStr.c_str()); + mprintf("\t %s Form is %s(%s)-L\n", sugarName.c_str(), AnomerRetStr[form], formStr.c_str()); } // Identify linkages to other residues. @@ -1608,7 +1612,7 @@ const int original_at0 = topIn.Res(rnum).FirstAtom(); int original_at1 = topIn.Res(rnum).LastAtom(); std::string sugarName = topIn.TruncResNameOnumId(rnum); - mprintf("DEBUG: Functional group check: %s\n", sugarName.c_str()); + if (debug_ > 0) mprintf("DEBUG: Functional group check: %s\n", sugarName.c_str()); bool atomsRemain = true; while (atomsRemain) { @@ -1623,7 +1627,7 @@ const Iarray::const_iterator cat = sugar.ChainAtoms().begin(); for (; cat != sugar.ChainAtoms().end(); ++cat) { - mprintf("\t%s\n", *(topIn[*cat].Name())); + //mprintf("\t%s\n", *(topIn[*cat].Name())); // DEBUG for (Atom::bond_iterator oat = topIn[*cat].bondbegin(); oat != topIn[*cat].bondend(); ++oat) { @@ -1690,7 +1694,7 @@ const // Split the sulfate into a new residue named SO3 for Glycam. // This may involve reordering atoms within the residue, but not // any other atoms, so we should not have to update other sugars. - mprintf("DEBUG: Before split: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); + //mprintf("DEBUG: Before split: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); Iarray atomMap; if (topIn.SplitResidue(SO3, newResName, atomMap)) { mprinterr("Error: Could not split sulfate from residue '%s'.\n", sugarName.c_str()); @@ -1739,7 +1743,7 @@ const } } if (o1_atom == -1) return 0; - mprintf("DEBUG: Terminal check: %s O1 atom: '%s'\n", sugarName.c_str(), topIn.AtomMaskName(o1_atom).c_str()); + //mprintf("DEBUG: Terminal check: %s O1 atom: '%s'\n", sugarName.c_str(), topIn.AtomMaskName(o1_atom).c_str()); Iarray selected; FunctionalGroupType groupType = IdFunctionalGroup(selected, rnum, o1_atom, anomericAtom, topIn); @@ -1765,7 +1769,7 @@ const mprinterr("Internal Error: Unhandled group in CheckIfSugarIsTerminal\n"); return 1; } - mprintf("\t Will split into %s group.\n", newResName.c_str()); + //mprintf("\t Will split into %s group.\n", newResName.c_str()); // If terminal group is unrecognized, this could just be a regular O1 linkage if (selected.empty()) { @@ -1810,7 +1814,8 @@ const AtomMask sugarMask(sugarMaskStr); mprintf("\tLooking for sugars selected by '%s'\n", sugarMask.MaskString()); if (topIn.SetupIntegerMask( sugarMask )) return 1; - sugarMask.MaskInfo(); + //sugarMask.MaskInfo(); + mprintf("\tSelected %i sugar atoms.\n", sugarMask.Nselected()); if (sugarMask.None()) { mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); return 0; @@ -1914,18 +1919,16 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, //mprintf("\tPreparing sugars selected by '%s'\n", sugarMask.MaskString()); if (topIn.SetupIntegerMask( sugarMask )) return 1; //sugarMask.MaskInfo(); - mprintf("\t%i sugar atoms selected.\n", sugarMask.Nselected()); + mprintf("\t%i sugar atoms selected in %zu residues.\n", sugarMask.Nselected(), Sugars.size()); if (sugarMask.None()) mprintf("Warning: No sugar atoms selected by %s\n", sugarMask.MaskString()); else { CharMask cmask( sugarMask.ConvertToCharMask(), sugarMask.Nselected() ); - - for (std::vector::const_iterator sugar = Sugars.begin(); - sugar != Sugars.end(); ++sugar) - { - sugar->PrintInfo(topIn); + if (debug_ > 0) { + for (std::vector::const_iterator sugar = Sugars.begin(); + sugar != Sugars.end(); ++sugar) + sugar->PrintInfo(topIn); } - std::set sugarBondsToRemove; // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. @@ -2057,6 +2060,7 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co if (cysmask.None()) mprintf("Warning: No cysteine sulfur atoms selected by %s\n", cysmaskstr.c_str()); else { + int nExistingDisulfides = 0; int nDisulfides = 0; double cut2 = disulfidecut * disulfidecut; // Try to find potential disulfide sites. @@ -2068,9 +2072,11 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co for (AtomMask::const_iterator at2 = at1 + 1; at2 != cysmask.end(); ++at2) { if (topIn[*at1].IsBondedTo(*at2)) { - mprintf("\tExisting disulfide: %s to %s\n", - topIn.ResNameNumAtomNameNum(*at1).c_str(), - topIn.ResNameNumAtomNameNum(*at2).c_str()); + if (debug_ > 0) + mprintf("\tExisting disulfide: %s to %s\n", + topIn.ResNameNumAtomNameNum(*at1).c_str(), + topIn.ResNameNumAtomNameNum(*at2).c_str()); + nExistingDisulfides++; int idx1 = (int)(at1 - cysmask.begin()); int idx2 = (int)(at2 - cysmask.begin()); disulfidePartner[idx1] = idx2; @@ -2078,6 +2084,7 @@ int Exec_PrepareForLeap::SearchForDisulfides(double disulfidecut, std::string co } } } + mprintf("\t%i existing disulfide bonds.\n", nExistingDisulfides); // DEBUG - Print current array if (debug_ > 1) { mprintf("DEBUG: Disulfide partner array after existing:\n"); From d3f6deba1ef6a470d54d4b2a4ecd4d4a6e64a94f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 9 Nov 2021 09:57:55 -0500 Subject: [PATCH 279/368] Hide more debug info. Make functional group output simpler --- src/Chirality.cpp | 40 ++++++++++++++++++++------------- src/Chirality.h | 4 ++-- src/Exec_PrepareForLeap.cpp | 45 ++++++++++++++++++------------------- src/Exec_PrepareForLeap.h | 3 +++ 4 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/Chirality.cpp b/src/Chirality.cpp index d4837e52b6..4c44a23fac 100644 --- a/src/Chirality.cpp +++ b/src/Chirality.cpp @@ -80,7 +80,7 @@ class priority_element { */ Chirality::ChiralType Chirality::DetermineChirality(double& tors, int atnum, Topology const& topIn, - Frame const& frameIn) + Frame const& frameIn, int debugIn) { tors = 0.0; Atom const& atom = topIn[atnum]; @@ -91,11 +91,13 @@ Chirality::ChiralType Chirality::DetermineChirality(double& tors, int atnum, } // Calculate a priority score for each bonded atom. // First just use the atomic number. - mprintf("DEBUG: Determining priorities around atom %s\n", topIn.AtomMaskName(atnum).c_str()); + if (debugIn > 0) + mprintf("DEBUG: Determining priorities around atom %s\n", topIn.AtomMaskName(atnum).c_str()); std::vector priority; for (int idx = 0; idx != atom.Nbonds(); idx++) { priority.push_back( priority_element(atom.Bond(idx), topIn[atom.Bond(idx)].AtomicNumber()) ); - mprintf("DEBUG:\t\t%i Priority for %s is %i\n", idx, topIn.AtomMaskName(atom.Bond(idx)).c_str(), priority.back().Priority1()); + if (debugIn > 0) + mprintf("DEBUG:\t\t%i Priority for %s is %i\n", idx, topIn.AtomMaskName(atom.Bond(idx)).c_str(), priority.back().Priority1()); } // For any identical priorities, need to check who they are bonded to. for (int idx1 = 0; idx1 != atom.Nbonds(); idx1++) { @@ -104,16 +106,19 @@ Chirality::ChiralType Chirality::DetermineChirality(double& tors, int atnum, bool identical_priorities = true; int depth = 1; while (identical_priorities) { - mprintf("DEBUG: Priority of index %i == %i, depth %i\n", idx1, idx2, depth); + if (debugIn > 0) + mprintf("DEBUG: Priority of index %i == %i, depth %i\n", idx1, idx2, depth); std::vector Visited(topIn.Natom(), false); Visited[atnum] = true; priority[idx1].SetPriority2(totalPriority(topIn, atom.Bond(idx1), atom.ResNum(), 0, depth, Visited)); - mprintf("DEBUG:\tPriority2 of %i is %i\n", idx1, priority[idx1].Priority2()); + if (debugIn > 0) + mprintf("DEBUG:\tPriority2 of %i is %i\n", idx1, priority[idx1].Priority2()); Visited.assign(topIn.Natom(), false); Visited[atnum] = true; priority[idx2].SetPriority2(totalPriority(topIn, atom.Bond(idx2), atom.ResNum(), 0, depth, Visited)); - mprintf("DEBUG:\tPriority2 of %i is %i\n", idx2, priority[idx2].Priority2()); + if (debugIn > 0) + mprintf("DEBUG:\tPriority2 of %i is %i\n", idx2, priority[idx2].Priority2()); if (priority[idx1] != priority[idx2]) { identical_priorities = false; break; @@ -129,24 +134,27 @@ Chirality::ChiralType Chirality::DetermineChirality(double& tors, int atnum, } } std::sort(priority.begin(), priority.end()); - mprintf("DEBUG: Sorted by priority:"); - for (std::vector::const_iterator it = priority.begin(); - it != priority.end(); ++it) - mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); - mprintf("\n"); + if (debugIn > 0) { + mprintf("DEBUG: Sorted by priority:"); + for (std::vector::const_iterator it = priority.begin(); + it != priority.end(); ++it) + mprintf(" %s", topIn.AtomMaskName(it->AtNum()).c_str()); + mprintf("\n"); + } tors = Torsion( frameIn.XYZ(priority[0].AtNum()), frameIn.XYZ(priority[1].AtNum()), frameIn.XYZ(priority[2].AtNum()), frameIn.XYZ(atnum) ); - mprintf("DEBUG: Torsion around '%s' is %f", topIn.AtomMaskName(atnum).c_str(), tors*Constants::RADDEG); + if (debugIn > 0) + mprintf("DEBUG: Torsion around '%s' is %f", topIn.AtomMaskName(atnum).c_str(), tors*Constants::RADDEG); ChiralType ret; if (tors < 0) { ret = IS_S; - mprintf(" (S)\n"); + if (debugIn > 0) mprintf(" (S)\n"); } else { ret = IS_R; - mprintf(" (R)\n"); + if (debugIn > 0) mprintf(" (R)\n"); } return ret; } @@ -154,8 +162,8 @@ Chirality::ChiralType Chirality::DetermineChirality(double& tors, int atnum, /** Determine chirality around specified atom. */ Chirality::ChiralType Chirality::DetermineChirality(int atnum, Topology const& topIn, - Frame const& frameIn) + Frame const& frameIn, int debugIn) { double tors; - return DetermineChirality(tors, atnum, topIn, frameIn); + return DetermineChirality(tors, atnum, topIn, frameIn, debugIn); } diff --git a/src/Chirality.h b/src/Chirality.h index 489d738025..01e02db151 100644 --- a/src/Chirality.h +++ b/src/Chirality.h @@ -8,9 +8,9 @@ namespace Chirality { enum ChiralType { ERR = 0, IS_S, IS_R }; /// \return Chirality at specified atom, set torsion value -ChiralType DetermineChirality(double&, int, Topology const&, Frame const&); +ChiralType DetermineChirality(double&, int, Topology const&, Frame const&, int); /// \return Chirality at specified atom -ChiralType DetermineChirality(int, Topology const&, Frame const&); +ChiralType DetermineChirality(int, Topology const&, Frame const&, int); } } diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 06d4d4224f..0ae8ff3349 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -907,19 +907,19 @@ const return Sugar(Sugar::MISSING_CHAIN, res.FirstAtom()); } if (!previous_chain.empty()) { - //if (debug_ > 0) { + if (debug_ > 0) { mprintf("DEBUG: Previous carbon chain (from anomeric carbon):\n"); for (Iarray::const_iterator it = previous_chain.begin(); it != previous_chain.end(); ++it) mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - //} + } for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) previous_chain.push_back( *it ); carbon_chain = previous_chain; - //if (debug_ > 0) { + if (debug_ > 0) { mprintf("DEBUG: Complete carbon chain:\n"); for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) mprintf("\t\t%s\n", topIn.ResNameNumAtomNameNum(*it).c_str()); - //} + } } // Get the index of the highest stereocenter for (Iarray::const_iterator it = carbon_chain.begin(); it != carbon_chain.end(); ++it) @@ -991,10 +991,15 @@ Exec_PrepareForLeap::AnomerRetType Topology const& topIn, Frame const& frameIn) const { + int cdebug; + if (debug_ > 1) + cdebug = 1; + else + cdebug = 0; formStr.clear(); Cpptraj::Chirality::ChiralType ctypeR = Cpptraj::Chirality:: DetermineChirality(sugar.HighestStereocenter(), - topIn, frameIn); + topIn, frameIn, cdebug); if (ctypeR == Cpptraj::Chirality::ERR) { mprinterr("Error: Could not determine chirality for furanose.\n"); return A_ERR; @@ -1006,7 +1011,7 @@ const Cpptraj::Chirality::ChiralType ctypeA = Cpptraj::Chirality:: DetermineChirality(sugar.AnomericAtom(), - topIn, frameIn); + topIn, frameIn, cdebug); if (ctypeA == Cpptraj::Chirality::ERR) { mprinterr("Error: Could not determine chirality around anomeric atom for furanose.\n"); return A_ERR; @@ -1576,30 +1581,24 @@ const return UNRECOGNIZED_GROUP; } +/** Corresponds to FunctionalGroupType */ +const char* Exec_PrepareForLeap::FunctionalGroupStr_[] = { + "SO3", "CH3", "Acetyl", "OH", "OCH3", "Unrecognized" +}; + /** Identify functional group and print to stdout. */ Exec_PrepareForLeap::FunctionalGroupType Exec_PrepareForLeap::IdFunctionalGroup(Iarray& selected, int rnum, int atIdx, int linkAtIdx, Topology const& topIn) const { FunctionalGroupType groupType = IdFunctionalGroup_Silent(selected, rnum, atIdx, linkAtIdx, topIn); - if (groupType == G_SO3) { - mprintf("\tFound SO3 group centered on atom '%s' bonded to '%s'\n", - topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); - } else if (groupType == G_CH3) { - mprintf("\tFound CH3 group centered on atom '%s' bonded to '%s'\n", - topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); - } else if (groupType == G_ACX) { - mprintf("\tFound Acetyl group centered on atom '%s' bonded to '%s'\n", - topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); - } else if (groupType == G_OH) { - mprintf("\tFound OH group centered on atom '%s' bonded to '%s'\n", - topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); - } else if (groupType == G_OME) { - mprintf("\tFound OCH3 group centered on atom '%s' bonded to '%s'\n", - topIn.AtomMaskName(atIdx).c_str(), topIn.AtomMaskName(linkAtIdx).c_str()); - } else if (groupType != UNRECOGNIZED_GROUP) { - mprinterr("Internal Error: Unhandled group from IdFunctionalGroup()\n"); + if (groupType != UNRECOGNIZED_GROUP) { + mprintf("\tFound %s group centered on atom '%s %s' bonded to '%s'\n", + FunctionalGroupStr_[groupType], + topIn.TruncResNameOnumId(rnum).c_str(), + *(topIn[atIdx].Name()), *(topIn[linkAtIdx].Name())); } + return groupType; } diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 2df62fa8fb..08b8a498b3 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -31,6 +31,9 @@ class Exec_PrepareForLeap : public Exec { SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; + /// Keep synced with FunctionalGroupType + static const char* FunctionalGroupStr_[]; + inline void ChangeResName(Residue&, NameType const&) const; inline void ChangeAtomName(Atom&, NameType const&) const; From 3b95cc278be243304a6005933ff6d0521fce1578 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 10 Nov 2021 14:33:27 -0500 Subject: [PATCH 280/368] Add ability to read in existing glycam stuff --- .../glycam.csv.to.dat/GlycamPdbResMap.cpp | 126 ++++++++++++++++++ .../glycam.csv.to.dat/GlycamPdbResMap.h | 20 +++ .../converters/glycam.csv.to.dat/Makefile | 2 +- .../glycam.csv.to.dat/ReadComponents.cpp | 76 +++++++---- 4 files changed, 196 insertions(+), 28 deletions(-) create mode 100644 devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp create mode 100644 devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.h diff --git a/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp b/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp new file mode 100644 index 0000000000..379917958c --- /dev/null +++ b/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp @@ -0,0 +1,126 @@ +#include "GlycamPdbResMap.h" +#include "ArgList.h" +#include "CpptrajFile.h" +#include "CpptrajStdio.h" + +/** Load PDB to Glycam residue map from file. */ +int GlycamPdbResMap::Load(std::string const& fnameIn) +{ + std::string fname; + if (fnameIn.empty()) { + // Check CPPTRAJHOME + const char* env = getenv("CPPTRAJHOME"); + if (env != 0) { + fname.assign(env); + fname += "/dat/Carbohydrate_PDB_Glycam_Names.txt"; + } + mprintf("Info: Parameter file path from CPPTRAJHOME variable: '%s'\n", fname.c_str()); + } + if (fname.empty()) { + mprinterr("Error: No PDB->Glycam file specified and/or CPPTRAJHOME not set.\n"); + //SetGlycamPdbResMap(); + return 1; + } + mprintf("\tReading PDB residue name -> Glycam name map from '%s'\n", fname.c_str()); + + CpptrajFile infile; + if (infile.OpenRead(fname)) { + mprinterr("Error: Could not open Glycam residue map file.\n"); + return 1; + } + const char* ptr = 0; + // Describe which section of the file we are in + enum SectionType { PDB_RESMAP_SECTION = 0, PDB_ATOMMAP_SECTION, PDB_LINKAGE_RES_SECTION }; + SectionType section = PDB_RESMAP_SECTION; + while ( (ptr = infile.NextLine()) != 0 ) { + ArgList argline( ptr, " " ); + // Check for section change first + if (argline.Nargs() < 1) { + if (section == PDB_RESMAP_SECTION) { + //mprintf("DEBUG: Section change.\n"); + section = PDB_ATOMMAP_SECTION; + } else if (section == PDB_ATOMMAP_SECTION) { + section = PDB_LINKAGE_RES_SECTION; + } + } else if (argline[0][0] != '#') { + // Skipping comments, read sections + if (section == PDB_RESMAP_SECTION) { + // "" + if (argline.Nargs() != 3) { + mprinterr("Error: Expected only 3 columns in '%s' res map section, got %i\n", + infile.Filename().full(), argline.Nargs()); + mprinterr("Error: %s\n", ptr); + return 1; + } + ArgList pdbnames( argline[2], "," ); + if (pdbnames.Nargs() < 1) { + mprinterr("Error: No pdb names found.\n"); + mprinterr("Error: %s\n", ptr); + return 1; + } + // TODO handle glycam res names with > 1 char + for (int n = 0; n < pdbnames.Nargs(); n++) + pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) ); + } else if (section == PDB_ATOMMAP_SECTION) { + // ... + if (argline.Nargs() < 2) { + mprinterr("Error: Expected at least 2 columns in '%s' atom map section, got %i\n", + infile.Filename().full(), argline.Nargs()); + mprinterr("Error: %s\n", ptr); + return 1; + } + // TODO handle glycam res names with > 1 char + ArgList glycamnames( argline[0], "," ); + if (glycamnames.Nargs() < 1) { + mprinterr("Error: No Glycam names found.\n"); + mprinterr("Error: %s\n", ptr); + return 1; + } +/* + int glycam_map_idx = (int)pdb_glycam_name_maps_.size(); + pdb_glycam_name_maps_.push_back(NameMapType()); + pdb_glycam_name_maps_A_.push_back(NameMapType()); + pdb_glycam_name_maps_B_.push_back(NameMapType()); + NameMapType& currentMap = pdb_glycam_name_maps_.back(); + NameMapType& currentMapA = pdb_glycam_name_maps_A_.back(); + NameMapType& currentMapB = pdb_glycam_name_maps_B_.back(); + for (int col = 1; col < argline.Nargs(); col++) { + ArgList namepair( argline[col], "," ); + NameMapType* currentMapPtr = ¤tMap; + if (namepair.Nargs() == 3) { + // This name mapping is for a particular anomeric form + if (namepair[2] == "A") + currentMapPtr = ¤tMapA; + else if (namepair[2] == "B") + currentMapPtr = ¤tMapB; + else { + mprinterr("Error: For name pair, third arg should only be A or B: %s\n", ptr); + return 1; + } + } else if (namepair.Nargs() != 2) { + mprinterr("Error: Expected only 2 names for name pair, got %i\n", namepair.Nargs()); + mprinterr("Error: %s\n", ptr); + return 1; + } + currentMapPtr->insert( NamePairType(NameType(namepair[0]), NameType(namepair[1])) ); + } // END loop over name pair columns + // Map will be for each glycam res + for (ArgList::const_iterator gres = glycamnames.begin(); gres != glycamnames.end(); ++gres) + glycam_res_idx_map_.insert( ResIdxPairType( (*gres)[0], glycam_map_idx ) );*/ + } else if (section == PDB_LINKAGE_RES_SECTION) { + // + if (argline.Nargs() != 2) { + mprinterr("Error: Expected only 2 columns in '%s' linkage res map section, got %i\n", + infile.Filename().full(), argline.Nargs()); + mprinterr("Error: %s\n", ptr); + } + //pdb_glycam_linkageRes_map_.insert( NamePairType(NameType(argline[0]), + // NameType(argline[1])) ); + } + } // END not comment + } // END loop over file + infile.CloseFile(); + + return 0; +} + diff --git a/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.h b/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.h new file mode 100644 index 0000000000..482d1ce179 --- /dev/null +++ b/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.h @@ -0,0 +1,20 @@ +#ifndef INC_GLYCAMPDBRESMAP_H +#define INC_GLYCAMPDBRESMAP_H +#include +#include +#include "NameType.h" +class GlycamPdbResMap { + typedef std::pair PairType; + typedef std::map MapType; + public: + GlycamPdbResMap() {} + int Load(std::string const&); + unsigned int size() const { return pdb_to_glycam_.size(); } + + typedef MapType::const_iterator const_iterator; + const_iterator begin() const { return pdb_to_glycam_.begin(); } + const_iterator end() const { return pdb_to_glycam_.end(); } + private: + MapType pdb_to_glycam_; ///< Map PDB residue names to Glycam 1 char names +}; +#endif diff --git a/devtools/converters/glycam.csv.to.dat/Makefile b/devtools/converters/glycam.csv.to.dat/Makefile index 732d2ebaa3..865159d953 100644 --- a/devtools/converters/glycam.csv.to.dat/Makefile +++ b/devtools/converters/glycam.csv.to.dat/Makefile @@ -22,7 +22,7 @@ glycam.csv.to.dat: glycam.csv.to.dat.cpp ../../../src/ArgList.h ../../../src/Str LIBS=$(CPPTRAJLIB)/libcpptraj_file.a $(CPPTRAJLIB)/libcpptraj_core.a ReadComponents: ReadComponents.cpp $(OBJECTS) libs - $(CXX) -I../../../src -o ReadComponents ReadComponents.cpp $(LIBS) $(LDFLAGS) + $(CXX) -I../../../src -o ReadComponents ReadComponents.cpp GlycamPdbResMap.cpp $(LIBS) $(LDFLAGS) libs: cd ../../../src && $(MAKE) libstatic diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 5494aafeda..412093e6aa 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -1,8 +1,6 @@ #include "ArgList.h" #include "CIFfile.h" - -/// File for direct PDB name to glycam mapping -static FILE* direct_pdb_to_glycam = 0; +#include "GlycamPdbResMap.h" /** Extract the "id" field from data with given name. */ std::string ExtractId(CIFfile const& cif, std::string const& name) { @@ -59,10 +57,10 @@ void NameToForm(std::string const& name, std::string const& glyc, void PrintId(std::string const& name, std::string const& id, std::string const& glyc) { if (!id.empty()) { printf(" %s %s %s", name.c_str(), id.c_str(), glyc.c_str()); - std::string form, chirality, ring; - NameToForm(name, glyc, form, chirality, ring); - fprintf(direct_pdb_to_glycam, "%s %s %s %s %s\n", - id.c_str(), glyc.c_str(), form.c_str(), chirality.c_str(), ring.c_str()); + //std::string form, chirality, ring; + //NameToForm(name, glyc, form, chirality, ring); + //fprintf(direct_pdb_to_glycam, "%s %s %s %s %s\n", + // id.c_str(), glyc.c_str(), form.c_str(), chirality.c_str(), ring.c_str()); } printf("\n\n"); } @@ -105,25 +103,8 @@ void Loops(CIFfile const& cif, Sarray const& prefixes, Sarray const& suffixes, Loops(cif, std::string(""), prefixes, suffixes, glycam); } -/** Read everything from the given CIF file. */ -int ReadCIF(const char* fname) { - direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); - if (direct_pdb_to_glycam == 0) { - fprintf(stderr,"Error: Could not open direct pdb to glycam file.\n"); - return 1; - } - - CIFfile cif; - if (cif.Read(fname, 0)) return 1; - - - // DEBUG -// //CIFfile::DataBlock lastBlock = cif.GetDataBlock("_chem_comp"); -// CIFfile::DataBlock const& lastBlock = cif.GetBlockWithColValue("_chem_comp", -// "name", -// "alpha-D-arabinopyranose"); -// lastBlock.ListData(); - +/** Get PDB codes from sugar names */ +int GetPdbCodesFromNames(CIFfile& cif) { Sarray prefixes; Sarray glycam; prefixes.push_back("arabino"); glycam.push_back("A"); // A prefixes.push_back("lyxo"); glycam.push_back("D"); // D @@ -176,11 +157,52 @@ int ReadCIF(const char* fname) { // ----------------------------------- PrintId("N-acetyl-alpha-neuraminic acid", ExtractId(cif, "N-acetyl-alpha-neuraminic acid"), "S"); // SA PrintId("N-acetyl-beta-neuraminic acid", ExtractId(cif, "N-acetyl-beta-neuraminic acid"), "S"); // SB + return 0; +} + +/** Get PDB names from current Carbohydrate_PDB_Glycam_Names.txt file, + * extract form/chirality. + */ +int CreateDirectPdbToGlycam(FILE* direct_pdb_to_glycam) { + GlycamPdbResMap pdb_to_glycam; + if (pdb_to_glycam.Load("../../../dat/Carbohydrate_PDB_Glycam_Names.txt")) return 1; + + printf("\t%zu entries in PDB to glycam name map.\n", pdb_to_glycam.size()); + printf("\tResidue name map:\n"); + for (GlycamPdbResMap::const_iterator mit = pdb_to_glycam.begin(); + mit != pdb_to_glycam.end(); ++mit) + printf("\t %4s -> %c\n", *(mit->first), mit->second); - fclose(direct_pdb_to_glycam); return 0; } +/** Read everything from the given CIF file. */ +int ReadCIF(const char* fname) { + + + CIFfile cif; + if (cif.Read(fname, 0)) return 1; + + + // DEBUG +// //CIFfile::DataBlock lastBlock = cif.GetDataBlock("_chem_comp"); +// CIFfile::DataBlock const& lastBlock = cif.GetBlockWithColValue("_chem_comp", +// "name", +// "alpha-D-arabinopyranose"); +// lastBlock.ListData(); + + if (GetPdbCodesFromNames(cif)) return 1; + + FILE* direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); + if (direct_pdb_to_glycam == 0) { + fprintf(stderr,"Error: Could not open direct pdb to glycam file.\n"); + return 1; + } + int err = CreateDirectPdbToGlycam(direct_pdb_to_glycam); + fclose(direct_pdb_to_glycam); + return err; +} + int main(int argc, char** argv) { if (ReadCIF("components.cif")) return 1; return 0; From 9fe0d437be0f8d66f1b6cf1a8267f85f31fd589b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 10 Nov 2021 14:36:25 -0500 Subject: [PATCH 281/368] Actually use file names if they are specified --- src/Exec_PrepareForLeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0ae8ff3349..15d5bedacb 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -200,7 +200,7 @@ void Exec_PrepareForLeap::SetPdbResNames() { /** Load PDB residue names recognized by Amber FFs from file. */ int Exec_PrepareForLeap::LoadPdbResNames(std::string const& fnameIn) { - std::string fname; + std::string fname = fnameIn; if (fnameIn.empty()) { // Check CPPTRAJHOME const char* env = getenv("CPPTRAJHOME"); @@ -250,7 +250,7 @@ void Exec_PrepareForLeap::SetGlycamPdbResMap() { /** Load PDB to Glycam residue map from file. */ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) { - std::string fname; + std::string fname = fnameIn; if (fnameIn.empty()) { // Check CPPTRAJHOME const char* env = getenv("CPPTRAJHOME"); From 34109b0a0d5232754b46f920a6a4c4dd974d6e0c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 10 Nov 2021 14:37:47 -0500 Subject: [PATCH 282/368] Actually use file name --- devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp b/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp index 379917958c..fdf4c0e59c 100644 --- a/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp +++ b/devtools/converters/glycam.csv.to.dat/GlycamPdbResMap.cpp @@ -6,7 +6,7 @@ /** Load PDB to Glycam residue map from file. */ int GlycamPdbResMap::Load(std::string const& fnameIn) { - std::string fname; + std::string fname = fnameIn; if (fnameIn.empty()) { // Check CPPTRAJHOME const char* env = getenv("CPPTRAJHOME"); From a9e9fdaeb1a0ab91442e68cd9b9d44fb8afbf388 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 10 Nov 2021 14:58:37 -0500 Subject: [PATCH 283/368] Extract the form etc from the name associated with each ID --- .../glycam.csv.to.dat/ReadComponents.cpp | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 412093e6aa..13c4fbf3c0 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -17,18 +17,34 @@ std::string ExtractId(CIFfile const& cif, std::string const& name) { return id; } -void NameToForm(std::string const& name, std::string const& glyc, +/** Extract the "name" field from data with given id. */ +std::string ExtractName(CIFfile const& cif, std::string const& id) { + std::string name; + //printf("ID: %s", id.c_str()); + CIFfile::DataBlock const& block = cif.GetBlockWithColValue("_chem_comp", "id", id); + if (!block.empty()) { + name.assign( block.Data("name") ); + } else { + // Try pdbx_replaced_by (XYP only?) + CIFfile::DataBlock const& block2 = cif.GetBlockWithColValue("_chem_comp", "pdbx_replaced_by", id); + if (!block2.empty()) + name.assign( block2.Data("name") ); + } + return name; +} + +void NameToForm(std::string const& name, char glyc, std::string& form, std::string& chirality, std::string& ring) { // alpha-L-arabinopyranose - ArgList list1(name, "-"); + ArgList list1(name, "- "); if (list1.hasKey("alpha")) form = "A"; else if (list1.hasKey("beta")) form = "B"; else fprintf(stdout,"ERROR: Could not extract form.\n"); - if (glyc == "S") + if (glyc == 'S') // S is always D for glycam chirality = "D"; else if (list1.hasKey("D")) @@ -163,7 +179,7 @@ int GetPdbCodesFromNames(CIFfile& cif) { /** Get PDB names from current Carbohydrate_PDB_Glycam_Names.txt file, * extract form/chirality. */ -int CreateDirectPdbToGlycam(FILE* direct_pdb_to_glycam) { +int CreateDirectPdbToGlycam(FILE* direct_pdb_to_glycam, CIFfile const& cif) { GlycamPdbResMap pdb_to_glycam; if (pdb_to_glycam.Load("../../../dat/Carbohydrate_PDB_Glycam_Names.txt")) return 1; @@ -171,7 +187,18 @@ int CreateDirectPdbToGlycam(FILE* direct_pdb_to_glycam) { printf("\tResidue name map:\n"); for (GlycamPdbResMap::const_iterator mit = pdb_to_glycam.begin(); mit != pdb_to_glycam.end(); ++mit) - printf("\t %4s -> %c\n", *(mit->first), mit->second); + { + printf("\t %4s -> %c ", *(mit->first), mit->second); + std::string name = ExtractName(cif, mit->first.Truncated()); + if (name.empty()) + name.assign("EMPTY"); + printf(" %s\n", name.c_str()); + std::string form, chirality, ring; + NameToForm(name, mit->second, form, chirality, ring); + fprintf(direct_pdb_to_glycam, "%s %c %s %s %s \"%s\"\n", + *(mit->first), mit->second, form.c_str(), chirality.c_str(), ring.c_str(), name.c_str()); + + } return 0; } @@ -191,14 +218,14 @@ int ReadCIF(const char* fname) { // "alpha-D-arabinopyranose"); // lastBlock.ListData(); - if (GetPdbCodesFromNames(cif)) return 1; + //if (GetPdbCodesFromNames(cif)) return 1; FILE* direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); if (direct_pdb_to_glycam == 0) { fprintf(stderr,"Error: Could not open direct pdb to glycam file.\n"); return 1; } - int err = CreateDirectPdbToGlycam(direct_pdb_to_glycam); + int err = CreateDirectPdbToGlycam(direct_pdb_to_glycam, cif); fclose(direct_pdb_to_glycam); return err; } From 68ae4a35efe79c8971326c38eb97818330fce756 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 10 Nov 2021 15:02:13 -0500 Subject: [PATCH 284/368] Do furano to catch furanoside as well --- devtools/converters/glycam.csv.to.dat/ReadComponents.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 13c4fbf3c0..2bd6430465 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -57,15 +57,12 @@ void NameToForm(std::string const& name, char glyc, ring = "P"; for (int iarg = 0; iarg != remain.Nargs(); iarg++) { - std::size_t found = remain[iarg].find("furanose"); + // Do furano to catch furanoside as well + std::size_t found = remain[iarg].find("furano"); if (found != std::string::npos) { ring = "F"; break; } - //else - ////found = list1[2].find("furanose") - //// assume P - //ring = "P"; } } @@ -218,7 +215,7 @@ int ReadCIF(const char* fname) { // "alpha-D-arabinopyranose"); // lastBlock.ListData(); - //if (GetPdbCodesFromNames(cif)) return 1; + if (GetPdbCodesFromNames(cif)) return 1; FILE* direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); if (direct_pdb_to_glycam == 0) { From c11418ef466ed552331dc7eadb8ac2a50c710e41 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 11:01:31 -0500 Subject: [PATCH 285/368] Add file containing only sugar residue names and the corresponding glycam character --- dat/ResNames.sugar.dat | 95 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 dat/ResNames.sugar.dat diff --git a/dat/ResNames.sugar.dat b/dat/ResNames.sugar.dat new file mode 100644 index 0000000000..3aa0ac69c0 --- /dev/null +++ b/dat/ResNames.sugar.dat @@ -0,0 +1,95 @@ +0MK R +32O R +3MK E +4GL K +64K A +A2G V +A5C T +ADA O +AFD N +AHR A +ALL N +ARA A +ARB A +ASG V +AXR A +BDF C +BDP Z +BDR R +BGC G +BM3 W +BM7 W +BMA M +BXX A +BXY A +FCA F +FCB F +FRU C +FUB A +FUC F +FUL F +G6D Q +GAL L +GCU Z +GCV Z +GIV L +GL0 K +GLA L +GLC G +GTR O +GU4 G +GUP K +GXL L +GYE F +GZL L +HSY X +HSZ X +IDR U +IDS U +LDY D +LFR C +LXC X +MAN M +MGL G +MXY F +MXZ F +NAG Y +NDG Y +NG6 V +NGA V +NGZ Y +PSV P +RAM H +RIB R +RIP R +RM4 H +SDY T +SEJ A +SF6 P +SF9 P +SHD E +SIA S +SLB S +SOE B +T6T J +TTV P +UEA B +VDS N +VDV N +WOO N +XXR H +XYP X +XYS X +XYZ X +YYJ C +YYK Q +YYM R +YYQ V +Z2D N +Z4W D +Z6H E +Z6J R +Z8H K +Z8T G +Z9N C +ZEE T From 3ffdf9415b90a73c150f2b85fa195e45483e0199 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 11:10:06 -0500 Subject: [PATCH 286/368] Add file with just glycam names --- .../glycam.csv.to.dat/GlycamNames.txt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 devtools/converters/glycam.csv.to.dat/GlycamNames.txt diff --git a/devtools/converters/glycam.csv.to.dat/GlycamNames.txt b/devtools/converters/glycam.csv.to.dat/GlycamNames.txt new file mode 100644 index 0000000000..08e6e24af2 --- /dev/null +++ b/devtools/converters/glycam.csv.to.dat/GlycamNames.txt @@ -0,0 +1,26 @@ +# This file contains sugar names mapped to glycam codes. +"Arabinose" A +"Lyxose" D +"Ribose" R +"Xylose" X +"Allose" N +"Altrose" E +"Galactose" L +"Glucose" G +"Gulose" K +"Mannose" M +"Talose" T +"Fructose" C +"Psicose" P +"Sorbose" B +"Tagatose" J +"Fucose" F +"Quinovose" Q +"Rhamnose" H +"Galacturonic Acid" O +"Glucuronic Acid" Z +"Iduronic Acid" U +"N-Acetyl Galactosamine" V +"N-Acetyl Glucosamine" Y +"N-Acetyl Mannosamine" W +"N-Acetyl Neuraminic Acid" S From bd56ebd349aab7f3d0d1dd76fc44df305e060697 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 11:53:41 -0500 Subject: [PATCH 287/368] Start generating a new style of carbohydrate names, one line for each unique residue name. Will potentially allow identification of residues that are missing atoms. --- .../glycam.csv.to.dat/ReadComponents.cpp | 113 +++++++++++++++++- 1 file changed, 109 insertions(+), 4 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 2bd6430465..c41122aae0 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -1,6 +1,7 @@ #include "ArgList.h" #include "CIFfile.h" #include "GlycamPdbResMap.h" +#include "StringRoutines.h" /** Extract the "id" field from data with given name. */ std::string ExtractId(CIFfile const& cif, std::string const& name) { @@ -200,9 +201,110 @@ int CreateDirectPdbToGlycam(FILE* direct_pdb_to_glycam, CIFfile const& cif) { return 0; } +/** Read residue names and glycam codes from file. Write the + * Carbohydrate_PDB_Glycam_Names.txt file in the 'dat' directory. + */ +int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames, + std::string const& f_outfile, CIFfile const& cif) +{ + typedef std::pair Spair; + //typedef std::map Smap; + // Use a vector to keep the ordering in the GlycamNames.txt file. + typedef std::vector SpairArray; + // First read sugar names and glycam codes from infile + SpairArray GlycamCode_to_sugarName; + BufferedLine glycamnames; + if (glycamnames.OpenFileRead(f_glycamnames)) return 1; + const char* ptr = glycamnames.Line(); + while (ptr != 0) { + if (*ptr != '#') { + ArgList line(ptr, " "); + if (line.Nargs() != 2) { + fprintf(stderr,"Error: Expected only 2 columns in glycam name file.\n"); + return 1; + } + //printf("DEBUG: %s %s\n", line[0].c_str(), line[1].c_str()); + GlycamCode_to_sugarName.push_back(Spair(line[1], line[0])); + } + ptr = glycamnames.Line(); + } + glycamnames.CloseFile(); + for (SpairArray::const_iterator it = GlycamCode_to_sugarName.begin(); + it != GlycamCode_to_sugarName.end(); ++it) + printf("%s -> %s\n", it->first.c_str(), it->second.c_str()); + + // Now read sugar residue names and their glycam codes + typedef std::vector Sarray; + typedef std::pair CodeSarrayPair; + typedef std::map CodeSarrayMap; + CodeSarrayMap GlycamCode_to_resNames; + BufferedLine resnames; + if (resnames.OpenFileRead(f_resnames)) return 1; + ptr = resnames.Line(); + while (ptr != 0) { + if (*ptr != '#') { + ArgList line(ptr, " "); + if (line.Nargs() != 2) { + fprintf(stderr,"Error: Expected only 2 columns in res name file.\n"); + return 1; + } + // TODO ensure valid code? + CodeSarrayMap::iterator it = GlycamCode_to_resNames.find( line[1] ); + if (it == GlycamCode_to_resNames.end()) { + // New glycam code + std::pair ret = + GlycamCode_to_resNames.insert( CodeSarrayPair( line[1], Sarray() ) ); + it = ret.first; + } + it->second.push_back(line[0]); + } + ptr = resnames.Line(); + } + + // Output + CpptrajFile outfile; + if (outfile.OpenWrite("temp.dat")) return 1; + outfile.Printf("# This file contains the mapping from common PDB names to Glycam residue codes.\n"); + outfile.Printf("# Information obtained from mining the PDB chemical database (components.cif).\n"); + outfile.Printf("# Last updated %s\n", TimeString().c_str()); + outfile.Printf("#ResName GlycamCode Form Chirality RingType \"Name\"\n"); + + for (SpairArray::const_iterator kt = GlycamCode_to_sugarName.begin(); + kt != GlycamCode_to_sugarName.end(); ++kt) + { + CodeSarrayMap::const_iterator it = GlycamCode_to_resNames.find( kt->first ); + if (it == GlycamCode_to_resNames.end()) { + fprintf(stderr,"Error: Glycam code '%s' not found in resNames.\n", kt->first.c_str()); + return 1; + } + std::string sname = "\"" + kt->second + "\""; + printf("%-30s %3s ", sname.c_str(), it->first.c_str()); + for (Sarray::const_iterator jt = it->second.begin(); jt != it->second.end(); ++jt) + { + if (jt != it->second.begin()) printf(","); + printf("%s", jt->c_str()); + // Find the name in components + std::string fullname = ExtractName(cif, *jt); + if (fullname.empty()) + fullname.assign("EMPTY"); + //printf(" %s\n", fullname.c_str()); + std::string form, chirality, ring; + NameToForm(fullname, it->first[0], form, chirality, ring); + outfile.Printf("%s %s %s %s %s \"%s\"\n", + jt->c_str(), it->first.c_str(), + form.c_str(), chirality.c_str(), ring.c_str(), fullname.c_str()); + } + printf("\n"); + } + + outfile.CloseFile(); + return 0; +} + + /** Read everything from the given CIF file. */ int ReadCIF(const char* fname) { - + int err = 0; CIFfile cif; if (cif.Read(fname, 0)) return 1; @@ -215,15 +317,18 @@ int ReadCIF(const char* fname) { // "alpha-D-arabinopyranose"); // lastBlock.ListData(); - if (GetPdbCodesFromNames(cif)) return 1; + //if (GetPdbCodesFromNames(cif)) return 1; + + if (GenerateFile("GlycamNames.txt", "../../../dat/ResNames.sugar.dat", "", cif)) + return 1; - FILE* direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); +/* FILE* direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); if (direct_pdb_to_glycam == 0) { fprintf(stderr,"Error: Could not open direct pdb to glycam file.\n"); return 1; } int err = CreateDirectPdbToGlycam(direct_pdb_to_glycam, cif); - fclose(direct_pdb_to_glycam); + fclose(direct_pdb_to_glycam);*/ return err; } From c72b02e8c119c959002b229bf08143636935d3d2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 11:58:09 -0500 Subject: [PATCH 288/368] Add name map and linkage maps --- .../converters/glycam.csv.to.dat/ReadComponents.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index c41122aae0..ca3543697c 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -297,6 +297,19 @@ int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames printf("\n"); } + // Add name map section manually + outfile.Printf("\n# PDB to glycam atom name maps\n"); + outfile.Printf("V,W,Y C7,C2N O7,O2N C8,CME\n"); + outfile.Printf("S C10,C5N O10,O5N C11,CME\n"); + outfile.Printf("H C6,C6M,B\n"); + + // Add linkage res name map section manually + outfile.Printf("\n# PDB to glycam linkage residue name maps\n"); + outfile.Printf("SER OLS\n"); + outfile.Printf("THR OLT\n"); + outfile.Printf("HYP OLP\n"); + outfile.Printf("ASN NLN\n"); + outfile.CloseFile(); return 0; } From 1c4ab5748c1e80094e21502b0253594688bf37ac Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 12:00:39 -0500 Subject: [PATCH 289/368] Fix output file name --- devtools/converters/glycam.csv.to.dat/ReadComponents.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index ca3543697c..8e0ea6b087 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -263,7 +263,7 @@ int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames // Output CpptrajFile outfile; - if (outfile.OpenWrite("temp.dat")) return 1; + if (outfile.OpenWrite(f_outfile)) return 1; outfile.Printf("# This file contains the mapping from common PDB names to Glycam residue codes.\n"); outfile.Printf("# Information obtained from mining the PDB chemical database (components.cif).\n"); outfile.Printf("# Last updated %s\n", TimeString().c_str()); @@ -332,7 +332,7 @@ int ReadCIF(const char* fname) { //if (GetPdbCodesFromNames(cif)) return 1; - if (GenerateFile("GlycamNames.txt", "../../../dat/ResNames.sugar.dat", "", cif)) + if (GenerateFile("GlycamNames.txt", "../../../dat/ResNames.sugar.dat", "temp.dat", cif)) return 1; /* FILE* direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); From c2fd5003cef5fbfc6fd3e29194b8f9008830e2e4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 12:05:58 -0500 Subject: [PATCH 290/368] Add different modes --- .../glycam.csv.to.dat/ReadComponents.cpp | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 8e0ea6b087..e02a989af1 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -119,6 +119,7 @@ void Loops(CIFfile const& cif, Sarray const& prefixes, Sarray const& suffixes, /** Get PDB codes from sugar names */ int GetPdbCodesFromNames(CIFfile& cif) { + printf("Getting PDB codes from sugar names.\n"); Sarray prefixes; Sarray glycam; prefixes.push_back("arabino"); glycam.push_back("A"); // A prefixes.push_back("lyxo"); glycam.push_back("D"); // D @@ -207,6 +208,7 @@ int CreateDirectPdbToGlycam(FILE* direct_pdb_to_glycam, CIFfile const& cif) { int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames, std::string const& f_outfile, CIFfile const& cif) { + printf("Creating glycam dat file.\n"); typedef std::pair Spair; //typedef std::map Smap; // Use a vector to keep the ordering in the GlycamNames.txt file. @@ -316,24 +318,33 @@ int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames /** Read everything from the given CIF file. */ -int ReadCIF(const char* fname) { +int ReadCIF(const char* fname, std::string const& modeStr) { int err = 0; + int mode = -1; + if (modeStr == "--generatedat") + mode = 0; + else if (modeStr == "--generatenames") + mode = 1; + else { + fprintf(stderr,"Error: Specify --generatedat or --generatenames.\n"); + return 1; + } + + printf("Reading CIF file '%s'\n", fname); CIFfile cif; if (cif.Read(fname, 0)) return 1; - // DEBUG // //CIFfile::DataBlock lastBlock = cif.GetDataBlock("_chem_comp"); // CIFfile::DataBlock const& lastBlock = cif.GetBlockWithColValue("_chem_comp", // "name", // "alpha-D-arabinopyranose"); // lastBlock.ListData(); - - //if (GetPdbCodesFromNames(cif)) return 1; - - if (GenerateFile("GlycamNames.txt", "../../../dat/ResNames.sugar.dat", "temp.dat", cif)) - return 1; + if (mode == 1) + err = GetPdbCodesFromNames(cif); + else if (mode == 0) + err = GenerateFile("GlycamNames.txt", "../../../dat/ResNames.sugar.dat", "temp.dat", cif); /* FILE* direct_pdb_to_glycam = fopen("direct_pdb_to_glycam.dat", "wb"); if (direct_pdb_to_glycam == 0) { @@ -346,6 +357,9 @@ int ReadCIF(const char* fname) { } int main(int argc, char** argv) { - if (ReadCIF("components.cif")) return 1; + std::string mode = "--generatedat"; + if (argc > 1) + mode.assign(argv[1]); + if (ReadCIF("components.cif", mode)) return 1; return 0; } From 210c1ab022211725e38294e44196673a9eedc2f9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 12:18:45 -0500 Subject: [PATCH 291/368] Start SugarToken class --- src/Exec_PrepareForLeap.cpp | 21 ++++++++++++++++++++- src/Exec_PrepareForLeap.h | 34 +++++++++++++++++++++++++++++----- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 15d5bedacb..572a5476d0 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -117,6 +117,25 @@ void Exec_PrepareForLeap::Sugar::RemapIndices(Iarray const& atomMap, int at0, in *it = find_new_idx(*it, atomMap, at0, at1); //atomMap[*it]; } +// ===== SugarToken class ====================================================== +/** CONSTRUCTOR */ +Exec_PrepareForLeap::SugarToken::SugarToken() : + form_(UNKNOWN_FORM), + chir_(UNKNOWN_CHIR), + ring_(UNKNOWN_RING) +{} + +/** Set up from line:
*/ +int Exec_PrepareForLeap::SugarToken::SetFromLine(const char* lineIn) { + ArgList line(lineIn, " "); + if (line.Nargs() != 6) { + mprinterr("Error: Expected 6 columns, got %i\n" + "Error: %s\n", line.Nargs(), lineIn); + return 1; + } + + return 0; +} // ============================================================================= /** CONSTRUCTOR */ @@ -1324,7 +1343,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, bool isDform; std::string formStr; AnomerRetType form; - if (sugar.RingType() == Sugar::FURANOSE) + if (sugar.RingType() == FURANOSE) form = DetermineUpOrDown(isDform, formStr, sugar, topIn, frameIn); else form = DetermineAnomericForm(isDform, formStr, sugar, topIn, frameIn); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 08b8a498b3..c1b6bf0ee6 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -22,6 +22,8 @@ class Exec_PrepareForLeap : public Exec { class Link; /// Hold information for the various functional group types (FunctionalGroupType) class FunctionalGroup; + /// Hold general info for a specific sugar + class SugarToken; typedef std::vector Iarray; /// Return type for DetermineAnomericForm @@ -31,6 +33,16 @@ class Exec_PrepareForLeap : public Exec { SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; + /// Base ring type + enum RingTypeEnum { PYRANOSE = 0, ///< Ring is 5 carbons, 1 oxygen + FURANOSE, ///< Ring is 4 carbons, 1 oxygen + UNKNOWN_RING ///< Some unknown ring type + }; + /// Sugar form + enum FormTypeEnum { ALPHA = 0, BETA, UNKNOWN_FORM }; + /// Sugar chirality + enum ChirTypeEnum { IS_D, IS_L, UNKNOWN_CHIR }; + /// Keep synced with FunctionalGroupType static const char* FunctionalGroupStr_[]; @@ -150,11 +162,7 @@ class Exec_PrepareForLeap : public Exec { // ----- Sugar class ---------------------------------------------------------- class Exec_PrepareForLeap::Sugar { public: - /// Base ring type - enum RingTypeEnum { PYRANOSE = 0, ///< Ring is 5 carbons, 1 oxygen - FURANOSE, ///< Ring is 4 carbons, 1 oxygen - UNKNOWN_RING ///< Some unknown ring type - }; + /// Sugar status. Keep synced with StatTypeStr_ enum StatType { SETUP_OK = 0, ///< Regular sugar, setup complete MISSING_O, ///< Could not find ring oxygen @@ -234,4 +242,20 @@ class Exec_PrepareForLeap::FunctionalGroup { Atom::AtomicElementType chargeAtom_; ///< Element of atom which needs charge adjusted. double chargeOffset_; ///< Charge offset for adjusting charge. }; +// ----- SugarToken class ------------------------------------------------------ +class Exec_PrepareForLeap::SugarToken { + public: + /// CONSTRUCTOR + SugarToken(); + /// Construct from line: + int SetFromLine(const char*); + private: + std::string name_; ///< Full sugar name + std::string resname_; ///< PDB residue name + std::string glycamCode_; ///< Glycam residue code + FormTypeEnum form_; ///< Sugar form + ChirTypeEnum chir_; ///< Sugar chirality + RingTypeEnum ring_; ///< Sugar ring type +}; + #endif From 51bcf1808954baeab5553a6f0ace9022e0efa54a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 14:10:21 -0500 Subject: [PATCH 292/368] Actually parse the line. Do not store residue name, will be used to map --- src/Exec_PrepareForLeap.cpp | 40 +++++++++++++++++++++++++++++++++---- src/Exec_PrepareForLeap.h | 6 +++--- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 572a5476d0..fe961c72c5 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -125,16 +125,48 @@ Exec_PrepareForLeap::SugarToken::SugarToken() : ring_(UNKNOWN_RING) {} -/** Set up from line: */ -int Exec_PrepareForLeap::SugarToken::SetFromLine(const char* lineIn) { +/** Set up from line: + * 0 1 2 3 4 5 + * \return Residue name + */ +std::string Exec_PrepareForLeap::SugarToken::SetFromLine(const char* lineIn) { ArgList line(lineIn, " "); if (line.Nargs() != 6) { mprinterr("Error: Expected 6 columns, got %i\n" "Error: %s\n", line.Nargs(), lineIn); - return 1; + return std::string(""); + } + name_ = line[5]; + glycamCode_ = line[1]; + if (line[2] == "A") + form_ = ALPHA; + else if (line[2] == "B") + form_ = BETA; + else { + mprinterr("Error: Unrecognized form: %s\n" + "Error: Line: %s\n", line[2].c_str(), lineIn); + return std::string(""); + } + if (line[3] == "D") + chir_ = IS_D; + else if (line[3] == "L") + chir_ = IS_L; + else { + mprinterr("Error: Unrecognized chirality: %s\n" + "Error: Line: %s\n", line[3].c_str(), lineIn); + return std::string(""); + } + if (line[4] == "P") + ring_ = PYRANOSE; + else if (line[4] == "F") + ring_ = FURANOSE; + else { + mprinterr("Error: Unrecognized ring: %s\n" + "Error: Line: %s\n", line[4].c_str(), lineIn); + return std::string(""); } - return 0; + return line[0]; } // ============================================================================= diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c1b6bf0ee6..b42c632e61 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -247,11 +247,11 @@ class Exec_PrepareForLeap::SugarToken { public: /// CONSTRUCTOR SugarToken(); - /// Construct from line: - int SetFromLine(const char*); + /// /return , set up from line: ' ' + std::string SetFromLine(const char*); private: std::string name_; ///< Full sugar name - std::string resname_; ///< PDB residue name + //std::string resname_; ///< PDB residue name std::string glycamCode_; ///< Glycam residue code FormTypeEnum form_; ///< Sugar form ChirTypeEnum chir_; ///< Sugar chirality From 70d3ac73cc67e9d7d0dff1fbe1185ace92397357 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 14:15:08 -0500 Subject: [PATCH 293/368] Add PrintInfo --- src/Exec_PrepareForLeap.cpp | 10 ++++++++++ src/Exec_PrepareForLeap.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index fe961c72c5..a8613da8db 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -125,6 +125,16 @@ Exec_PrepareForLeap::SugarToken::SugarToken() : ring_(UNKNOWN_RING) {} +/** Print token info to stdout. */ +void Exec_PrepareForLeap::SugarToken::PrintInfo(std::string const& resname) const { + static const char* ringstr[] = {"pyranose", "furanose", "?"}; + static const char* formstr[] = {"alpha", "beta", "?"}; + static const char* chirstr[] = {"D", "L", "?"}; + mprintf("\t'%s' \"%s\" %s %s-%s-%s\n", + resname.c_str(), name_.c_str(), glycamCode_.c_str(), + formstr[form_], chirstr[chir_], ringstr[ring_]); +} + /** Set up from line: * 0 1 2 3 4 5 * \return Residue name diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index b42c632e61..84e38309e5 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -249,6 +249,8 @@ class Exec_PrepareForLeap::SugarToken { SugarToken(); /// /return , set up from line: ' ' std::string SetFromLine(const char*); + /// Print token info to stdout + void PrintInfo(std::string const&) const; private: std::string name_; ///< Full sugar name //std::string resname_; ///< PDB residue name From a02e2f734a3169273144622141094f6e28faa6ba Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 14:42:35 -0500 Subject: [PATCH 294/368] Use updated sugar information that includes form, chirality, and ring type --- dat/Carbohydrate_PDB_Glycam_Names.txt | 123 ++++++++++++++++++++------ src/Exec_PrepareForLeap.cpp | 60 ++++++++++--- src/Exec_PrepareForLeap.h | 16 +++- 3 files changed, 157 insertions(+), 42 deletions(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 7e325a49aa..7a72948e73 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -1,31 +1,102 @@ # This file contains the mapping from common PDB names to Glycam residue codes. # Information obtained from mining the PDB chemical database (components.cif). -# Last updated 11/02/21 10:40:19 -"Arabinose" A 64K,ARA,SEJ,ARB,BXY,AHR,BXX,FUB,AXR -"Lyxose" D LDY,Z4W -"Ribose" R YYM,RIP,0MK,RIB,Z6J,BDR,32O -"Xylose" X XYS,HSY,HSZ,XYP,LXC,XYZ -"Allose" N AFD,Z2D,ALL,WOO,VDV,VDS -"Altrose" E SHD,Z6H,3MK -"Galactose" L GLA,GXL,GAL,GIV,GZL -"Glucose" G GLC,BGC,Z8T,GU4,MGL -"Gulose" K 4GL,GUP,GL0,Z8H -"Mannose" M MAN,BMA -"Talose" T SDY,ZEE,A5C -"Fructose" C BDF,Z9N,FRU,LFR,YYJ -"Psicose" P PSV,SF6,TTV,SF9 -"Sorbose" B SOE,UEA -"Tagatose" J T6T -"Fucose" F FCA,FUC,FCB,FUL,GYE,MXY,MXZ -"Quinovose" Q G6D,YYK -"Rhamnose" H XXR,RAM,RM4 -"Galacturonic Acid" O ADA,GTR -"Glucuronic Acid" Z GCU,BDP,GCV -"Iduronic Acid" U IDR,IDS -"N-Acetyl Galactosamine" V A2G,YYQ,NGA,NG6,ASG -"N-Acetyl Glucosamine" Y NDG,NGZ,NAG -"N-Acetyl Mannosamine" W BM3,BM7 -"N-Acetyl Neuraminic Acid" S SIA,SLB +# Last updated 11/12/21 12:05:19 +#ResName GlycamCode Form Chirality RingType "Name" +64K A A D P "alpha-D-arabinopyranose" +AHR A A L F "alpha-L-arabinofuranose" +ARA A A L P "alpha-L-arabinopyranose" +ARB A B L P "beta-L-arabinopyranose" +AXR A A D F "methyl alpha-D-arabinofuranoside" +BXX A B D F "beta-D-arabinofuranose" +BXY A A D F "alpha-D-arabinofuranose" +FUB A B L F "beta-L-arabinofuranose" +SEJ A B D P "beta-D-arabinopyranose" +LDY D A D P "alpha-D-lyxopyranose" +Z4W D B D P "beta-D-lyxopyranose" +0MK R B L P "beta-L-ribopyranose" +32O R B L F "beta-L-ribofuranose" +BDR R B D F "beta-D-ribofuranose" +RIB R A D F "alpha-D-ribofuranose" +RIP R B D P "beta-D-ribopyranose" +YYM R A D P "alpha-D-ribopyranose" +Z6J R A L F "alpha-L-ribofuranose" +HSY X A L P "alpha-L-xylopyranose" +HSZ X B D P "beta-D-xylopyranose" +LXC X B L P "beta-L-xylopyranose" +XYP X B D P "beta-D-xylopyranose" +XYS X A D P "alpha-D-xylopyranose" +XYZ X B D F "beta-D-xylofuranose" +AFD N A D P "alpha-D-allopyranose" +ALL N B D P "beta-D-allopyranose" +VDS N B D F "beta-D-allofuranose" +VDV N A D F "alpha-D-allofuranose" +WOO N B L P "beta-L-allopyranose" +Z2D N A L P "alpha-L-allopyranose" +3MK E B L P "beta-L-altropyranose" +SHD E A D P "alpha-D-altropyranose" +Z6H E A L P "alpha-L-altropyranose" +GAL L B D P "beta-D-galactopyranose" +GIV L B L P "beta-L-galactopyranose" +GLA L A D P "alpha-D-galactopyranose" +GXL L A L P "alpha-L-galactopyranose" +GZL L B D F "beta-D-galactofuranose" +BGC G B D P "beta-D-glucopyranose" +GLC G A D P "alpha-D-glucopyranose" +GU4 G A D P "2,3,4,6-tetra-O-sulfonato-alpha-D-glucopyranose" +MGL G B D P "methyl beta-D-glucopyranoside" +Z8T G B L P "beta-L-glucopyranose" +4GL K A D P "alpha-D-gulopyranose" +GL0 K B D P "beta-D-gulopyranose" +GUP K A L P "alpha-L-gulopyranose" +Z8H K B L P "beta-L-gulopyranose" +BMA M B D P "beta-D-mannopyranose" +MAN M A D P "alpha-D-mannopyranose" +A5C T A L F "alpha-L-talofuranose" +SDY T B D P "beta-D-talopyranose" +ZEE T B L P "beta-L-talopyranose" +BDF C B D P "beta-D-fructopyranose" +FRU C B D F "beta-D-fructofuranose" +LFR C B L F "beta-L-fructofuranose" +YYJ C B D F "1,3,4,6-tetra-O-sulfo-beta-D-fructofuranose" +Z9N C A D F "alpha-D-fructofuranose" +PSV P A D F "alpha-D-psicofuranose" +SF6 P A L F "alpha-L-psicofuranose" +SF9 P B L F "beta-L-psicofuranose" +TTV P B D F "beta-D-psicofuranose" +SOE B A L P "alpha-L-sorbopyranose" +UEA B B D F "beta-D-sorbofuranose" +T6T J A D P "alpha-D-tagatopyranose" +FCA F A D P "alpha-D-fucopyranose" +FCB F B D P "beta-D-fucopyranose" +FUC F A L P "alpha-L-fucopyranose" +FUL F B L P "beta-L-fucopyranose" +GYE F B D F "beta-D-fucofuranose" +MXY F B L P "2-O-methyl-beta-L-fucopyranose" +MXZ F A L P "2-O-methyl-alpha-L-fucopyranose" +G6D Q A D P "alpha-D-quinovopyranose" +YYK Q B D P "beta-D-quinovopyranose" +RAM H A L P "alpha-L-rhamnopyranose" +RM4 H B L P "beta-L-rhamnopyranose" +XXR H A D P "alpha-D-rhamnopyranose" +ADA O A D P "alpha-D-galactopyranuronic acid" +GTR O B D P "beta-D-galactopyranuronic acid" +BDP Z B D P "beta-D-glucopyranuronic acid" +GCU Z A D P "alpha-D-glucopyranuronic acid" +GCV Z A D P "4-O-methyl-alpha-D-glucopyranuronic acid" +IDR U A L P "alpha-L-idopyranuronic acid" +IDS U A L P "2-O-sulfo-alpha-L-idopyranuronic acid" +A2G V A D P "2-acetamido-2-deoxy-alpha-D-galactopyranose" +ASG V B D P "2-acetamido-2-deoxy-4-O-sulfo-beta-D-galactopyranose" +NG6 V B D P "2-acetamido-2-deoxy-6-O-sulfo-beta-D-galactopyranose" +NGA V B D P "2-acetamido-2-deoxy-beta-D-galactopyranose" +YYQ V A L P "2-acetamido-2-deoxy-alpha-L-galactopyranose" +NAG Y B D P "2-acetamido-2-deoxy-beta-D-glucopyranose" +NDG Y A D P "2-acetamido-2-deoxy-alpha-D-glucopyranose" +NGZ Y A L P "2-acetamido-2-deoxy-alpha-L-glucopyranose" +BM3 W A D P "2-acetamido-2-deoxy-alpha-D-mannopyranose" +BM7 W B D P "2-acetamido-2-deoxy-beta-D-mannopyranose" +SIA S A D P "N-acetyl-alpha-neuraminic acid" +SLB S B D P "N-acetyl-beta-neuraminic acid" # PDB to glycam atom name maps V,W,Y C7,C2N O7,O2N C8,CME diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a8613da8db..49f9562788 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -125,6 +125,16 @@ Exec_PrepareForLeap::SugarToken::SugarToken() : ring_(UNKNOWN_RING) {} +/** CONSTRUCTOR - name, glycam code, form, chirality, ring type */ +Exec_PrepareForLeap::SugarToken::SugarToken(std::string const& fn, std::string const& gc, + FormTypeEnum ft, ChirTypeEnum ct, RingTypeEnum rt) : + name_(fn), + glycamCode_(gc), + form_(ft), + chir_(ct), + ring_(rt) +{} + /** Print token info to stdout. */ void Exec_PrepareForLeap::SugarToken::PrintInfo(std::string const& resname) const { static const char* ringstr[] = {"pyranose", "furanose", "?"}; @@ -139,8 +149,8 @@ void Exec_PrepareForLeap::SugarToken::PrintInfo(std::string const& resname) cons * 0 1 2 3 4 5 * \return Residue name */ -std::string Exec_PrepareForLeap::SugarToken::SetFromLine(const char* lineIn) { - ArgList line(lineIn, " "); +std::string Exec_PrepareForLeap::SugarToken::SetFromLine(ArgList const& line) { + const char* lineIn = line.ArgLine(); if (line.Nargs() != 6) { mprinterr("Error: Expected 6 columns, got %i\n" "Error: %s\n", line.Nargs(), lineIn); @@ -300,11 +310,16 @@ int Exec_PrepareForLeap::LoadPdbResNames(std::string const& fnameIn) /** Load reduced interal PDB to Glycam map. */ void Exec_PrepareForLeap::SetGlycamPdbResMap() { - pdb_to_glycam_.insert( PairType("NAG", 'Y') ); - pdb_to_glycam_.insert( PairType("FUC", 'F') ); - pdb_to_glycam_.insert( PairType("GAL", 'L') ); - pdb_to_glycam_.insert( PairType("BMA", 'M') ); - pdb_to_glycam_.insert( PairType("MAN", 'M') ); + pdb_to_glycam_.insert( PairType("NAG", + SugarToken("2-acetamido-2-deoxy-beta-D-glucopyranose", "Y", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("FUC", + SugarToken("alpha-L-fucopyranose", "F", ALPHA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("GAL", + SugarToken("beta-D-galactopyranose", "L", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("BMA", + SugarToken("beta-D-mannopyranose", "M", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("MAN", + SugarToken("alpha-D-mannopyranose", "M", ALPHA, IS_D, PYRANOSE)) ); // TODO internal atom name map } @@ -351,7 +366,23 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) } else if (argline[0][0] != '#') { // Skipping comments, read sections if (section == PDB_RESMAP_SECTION) { - // "" + // OLD: "" + // NEW: + SugarToken sToken; + std::string sResName = sToken.SetFromLine(argline); + if (sResName.empty()) { + mprinterr("Error: Could not parse residue map section of '%s'\n", + infile.Filename().full()); + return 1; + } + std::pair ret = + pdb_to_glycam_.insert( PairType(sResName, sToken) ); + if (!ret.second) { + mprinterr("Error: Duplicate residue name '%s' in residue map section of '%s'\n", + sResName.c_str(), infile.Filename().full()); + return 1; + } +/* if (argline.Nargs() != 3) { mprinterr("Error: Expected only 3 columns in '%s' res map section, got %i\n", infile.Filename().full(), argline.Nargs()); @@ -366,7 +397,7 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) } // TODO handle glycam res names with > 1 char for (int n = 0; n < pdbnames.Nargs(); n++) - pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) ); + pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) );*/ } else if (section == PDB_ATOMMAP_SECTION) { // ... if (argline.Nargs() < 2) { @@ -1370,16 +1401,19 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, int rnum = sugar.ResNum(topIn); Residue& res = topIn.SetRes(rnum); // Try to ID the base sugar type from the input name. - char resChar = ' '; + //char resChar = ' '; MapType::const_iterator pdb_glycam = pdb_to_glycam_.find( res.Name() ); if ( pdb_glycam == pdb_to_glycam_.end() ) { mprinterr("Error: Could not identify sugar from residue name '%s'\n", *res.Name()); return 1; } - resChar = pdb_glycam->second; + //resChar = pdb_glycam->second; + mprintf("DEBUG: "); + pdb_glycam->second.PrintInfo( pdb_glycam->first.Truncated() ); - mprintf("\tSugar %s glycam name: %c\n", sugarName.c_str(), resChar); + mprintf("\tSugar %s glycam name: %s\n", sugarName.c_str(), + pdb_glycam->second.GlycamCode().c_str()); // Determine alpha or beta and D or L bool isDform; @@ -1399,6 +1433,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, } // Change PDB names to Glycam ones + // FIXME get rid of resChar + char resChar = pdb_glycam->second.GlycamCode()[0]; if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, form)) { mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); return 1; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 84e38309e5..3c149b29d3 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -122,9 +122,9 @@ class Exec_PrepareForLeap : public Exec { /// Run leap to generate topology, perform any modifications int RunLeap(std::string const&, std::string const&) const; - typedef std::pair PairType; - typedef std::map MapType; - MapType pdb_to_glycam_; ///< Map PDB residue names to Glycam 1 char names + typedef std::pair PairType; + typedef std::map MapType; + MapType pdb_to_glycam_; ///< Map PDB residue names to sugar information tokens typedef std::set SetType; SetType pdb_res_names_; ///< PDB residue names recognized by Amber FFs @@ -247,10 +247,18 @@ class Exec_PrepareForLeap::SugarToken { public: /// CONSTRUCTOR SugarToken(); + /// CONSTRUCTOR - name, glycam code, form, chirality, ring type + SugarToken(std::string const&, std::string const&, FormTypeEnum, ChirTypeEnum, RingTypeEnum); /// /return , set up from line: ' ' - std::string SetFromLine(const char*); + std::string SetFromLine(ArgList const&); /// Print token info to stdout void PrintInfo(std::string const&) const; + + std::string const& FullName() const { return name_; } + std::string const& GlycamCode() const { return glycamCode_; } + FormTypeEnum Form() const { return form_; } + ChirTypeEnum Chirality() const { return chir_; } + RingTypeEnum RingType() const { return ring_; } private: std::string name_; ///< Full sugar name //std::string resname_; ///< PDB residue name From 7b55ea0dc8214bf5b6f5ad5c080a9a85adc397f1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 12 Nov 2021 18:47:20 -0500 Subject: [PATCH 295/368] Will use SugarToken and compare to the token associated with the PDB residue name --- src/Exec_PrepareForLeap.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 49f9562788..58405eed79 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1415,6 +1415,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("\tSugar %s glycam name: %s\n", sugarName.c_str(), pdb_glycam->second.GlycamCode().c_str()); + SugarToken sugarInfo; + // Determine alpha or beta and D or L bool isDform; std::string formStr; From 6852fcd9f86c3dbc4e48bd1310a3a11f8a774ffa Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 16 Nov 2021 11:04:13 -0500 Subject: [PATCH 296/368] When sugar information cannot be fully determined, try to fill in what's missing based on the residue name. --- src/Exec_PrepareForLeap.cpp | 192 ++++++++++++++++++++++++------------ src/Exec_PrepareForLeap.h | 33 +++++-- 2 files changed, 152 insertions(+), 73 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 58405eed79..9de787f03a 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -15,6 +15,10 @@ #include // tolower #include // sort +const char* Exec_PrepareForLeap::ringstr_[] = {"pyranose", "furanose", "?"}; +const char* Exec_PrepareForLeap::formstr_[] = {"alpha", "beta", "?"}; +const char* Exec_PrepareForLeap::chirstr_[] = {"D", "L", "?"}; + // ===== Sugar Class =========================================================== /** CONSTRUCTOR - Incomplete setup; set anomeric atom as residue first atom * so that ResNum() works. @@ -135,14 +139,18 @@ Exec_PrepareForLeap::SugarToken::SugarToken(std::string const& fn, std::string c ring_(rt) {} +/** CONSTRUCTOR - ring type */ +Exec_PrepareForLeap::SugarToken::SugarToken(RingTypeEnum rt) : + form_(UNKNOWN_FORM), + chir_(UNKNOWN_CHIR), + ring_(rt) +{} + /** Print token info to stdout. */ void Exec_PrepareForLeap::SugarToken::PrintInfo(std::string const& resname) const { - static const char* ringstr[] = {"pyranose", "furanose", "?"}; - static const char* formstr[] = {"alpha", "beta", "?"}; - static const char* chirstr[] = {"D", "L", "?"}; mprintf("\t'%s' \"%s\" %s %s-%s-%s\n", resname.c_str(), name_.c_str(), glycamCode_.c_str(), - formstr[form_], chirstr[chir_], ringstr[ring_]); + formstr_[form_], chirstr_[chir_], ringstr_[ring_]); } /** Set up from line: @@ -1045,7 +1053,7 @@ const /** Change PDB atom names in residue to glycam ones. */ int Exec_PrepareForLeap::ChangePdbAtomNamesToGlycam(char resChar, Residue const& res, - Topology& topIn, AnomerRetType form) + Topology& topIn, FormTypeEnum form) const { // Get the appropriate map @@ -1057,7 +1065,7 @@ const } NameMapType const& currentMap = pdb_glycam_name_maps_[resIdxPair->second]; NameMapType const* currentMapAB; - if (form == IS_ALPHA) + if (form == ALPHA) currentMapAB = &(pdb_glycam_name_maps_A_[resIdxPair->second]); else currentMapAB = &(pdb_glycam_name_maps_B_[resIdxPair->second]); @@ -1077,8 +1085,7 @@ const } /** Determine if anomeric carbon of furanose is up or down. */ -Exec_PrepareForLeap::AnomerRetType - Exec_PrepareForLeap::DetermineUpOrDown(bool& isDform, std::string& formStr, +int Exec_PrepareForLeap::DetermineUpOrDown(SugarToken& stoken, Sugar const& sugar, Topology const& topIn, Frame const& frameIn) const @@ -1088,47 +1095,45 @@ const cdebug = 1; else cdebug = 0; - formStr.clear(); Cpptraj::Chirality::ChiralType ctypeR = Cpptraj::Chirality:: DetermineChirality(sugar.HighestStereocenter(), topIn, frameIn, cdebug); if (ctypeR == Cpptraj::Chirality::ERR) { - mprinterr("Error: Could not determine chirality for furanose.\n"); - return A_ERR; + mprinterr("Error: Could not determine chirality for furanose.\n"); // TODO warn? + return 1; } if (ctypeR == Cpptraj::Chirality::IS_R) - isDform = true; + stoken.SetChirality(IS_D); //isDform = true; else - isDform = false; + stoken.SetChirality(IS_L); //isDform = false; Cpptraj::Chirality::ChiralType ctypeA = Cpptraj::Chirality:: DetermineChirality(sugar.AnomericAtom(), topIn, frameIn, cdebug); if (ctypeA == Cpptraj::Chirality::ERR) { - mprinterr("Error: Could not determine chirality around anomeric atom for furanose.\n"); - return A_ERR; + mprinterr("Error: Could not determine chirality around anomeric atom for furanose.\n"); // TODO warn? + return 1; } if (ctypeR == ctypeA) { // Up, beta - formStr = "U"; - return IS_BETA; + //formStr = "U"; + stoken.SetForm(BETA); //return IS_BETA; } else { // Down, alpha - formStr = "D"; - return IS_ALPHA; + //formStr = "D"; + stoken.SetForm(ALPHA); //return IS_ALPHA; } + return 0; } /** Determine anomeric form of the sugar. */ -Exec_PrepareForLeap::AnomerRetType - Exec_PrepareForLeap::DetermineAnomericForm(bool& isDform, std::string& formStr, - Sugar const& sugar, +int Exec_PrepareForLeap::DetermineAnomericForm(SugarToken& stoken, + Sugar& sugarIn, Topology const& topIn, Frame const& frameIn) const { - formStr.clear(); - isDform = true; + Sugar const& sugar = sugarIn; // For determining orientation around anomeric carbon need ring // oxygen atom and next carbon in the ring. double t_an; @@ -1140,10 +1145,11 @@ const sugar.RingAtoms(), topIn, frameIn); if (ret < 0) { // This means C1 X substituent missing; non-fatal. - return A_WARNING; + sugarIn.SetStatus( Sugar::MISSING_C1X ); + return 1; // TODO return 0? } else if (ret > 0) { // Error - return A_ERR; + return 1; } bool t_an_up = (t_an > 0); @@ -1156,7 +1162,7 @@ const if (CalcAnomericRefTorsion(t_ar, sugar.AnomericRefAtom(), sugar.RingOxygenAtom(), sugar.RingEndAtom(), sugar.RingAtoms(), topIn, frameIn)) { - return A_ERR; + return 1; } bool t_ar_up = (t_ar > 0); @@ -1167,7 +1173,7 @@ const if (sugar.AnomericRefAtom() != sugar.HighestStereocenter()) { if (CalcConfigCarbonTorsion(t_cc, sugar.HighestStereocenter(), sugar.ChainAtoms(), topIn, frameIn)) - return A_ERR; + return 1; } else t_cc = t_ar; bool t_cc_up = (t_cc > 0); @@ -1194,23 +1200,25 @@ const (int)t_an_up, (int)t_ar_up, (int)t_cc_up); } - AnomerRetType form; + //AnomerRetType form; // Same side is beta, opposite is alpha. if (t_an_up == t_ar_up) { - form = IS_BETA; - formStr = "B"; + stoken.SetForm(BETA); //form = IS_BETA; //mprintf("DEBUG: Form is Beta\n"); } else { - form = IS_ALPHA; - formStr = "A"; + stoken.SetForm(ALPHA); //form = IS_ALPHA; //mprintf("DEBUG: Form is Alpha\n"); } // By the atom ordering used by CalcAnomericRefTorsion and // CalcConfigCarbonTorsion, D is a negative (down) torsion. - isDform = !t_cc_up; + //isDform = !t_cc_up; + if (!t_cc_up) + stoken.SetChirality(IS_D); + else + stoken.SetChirality(IS_L); - return form; + return 0; } /// \return Glycam linkage code for given linked atoms @@ -1388,10 +1396,11 @@ const } /** Attempt to identify sugar residue, form, and linkages. */ -int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, +int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, Frame const& frameIn, CharMask const& cmask, CpptrajFile* outfile, std::set& sugarBondsToRemove) { + Sugar const& sugar = sugarIn; const std::string sugarName = topIn.TruncResNameOnumId(sugar.ResNum(topIn)); if (sugar.NotSet()) { mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", sugarName.c_str()); @@ -1415,39 +1424,95 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, mprintf("\tSugar %s glycam name: %s\n", sugarName.c_str(), pdb_glycam->second.GlycamCode().c_str()); - SugarToken sugarInfo; + SugarToken sugarInfo(sugar.RingType()); // Determine alpha or beta and D or L - bool isDform; - std::string formStr; - AnomerRetType form; - if (sugar.RingType() == FURANOSE) - form = DetermineUpOrDown(isDform, formStr, sugar, topIn, frameIn); + int detect_err; + if (sugarInfo.RingType() == FURANOSE) + detect_err = DetermineUpOrDown(sugarInfo, sugar, topIn, frameIn); + else if (sugarInfo.RingType() == PYRANOSE) + detect_err = DetermineAnomericForm(sugarInfo, sugarIn, topIn, frameIn); else - form = DetermineAnomericForm(isDform, formStr, sugar, topIn, frameIn); - if (form == A_WARNING) { + detect_err = 1; + // Modify resStat_ based on sugar status + if (sugar.Status() == Sugar::MISSING_C1X) { // Sugar missing C1-X substituent, non-fatal resStat_[rnum] = SUGAR_MISSING_C1X; - return 0; - } else if (formStr.empty() || form == A_ERR) { - mprinterr("Error: alpha/beta determination failed.\n"); - return 1; } + if (detect_err != 0) { + // This means there was an issue determining ring type, form, + // chirality, or both. + // Try to fill in info based on the residue name (pdb_glycam->second). + if (sugarInfo.Form() == UNKNOWN_FORM) { + mprintf("Warning: Could not determine form from coordinates.\n"); + if (pdb_glycam->second.Form() == UNKNOWN_FORM) + return 0; + mprintf("Warning: Setting form based on residue name.\n"); + sugarInfo.SetForm( pdb_glycam->second.Form() ); + } + if (sugarInfo.Chirality() == UNKNOWN_CHIR) { + mprintf("Warning: Could not determine chirality from coordinates.\n"); + if (pdb_glycam->second.Chirality() == UNKNOWN_CHIR) + return 0; + mprintf("Warning: Setting chirality based on residue name.\n"); + sugarInfo.SetChirality( pdb_glycam->second.Chirality() ); + } + if (sugarInfo.RingType() == UNKNOWN_RING) { + mprintf("Warning: Could not determine ring type from coordinates.\n"); + if (pdb_glycam->second.RingType() == UNKNOWN_RING) + return 0; + mprintf("Warning: Setting ring type based on residue name.\n"); + sugarInfo.SetRingType( pdb_glycam->second.RingType() ); + } + } + // Warn about form/chirality mismatches. + if (pdb_glycam->second.Form() != UNKNOWN_FORM && + pdb_glycam->second.Form() != sugarInfo.Form()) + mprintf("Warning: '%s' detected form is %s but form based on name is %s.\n", + sugarName.c_str(), formstr_[sugarInfo.Form()], + formstr_[pdb_glycam->second.Form()]); + if (pdb_glycam->second.Chirality() != UNKNOWN_CHIR && + pdb_glycam->second.Chirality() != sugarInfo.Chirality()) + mprintf("Warning: '%s' detected chirality is %s but chirality based on name is %s.\n", + sugarName.c_str(), chirstr_[sugarInfo.Form()], + chirstr_[pdb_glycam->second.Form()]); + if (pdb_glycam->second.RingType() != UNKNOWN_RING && + pdb_glycam->second.RingType() != sugarInfo.RingType()) + mprintf("Warning: '%s' detected ring type is %s but ring type based on name is %s.\n", + sugarName.c_str(), ringstr_[sugarInfo.RingType()], + ringstr_[pdb_glycam->second.RingType()]); + // Change PDB names to Glycam ones // FIXME get rid of resChar char resChar = pdb_glycam->second.GlycamCode()[0]; - if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, form)) { + if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, sugarInfo.Form())) { mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); return 1; } - static const char* AnomerRetStr[] = { 0, 0, "Alpha", "Beta" }; - if (isDform) { - mprintf("\t %s Form is %s(%s)-D\n", sugarName.c_str(), AnomerRetStr[form], formStr.c_str()); - } else { - mprintf("\t %s Form is %s(%s)-L\n", sugarName.c_str(), AnomerRetStr[form], formStr.c_str()); + // Get glycam form string + std::string formStr; + if (sugarInfo.RingType() == PYRANOSE) { + if (sugarInfo.Form() == ALPHA) + formStr = "A"; + else + formStr = "B"; + } else if (sugarInfo.RingType() == FURANOSE) { + if (sugarInfo.Form() == ALPHA) + formStr = "D"; + else + formStr = "U"; } + // Sanity check + if (formStr.empty()) { + mprinterr("Internal Error: Could not set form string.\n"); + return 1; + } + + mprintf("\t %s form is %s(%s)-%s-%s\n", sugarName.c_str(), + formstr_[sugarInfo.Form()], formStr.c_str(), chirstr_[sugarInfo.Chirality()], + ringstr_[sugarInfo.RingType()]); // Identify linkages to other residues. std::string linkcode = DetermineSugarLinkages(sugar, cmask, topIn, resStat_, @@ -1458,10 +1523,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar const& sugar, Topology& topIn, return 0; } - // Modify residue char to indicate D form if necessary. + // Modify residue char to indicate L form if necessary. // We do this here and not above so as not to mess with the // linkage determination. - if (!isDform) + if (sugarInfo.Chirality() == IS_L) resChar = tolower( resChar ); // Set new residue name NameType newResName( linkcode + std::string(1,resChar) + formStr ); @@ -2006,7 +2071,7 @@ const /** Prepare sugars for leap. */ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, - std::vector const& Sugars, + std::vector& Sugars, Topology& topIn, Frame const& frameIn, CpptrajFile* outfile) @@ -2030,21 +2095,22 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, std::set sugarBondsToRemove; // For each sugar residue, see if it is bonded to a non-sugar residue. // If it is, remove that bond but record it. - for (std::vector::const_iterator sugar = Sugars.begin(); - sugar != Sugars.end(); ++sugar) + for (unsigned int sidx = 0; sidx != Sugars.size(); sidx++) { - if (sugar->NotSet()) { - resStat_[sugar->ResNum(topIn)] = SUGAR_SETUP_FAILED; + Sugar const& sugar = Sugars[sidx]; + Sugar& sugarIn = Sugars[sidx]; + if (sugar.NotSet()) { + resStat_[sugar.ResNum(topIn)] = SUGAR_SETUP_FAILED; continue; } // See if we recognize this sugar. - if (IdentifySugar(*sugar, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) + if (IdentifySugar(sugarIn, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) { if (errorsAreFatal_) return 1; else mprintf("Warning: Preparation of sugar %s failed, skipping.\n", - topIn.TruncResNameOnumId( sugar->ResNum(topIn) ).c_str()); + topIn.TruncResNameOnumId( sugar.ResNum(topIn) ).c_str()); } } // END loop over sugar residues // Remove bonds between sugars diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 3c149b29d3..c3a2ad2b7b 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -26,8 +26,6 @@ class Exec_PrepareForLeap : public Exec { class SugarToken; typedef std::vector Iarray; - /// Return type for DetermineAnomericForm - enum AnomerRetType { A_ERR = 0, A_WARNING, IS_ALPHA, IS_BETA }; enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_ACX, G_OH, G_OME, UNRECOGNIZED_GROUP }; enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, SUGAR_SETUP_FAILED }; @@ -45,6 +43,12 @@ class Exec_PrepareForLeap : public Exec { /// Keep synced with FunctionalGroupType static const char* FunctionalGroupStr_[]; + /// Keep synced with RingTypeEnum + static const char* ringstr_[]; + /// Keep synced with FormTypeEnum + static const char* formstr_[]; + /// Keep synced with ChirTypeEnum + static const char* chirstr_[]; inline void ChangeResName(Residue&, NameType const&) const; inline void ChangeAtomName(Atom&, NameType const&) const; @@ -76,18 +80,18 @@ class Exec_PrepareForLeap : public Exec { /// \return Sugar with atom indices set up Sugar IdSugarRing(int, Topology const&) const; /// Change PDB atom names to Glycam names - int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&, AnomerRetType) const; - /// \return If furanose is up or down - AnomerRetType DetermineUpOrDown(bool&, std::string&, Sugar const&, Topology const&, Frame const&) const; - /// \return Anomeric form of the sugar - AnomerRetType DetermineAnomericForm(bool&, std::string&, Sugar const&, Topology const&, Frame const&) const; + int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&, FormTypeEnum) const; + /// Determine form/chirality for furanose + int DetermineUpOrDown(SugarToken&, Sugar const&, Topology const&, Frame const&) const; + /// Determine form/chirliaty for pyranose + int DetermineAnomericForm(SugarToken&, Sugar&, Topology const&, Frame const&) const; /// \return Glycam linkage code for given link atoms std::string GlycamLinkageCode(std::set const&, Topology const&) const; /// Determine linkages for the sugar std::string DetermineSugarLinkages(Sugar const&, CharMask const&, Topology&, ResStatArray&, CpptrajFile*, std::set&) const; /// Try to identify sugar name, form, and linkages - int IdentifySugar(Sugar const&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); + int IdentifySugar(Sugar&, Topology&, Frame const&, CharMask const&, CpptrajFile*, std::set&); /// Try to find missing linkages to anomeric carbon in sugar. int FindSugarC1Linkages(int, int, Topology&, Frame const&) const; /// \return identity of the group bonded to given atom @@ -102,7 +106,7 @@ class Exec_PrepareForLeap : public Exec { int FixSugarsStructure(std::vector&, std::string const&, Topology&, Frame&, bool, bool) const; - int PrepareSugars(std::string const&, std::vector const&, Topology&, Frame const&, CpptrajFile*); + int PrepareSugars(std::string const&, std::vector&, Topology&, Frame const&, CpptrajFile*); int FindTerByBonds(Topology&, CharMask const&) const; int SearchForDisulfides(double, std::string const&, std::string const&, bool, Topology&, Frame const&, CpptrajFile*); @@ -169,7 +173,8 @@ class Exec_PrepareForLeap::Sugar { MULTIPLE_O, ///< Multiple potential ring oxygen atoms MISSING_CHAIN, ///< Could not find all chain carbons MISSING_ANO_REF, ///< Missing anomeric reference atom - MISSING_CONFIG ///< Missing configurational carbon + MISSING_CONFIG, ///< Missing configurational carbon + MISSING_C1X ///< Missing C1 X substituent }; /// CONSTRUCTOR - Status and residue first atom, incomplete setup Sugar(StatType, int); @@ -196,6 +201,8 @@ class Exec_PrepareForLeap::Sugar { void PrintInfo(Topology const&) const; /// Remap internal indices according to given atom map. void RemapIndices(Iarray const&, int, int); + + void SetStatus(StatType s) { stat_ = s; } private: /// Strings corresponding to StatType static const char* StatTypeStr_[]; @@ -249,6 +256,8 @@ class Exec_PrepareForLeap::SugarToken { SugarToken(); /// CONSTRUCTOR - name, glycam code, form, chirality, ring type SugarToken(std::string const&, std::string const&, FormTypeEnum, ChirTypeEnum, RingTypeEnum); + /// CONSTRUCTOR - ring type + SugarToken(RingTypeEnum); /// /return , set up from line: ' ' std::string SetFromLine(ArgList const&); /// Print token info to stdout @@ -259,6 +268,10 @@ class Exec_PrepareForLeap::SugarToken { FormTypeEnum Form() const { return form_; } ChirTypeEnum Chirality() const { return chir_; } RingTypeEnum RingType() const { return ring_; } + + void SetChirality(ChirTypeEnum c) { chir_ = c; } + void SetForm(FormTypeEnum f) { form_ = f; } + void SetRingType(RingTypeEnum r) { ring_ = r; } private: std::string name_; ///< Full sugar name //std::string resname_; ///< PDB residue name From 9928fcc3efc445ff59a8f16535cf8205f6e28e24 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 16 Nov 2021 11:13:52 -0500 Subject: [PATCH 297/368] Give identify sugar a chance to work even if all atoms not set --- src/Exec_PrepareForLeap.cpp | 46 ++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9de787f03a..9fa5247224 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1402,10 +1402,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, { Sugar const& sugar = sugarIn; const std::string sugarName = topIn.TruncResNameOnumId(sugar.ResNum(topIn)); - if (sugar.NotSet()) { - mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", sugarName.c_str()); - return 0; // TODO return 1? - } + //if (sugar.NotSet()) { + // mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", sugarName.c_str()); + // return 0; // TODO return 1? + //} int rnum = sugar.ResNum(topIn); Residue& res = topIn.SetRes(rnum); @@ -1424,20 +1424,24 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, mprintf("\tSugar %s glycam name: %s\n", sugarName.c_str(), pdb_glycam->second.GlycamCode().c_str()); - SugarToken sugarInfo(sugar.RingType()); + SugarToken sugarInfo; + int detect_err = 1; - // Determine alpha or beta and D or L - int detect_err; - if (sugarInfo.RingType() == FURANOSE) - detect_err = DetermineUpOrDown(sugarInfo, sugar, topIn, frameIn); - else if (sugarInfo.RingType() == PYRANOSE) - detect_err = DetermineAnomericForm(sugarInfo, sugarIn, topIn, frameIn); - else - detect_err = 1; - // Modify resStat_ based on sugar status - if (sugar.Status() == Sugar::MISSING_C1X) { - // Sugar missing C1-X substituent, non-fatal - resStat_[rnum] = SUGAR_MISSING_C1X; + if (!sugar.NotSet()) { + sugarInfo = SugarToken(sugar.RingType()); + + // Determine alpha or beta and D or L + if (sugarInfo.RingType() == FURANOSE) + detect_err = DetermineUpOrDown(sugarInfo, sugar, topIn, frameIn); + else if (sugarInfo.RingType() == PYRANOSE) + detect_err = DetermineAnomericForm(sugarInfo, sugarIn, topIn, frameIn); + else + detect_err = 1; + // Modify resStat_ based on sugar status + if (sugar.Status() == Sugar::MISSING_C1X) { + // Sugar missing C1-X substituent, non-fatal + resStat_[rnum] = SUGAR_MISSING_C1X; + } } if (detect_err != 0) { @@ -2099,10 +2103,10 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, { Sugar const& sugar = Sugars[sidx]; Sugar& sugarIn = Sugars[sidx]; - if (sugar.NotSet()) { - resStat_[sugar.ResNum(topIn)] = SUGAR_SETUP_FAILED; - continue; - } + //if (sugar.NotSet()) { + // resStat_[sugar.ResNum(topIn)] = SUGAR_SETUP_FAILED; + // continue; + //} // See if we recognize this sugar. if (IdentifySugar(sugarIn, topIn, frameIn, cmask, outfile, sugarBondsToRemove)) { From 088921e970fd6d936b528280774ad6ba8b3aec28 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 16 Nov 2021 17:31:04 -0500 Subject: [PATCH 298/368] Differentiate between unrecognized link residue and unrecognized linkage to sugar --- src/Exec_PrepareForLeap.cpp | 9 ++++++--- src/Exec_PrepareForLeap.h | 6 +++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9fa5247224..cd2bdae105 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1350,7 +1350,7 @@ const resStatIn[topIn[*bat].ResNum()] = VALIDATED; } else { mprintf("Warning: Unrecognized link residue %s, not modifying name.\n", *pres.Name()); - resStatIn[topIn[*bat].ResNum()] = UNRECOGNIZED_SUGAR_LINKAGE; + resStatIn[topIn[*bat].ResNum()] = SUGAR_UNRECOGNIZED_LINK_RES; } } else { // Atom is bonded to sugar residue @@ -1522,7 +1522,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, std::string linkcode = DetermineSugarLinkages(sugar, cmask, topIn, resStat_, outfile, sugarBondsToRemove); if (linkcode.empty()) { - resStat_[rnum] = UNRECOGNIZED_SUGAR_LINKAGE; + resStat_[rnum] = SUGAR_UNRECOGNIZED_LINKAGE; mprintf("Warning: Determination of sugar linkages failed.\n"); return 0; } @@ -3245,9 +3245,12 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); else *it = VALIDATED; - } else if ( *it == UNRECOGNIZED_SUGAR_LINKAGE ) { + } else if ( *it == SUGAR_UNRECOGNIZED_LINK_RES ) { mprintf("\t%s%s is linked to a sugar but has no sugar-linkage form.\n", msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + } else if ( *it == SUGAR_UNRECOGNIZED_LINKAGE ) { + mprintf("\t%s%s is a sugar with an unrecognized linkage.\n", + msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); } else if ( *it == SUGAR_MISSING_C1X ) { mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c3a2ad2b7b..015ffe5655 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -27,7 +27,11 @@ class Exec_PrepareForLeap : public Exec { typedef std::vector Iarray; enum FunctionalGroupType { G_SO3 = 0, G_CH3, G_ACX, G_OH, G_OME, UNRECOGNIZED_GROUP }; - enum ResStatType { UNKNOWN = 0, VALIDATED, UNRECOGNIZED_SUGAR_LINKAGE, SUGAR_MISSING_C1X, + enum ResStatType { UNKNOWN = 0, + VALIDATED, + SUGAR_UNRECOGNIZED_LINK_RES, + SUGAR_UNRECOGNIZED_LINKAGE, + SUGAR_MISSING_C1X, SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; From 0b1b796b61b50d4eedf1376bf70e3f3d2d56b0e6 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 17 Nov 2021 09:20:22 -0500 Subject: [PATCH 299/368] Differentiate between unrecognized linkage and no linkage. Do not look for bonds to ring oxygen atoms. --- src/Exec_PrepareForLeap.cpp | 34 +++++++++++++++++++++++----------- src/Exec_PrepareForLeap.h | 1 + 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index cd2bdae105..d5f0a7cf27 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -611,10 +611,10 @@ const // not found this usually means missing inter-residue bond. // Alternatively, this could be an isolated sugar missing an -OH // group, so make this non-fatal. - mprintf("Warning: Anomeric C non-ring substituent could not be identified.\n" - "Warning: This can happen if the sugar is bonded to something that\n" - "Warning: is missing, e.g. a -OH group. In that case the coordinates\n" - "Warning for the missing atoms may need to be generated.\n"); + mprintf("Warning: Anomeric C non-ring substituent could not be identified.\n"); + // "Warning: This can happen if the sugar is bonded to something that\n" + // "Warning: is missing, e.g. a -OH group. In that case the coordinates\n" + // "Warning for the missing atoms may need to be generated.\n"); return -1; } if (debug_ > 0) @@ -1292,6 +1292,8 @@ const // Loop over sugar atoms for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { + // Ignore the sugar oxygen + if (at == sugar.RingOxygenAtom()) continue; // This will be the index of the carbon that is atom is bonded to (or of this atom itself). int atomChainPosition = -1; // Find position in carbon chain @@ -1367,7 +1369,7 @@ const } } // END loop over bonded atoms - } // END loop over residue atoms + } // END loop over sugar atoms // Determine linkage //if (debug_ > 0) { @@ -1377,12 +1379,19 @@ const mprintf(" %s(%i)", *(topIn[it->Idx()].Name()), it->Position()); mprintf("\n"); //} - - std::string linkcode = GlycamLinkageCode(linkages, topIn); - if (debug_ > 0) mprintf("\t Linkage code: %s\n", linkcode.c_str()); - if (linkcode.empty()) { - mprinterr("Error: Unrecognized sugar linkage.\n"); + std::string linkcode; + if (linkages.empty()) { + mprintf("\t No linkages.\n"); + resStatIn[rnum] = SUGAR_NO_LINKAGE; return linkcode; + } else { + linkcode = GlycamLinkageCode(linkages, topIn); + if (debug_ > 0) mprintf("\t Linkage code: %s\n", linkcode.c_str()); + if (linkcode.empty()) { + mprinterr("Error: Unrecognized sugar linkage.\n"); + resStatIn[rnum] = SUGAR_UNRECOGNIZED_LINKAGE; + return linkcode; + } } // Remove bonds to other residues for (BondArray::const_iterator bnd = bondsToRemove.begin(); @@ -1522,7 +1531,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, std::string linkcode = DetermineSugarLinkages(sugar, cmask, topIn, resStat_, outfile, sugarBondsToRemove); if (linkcode.empty()) { - resStat_[rnum] = SUGAR_UNRECOGNIZED_LINKAGE; + //resStat_[rnum] = SUGAR_UNRECOGNIZED_LINKAGE; mprintf("Warning: Determination of sugar linkages failed.\n"); return 0; } @@ -3251,6 +3260,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } else if ( *it == SUGAR_UNRECOGNIZED_LINKAGE ) { mprintf("\t%s%s is a sugar with an unrecognized linkage.\n", msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + } else if ( *it == SUGAR_NO_LINKAGE ) { + mprintf("\t%s%s is a sugar with no linkages.\n", + msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); } else if ( *it == SUGAR_MISSING_C1X ) { mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 015ffe5655..770e1d8d35 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -31,6 +31,7 @@ class Exec_PrepareForLeap : public Exec { VALIDATED, SUGAR_UNRECOGNIZED_LINK_RES, SUGAR_UNRECOGNIZED_LINKAGE, + SUGAR_NO_LINKAGE, SUGAR_MISSING_C1X, SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; From 18e80940024afdf43db6fe3da5841660b86fe0be Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 17 Nov 2021 09:21:58 -0500 Subject: [PATCH 300/368] Also ignore hydrogens when looking for linkages --- src/Exec_PrepareForLeap.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index d5f0a7cf27..4aed5a01cf 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1292,8 +1292,10 @@ const // Loop over sugar atoms for (int at = res.FirstAtom(); at != res.LastAtom(); at++) { - // Ignore the sugar oxygen - if (at == sugar.RingOxygenAtom()) continue; + // Ignore the sugar oxygen and any hydrogen atoms + if (at == sugar.RingOxygenAtom() || + topIn[at].Element() == Atom::HYDROGEN) + continue; // This will be the index of the carbon that is atom is bonded to (or of this atom itself). int atomChainPosition = -1; // Find position in carbon chain From ad0e03c553f48ff1883ec62092ef466a1b512106 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 17 Nov 2021 09:33:05 -0500 Subject: [PATCH 301/368] Distinguish between potential problems (residue name not recognized but may have parameters) and fatal problems (link residue has no glycam form). --- src/Exec_PrepareForLeap.cpp | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4aed5a01cf..3c0e7655bf 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3242,7 +3242,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Residue validation. //mprintf("\tResidues with potential problems:\n"); - static const char* msg = "Potential problem: "; + int fatal_errors = 0; + static const char* msg1 = "Potential problem : "; + static const char* msg2 = "Fatal problem : "; for (ResStatArray::iterator it = resStat_.begin(); it != resStat_.end(); ++it) { //if ( *it == VALIDATED ) @@ -3253,24 +3255,29 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) SetType::const_iterator pname = pdb_res_names_.find( topIn.Res(it-resStat_.begin()).Name() ); if (pname == pdb_res_names_.end()) mprintf("\t%s%s is an unrecognized name and may not have parameters.\n", - msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + msg1, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); else *it = VALIDATED; } else if ( *it == SUGAR_UNRECOGNIZED_LINK_RES ) { mprintf("\t%s%s is linked to a sugar but has no sugar-linkage form.\n", - msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + fatal_errors++; } else if ( *it == SUGAR_UNRECOGNIZED_LINKAGE ) { mprintf("\t%s%s is a sugar with an unrecognized linkage.\n", - msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + fatal_errors++; } else if ( *it == SUGAR_NO_LINKAGE ) { mprintf("\t%s%s is a sugar with no linkages.\n", - msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + fatal_errors++; } else if ( *it == SUGAR_MISSING_C1X ) { mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", - msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + fatal_errors++; } else if ( *it == SUGAR_SETUP_FAILED ) { mprintf("\t%s%s Sugar setup failed and could not be identified.\n", - msg, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + fatal_errors++; } } @@ -3324,6 +3331,17 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } outfile->CloseFile(); + + if (fatal_errors > 0) { + if (errorsAreFatal_) { + mprinterr("Error: %i errors were encountered that will prevent LEaP from running successfully.\n", fatal_errors); + return CpptrajState::ERR; + } else { + mprintf("Warning: %i errors were encountered that will prevent LEaP from running successfully.\n", fatal_errors); + mprintf("Warning: Continuing on anyway, but final structure **NEEDS VALIDATION**.\n"); + } + } + if (!leapffname.empty()) { if (RunLeap( leapffname, leapfilename )) { mprinterr("Error: Running leap failed.\n"); From 13bb22a5a4fa0b9b2235e52ab34287dfc1f09159 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 17 Nov 2021 10:10:44 -0500 Subject: [PATCH 302/368] Allow sugars to be partially set up for linkage determination when chain atoms are identified but others are not. --- src/Exec_PrepareForLeap.cpp | 79 +++++++++++++++++++++++++------------ src/Exec_PrepareForLeap.h | 4 +- 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3c0e7655bf..4e35323020 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -32,6 +32,26 @@ Exec_PrepareForLeap::Sugar::Sugar(StatType status, int firstat) : ringType_(UNKNOWN_RING) {} +/** CONSTRUCTOR - Partial setup; ring O, anomeric atom, ring and chain atoms. */ +Exec_PrepareForLeap::Sugar::Sugar(StatType status, int roa, int aa, + Iarray const& RA, Iarray const& CA) : + stat_(status), + ring_oxygen_atom_(roa), + anomeric_atom_(aa), + ano_ref_atom_(-1), + highest_stereocenter_(-1), + ringType_(UNKNOWN_RING), + ring_atoms_(RA), + chain_atoms_(CA) +{ + if (ring_oxygen_atom_ != -1) { + if (RA.size() == 5) + ringType_ = PYRANOSE; + else if (RA.size() == 4) + ringType_ = FURANOSE; + } +} + /** CONSTRUCTOR - Set ring atom indices and ring type. */ Exec_PrepareForLeap::Sugar::Sugar(int roa, int aa, int ara, int hs, Iarray const& RA, Iarray const& CA) : @@ -68,28 +88,34 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { mprintf("\t%s : Not Set. %s\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str(), StatTypeStr_[stat_]); } else { - mprintf("\t%s :\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str()); + mprintf("\t%s : %s\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str(), + StatTypeStr_[stat_]); + } + //mprintf("\t%s :\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str()); + if (ring_oxygen_atom_ != -1) mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); + if (anomeric_atom_ != -1) mprintf("\t\tAnomeric C : %s\n", topIn.TruncAtomNameNum(anomeric_atom_).c_str()); + if (ano_ref_atom_ != -1) mprintf("\t\tAnomeric ref. C : %s\n", topIn.TruncAtomNameNum(ano_ref_atom_).c_str()); + if (highest_stereocenter_ != -1) mprintf("\t\tConfig. C : %s\n", topIn.TruncAtomNameNum(highest_stereocenter_).c_str()); - mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); - static const char* RingPrefixStr[] = { "Hexo", "Pento", "Other" }; - int rpsidx = 2; - if (chain_atoms_.size() == 6) - rpsidx = 0; - else if (chain_atoms_.size() == 5) - rpsidx = 1; - static const char* RingTypeStr[] = { "Pyranose", "Furanose", "Unknown" }; - mprintf("\t\tRing Type : %s%s\n", RingPrefixStr[rpsidx], RingTypeStr[ringType_]); - mprintf("\t\tNon-O Ring atoms :"); - for (Iarray::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) - mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); - mprintf("\n\t\tChain atoms :"); - for (Iarray::const_iterator it = chain_atoms_.begin(); it != chain_atoms_.end(); ++it) - mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); - mprintf("\n"); - } + mprintf("\t\tNum ring atoms : %u\n", NumRingAtoms()); + static const char* RingPrefixStr[] = { "Hexo", "Pento", "Other" }; + int rpsidx = 2; + if (chain_atoms_.size() == 6) + rpsidx = 0; + else if (chain_atoms_.size() == 5) + rpsidx = 1; + static const char* RingTypeStr[] = { "Pyranose", "Furanose", "Unknown" }; + mprintf("\t\tRing Type : %s%s\n", RingPrefixStr[rpsidx], RingTypeStr[ringType_]); + mprintf("\t\tNon-O Ring atoms :"); + for (Iarray::const_iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) + mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); + mprintf("\n\t\tChain atoms :"); + for (Iarray::const_iterator it = chain_atoms_.begin(); it != chain_atoms_.end(); ++it) + mprintf(" %s", topIn.TruncAtomNameNum(*it).c_str()); + mprintf("\n"); } /** \return Number of ring atoms (including oxygen) */ @@ -110,11 +136,14 @@ inline static int find_new_idx(int oldidx, std::vector const& atomMap, int void Exec_PrepareForLeap::Sugar::RemapIndices(Iarray const& atomMap, int at0, int at1) { // Always try the anomeric atom anomeric_atom_ = find_new_idx(anomeric_atom_, atomMap, at0, at1); //atomMap[anomeric_atom_]; - if (NotSet()) return; + //if (NotSet()) return; //mprintf("DEBUG: Ring O old = %i ring O new %i\n", ring_oxygen_atom_+1, atomMap[ring_oxygen_atom_]+1); - ring_oxygen_atom_ = find_new_idx(ring_oxygen_atom_, atomMap, at0, at1); //atomMap[ring_oxygen_atom_]; - ano_ref_atom_ = find_new_idx(ano_ref_atom_, atomMap, at0, at1); //atomMap[ano_ref_atom_]; - highest_stereocenter_ = find_new_idx(highest_stereocenter_, atomMap, at0, at1); //atomMap[highest_stereocenter_]; + if (ring_oxygen_atom_ != -1) + ring_oxygen_atom_ = find_new_idx(ring_oxygen_atom_, atomMap, at0, at1); //atomMap[ring_oxygen_atom_]; + if (ano_ref_atom_ != -1) + ano_ref_atom_ = find_new_idx(ano_ref_atom_, atomMap, at0, at1); //atomMap[ano_ref_atom_]; + if (highest_stereocenter_ != -1) + highest_stereocenter_ = find_new_idx(highest_stereocenter_, atomMap, at0, at1); //atomMap[highest_stereocenter_]; for (Iarray::iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) *it = find_new_idx(*it, atomMap, at0, at1); //atomMap[*it]; for (Iarray::iterator it = chain_atoms_.begin(); it != chain_atoms_.end(); ++it) @@ -1033,11 +1062,11 @@ const if (ano_ref_atom == -1) { mprinterr("Error: Anomeric reference atom could not be identified.\n"); - return Sugar(Sugar::MISSING_ANO_REF, res.FirstAtom()); + return Sugar(Sugar::MISSING_ANO_REF, ring_oxygen_atom, anomeric_atom, RA, carbon_chain); } if (highest_stereocenter == -1) { mprinterr("Error: Highest stereocenter atom could not be identified.\n"); - return Sugar(Sugar::MISSING_CONFIG, res.FirstAtom()); + return Sugar(Sugar::MISSING_CONFIG, ring_oxygen_atom, anomeric_atom, RA, carbon_chain); } // if (!ring_complete || RA.empty() || ring_oxygen_atom == -1) { @@ -2971,7 +3000,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // DEBUG - print residue name map mprintf("\tResidue name map:\n"); for (MapType::const_iterator mit = pdb_to_glycam_.begin(); mit != pdb_to_glycam_.end(); ++mit) - mprintf("\t %4s -> %c\n", *(mit->first), mit->second); + mprintf("\t %4s -> %s\n", *(mit->first), mit->second.GlycamCode().c_str()); // DEBUG - print atom name maps mprintf("\tRes char to atom map index map:\n"); for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 770e1d8d35..61863c39ab 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -183,6 +183,8 @@ class Exec_PrepareForLeap::Sugar { }; /// CONSTRUCTOR - Status and residue first atom, incomplete setup Sugar(StatType, int); + /// CONSTRUCTOR - Status, ring O, anomeric, ring atoms, chain atoms, incomplete setup + Sugar(StatType, int, int, Iarray const&,Iarray const&); /// CONSTRUCTOR - ring O, Anomeric, Anomeric Ref, Highest Sterocenter, ring atoms, chain atoms Sugar(int,int,int,int,Iarray const&,Iarray const&); @@ -200,7 +202,7 @@ class Exec_PrepareForLeap::Sugar { // const_iterator ringbegin() const { return ring_atoms_.begin(); } // const_iterator ringend() const { return ring_atoms_.end(); } - bool NotSet() const { return (ring_oxygen_atom_ < 0); } + bool NotSet() const { return (stat_ != SETUP_OK); } /// \return Number of ring atoms unsigned int NumRingAtoms() const; void PrintInfo(Topology const&) const; From 7f8b66e50e99444be9c1f0b99493f1f80d9f6397 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 17 Nov 2021 10:26:35 -0500 Subject: [PATCH 303/368] If no chain atoms are identified this will break the current linkage determination. Add an error case for this. Move PDB atom name changes to after linkage determination, may add name-based determination at some point. --- src/Exec_PrepareForLeap.cpp | 29 +++++++++++++++++++++-------- src/Exec_PrepareForLeap.h | 1 + 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4e35323020..3f6d3c0f66 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1312,6 +1312,15 @@ const int rnum = sugar.ResNum(topIn); Residue const& res = topIn.SetRes(rnum); + // If we haven't identified carbon chain atoms we can't determine their + // position and therefore the link code. + if (sugar.ChainAtoms().empty()) { + mprinterr("Error: No chain atoms determined for '%s', cannot determine link positions.\n", + topIn.TruncResNameOnumId(rnum).c_str()); + resStatIn[rnum] = SUGAR_NO_CHAIN_FOR_LINK; + return std::string(""); + } + // Use set to store link atoms so it is ordered by position std::set linkages; @@ -1527,14 +1536,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, sugarName.c_str(), ringstr_[sugarInfo.RingType()], ringstr_[pdb_glycam->second.RingType()]); - // Change PDB names to Glycam ones - // FIXME get rid of resChar - char resChar = pdb_glycam->second.GlycamCode()[0]; - if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, sugarInfo.Form())) { - mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); - return 1; - } - // Get glycam form string std::string formStr; if (sugarInfo.RingType() == PYRANOSE) { @@ -1567,6 +1568,14 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, return 0; } + // Change PDB names to Glycam ones + // FIXME get rid of resChar + char resChar = pdb_glycam->second.GlycamCode()[0]; + if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, sugarInfo.Form())) { + mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); + return 1; + } + // Modify residue char to indicate L form if necessary. // We do this here and not above so as not to mess with the // linkage determination. @@ -3299,6 +3308,10 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\t%s%s is a sugar with no linkages.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; + } else if ( *it == SUGAR_NO_CHAIN_FOR_LINK ) { + mprintf("\t%s%s could not identify chain atoms for determining linkages.\n", + msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + fatal_errors++; } else if ( *it == SUGAR_MISSING_C1X ) { mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 61863c39ab..b59bdbf0cf 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -32,6 +32,7 @@ class Exec_PrepareForLeap : public Exec { SUGAR_UNRECOGNIZED_LINK_RES, SUGAR_UNRECOGNIZED_LINKAGE, SUGAR_NO_LINKAGE, + SUGAR_NO_CHAIN_FOR_LINK, SUGAR_MISSING_C1X, SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; From e9be7e325ce5ab4b2dbb854fa0084806e25cb4c6 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 17 Nov 2021 11:08:46 -0500 Subject: [PATCH 304/368] Add note about recognizing NHE --- src/Exec_PrepareForLeap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3f6d3c0f66..44bc4794be 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3237,6 +3237,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tLEaP input containing 'loadpdb' and bond commands for disulfides,\n" "\t sugars, etc will be written to '%s'\n", outfile->Filename().full()); // Add the loadpdb command if we are writing a PDB file. + // TODO add 'addPdbResMap { { 1 "NH2" "NHE" } }' to recognize NHE? if (!pdbout.empty()) outfile->Printf("%s = loadpdb %s\n", leapunitname_.c_str(), pdbout.c_str()); From 5c54355471acf06c6ad6f500afe6c9610acab6a7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 19 Nov 2021 09:20:24 -0500 Subject: [PATCH 305/368] Add sugar name mismatch status --- src/Exec_PrepareForLeap.cpp | 20 ++++++++++++++++++-- src/Exec_PrepareForLeap.h | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 44bc4794be..7067089aae 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1522,20 +1522,32 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, // Warn about form/chirality mismatches. if (pdb_glycam->second.Form() != UNKNOWN_FORM && pdb_glycam->second.Form() != sugarInfo.Form()) + { mprintf("Warning: '%s' detected form is %s but form based on name is %s.\n", sugarName.c_str(), formstr_[sugarInfo.Form()], formstr_[pdb_glycam->second.Form()]); + if (sugarInfo.Form() != UNKNOWN_FORM) + resStat_[rnum] = SUGAR_NAME_MISMATCH; + } if (pdb_glycam->second.Chirality() != UNKNOWN_CHIR && pdb_glycam->second.Chirality() != sugarInfo.Chirality()) + { mprintf("Warning: '%s' detected chirality is %s but chirality based on name is %s.\n", sugarName.c_str(), chirstr_[sugarInfo.Form()], chirstr_[pdb_glycam->second.Form()]); + if (sugarInfo.Chirality() != UNKNOWN_CHIR) + resStat_[rnum] = SUGAR_NAME_MISMATCH; + } if (pdb_glycam->second.RingType() != UNKNOWN_RING && pdb_glycam->second.RingType() != sugarInfo.RingType()) + { mprintf("Warning: '%s' detected ring type is %s but ring type based on name is %s.\n", sugarName.c_str(), ringstr_[sugarInfo.RingType()], ringstr_[pdb_glycam->second.RingType()]); - + if (sugarInfo.RingType() != UNKNOWN_RING) + resStat_[rnum] = SUGAR_NAME_MISMATCH; + } + // Get glycam form string std::string formStr; if (sugarInfo.RingType() == PYRANOSE) { @@ -1585,7 +1597,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, NameType newResName( linkcode + std::string(1,resChar) + formStr ); mprintf("\t Changing %s to Glycam resname: %s\n", topIn.TruncResNameOnumId(rnum).c_str(), *newResName); ChangeResName(res, newResName); - resStat_[rnum] = VALIDATED; + if (resStat_[rnum] == UNKNOWN) + resStat_[rnum] = VALIDATED; return 0; } @@ -3297,6 +3310,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) msg1, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); else *it = VALIDATED; + } else if ( *it == SUGAR_NAME_MISMATCH ) { + mprintf("\t%s%s sugar form and/or chirality is not consistent with name.\n", + msg1, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); } else if ( *it == SUGAR_UNRECOGNIZED_LINK_RES ) { mprintf("\t%s%s is linked to a sugar but has no sugar-linkage form.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index b59bdbf0cf..cff9a6ddf0 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -33,6 +33,7 @@ class Exec_PrepareForLeap : public Exec { SUGAR_UNRECOGNIZED_LINKAGE, SUGAR_NO_LINKAGE, SUGAR_NO_CHAIN_FOR_LINK, + SUGAR_NAME_MISMATCH, SUGAR_MISSING_C1X, SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; From 836d632a8d93bd65a4d5059188989e8b77f94dd9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Dec 2021 09:59:29 -0500 Subject: [PATCH 306/368] Add hasglycam keyword in case the PDB already has glycam sugar names --- src/Exec_PrepareForLeap.cpp | 73 +++++++++++++++++++++++++++++++------ src/Exec_PrepareForLeap.h | 3 +- 2 files changed, 64 insertions(+), 12 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7067089aae..c7260dd4a8 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -230,6 +230,7 @@ std::string Exec_PrepareForLeap::SugarToken::SetFromLine(ArgList const& line) { /** CONSTRUCTOR */ Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), errorsAreFatal_(true), + hasGlycam_(false), debug_(0) { SetHidden(true); @@ -1361,10 +1362,10 @@ const // Check if the other residue is a sugar or not if (!cmask.AtomInCharMask(*bat)) { // Atom is bonded to non-sugar residue. - mprintf("\t Sugar %s %s bonded to non-sugar %s %s at position %i\n", - topIn.TruncResNameOnumId(rnum).c_str(), *(topIn[at].Name()), + mprintf("\t Sugar %s %s (%i) bonded to non-sugar %s %s (%i) at position %i\n", + topIn.TruncResNameOnumId(rnum).c_str(), *(topIn[at].Name()), rnum+1, topIn.TruncResNameOnumId(topIn[*bat].ResNum()).c_str(), - *(topIn[*bat].Name()), atomChainPosition+1); + *(topIn[*bat].Name()), topIn[*bat].ResNum()+1, atomChainPosition+1); bondsToRemove.push_back( BondType(at, *bat, -1) ); // Check if this is a recognized linkage to non-sugar Residue& pres = topIn.SetRes( topIn[*bat].ResNum() ); @@ -1451,6 +1452,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, { Sugar const& sugar = sugarIn; const std::string sugarName = topIn.TruncResNameOnumId(sugar.ResNum(topIn)); + const std::string resName = topIn.Res(sugar.ResNum(topIn)).Name().Truncated(); //if (sugar.NotSet()) { // mprintf("Warning: Sugar %s is not set up. Skipping sugar identification.\n", sugarName.c_str()); // return 0; // TODO return 1? @@ -1461,12 +1463,41 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, // Try to ID the base sugar type from the input name. //char resChar = ' '; - MapType::const_iterator pdb_glycam = pdb_to_glycam_.find( res.Name() ); + MapType::const_iterator pdb_glycam; + if (!hasGlycam_) { + pdb_glycam = pdb_to_glycam_.find( res.Name() ); + //resChar = pdb_glycam->second; + } else { + mprintf("\tGlycam res: '%s'\n", resName.c_str()); + // Assume residue name is already glycam. Find it. Get sugar from 2nd char. + std::string rChar(1, resName[1]); + // Determine chirality from upper/lowercase + ChirTypeEnum cType = UNKNOWN_CHIR; + if (islower(rChar.front())) + cType = IS_L; + else + cType = IS_D; + // Now force uppercase + rChar.assign( 1, toupper(rChar.front()) ); + std::string fChar(1, resName[2]); + mprintf("DEBUG: Searching for glycam char '%s' '%s'\n", rChar.c_str(), fChar.c_str()); + // Get form from 3rd char + FormTypeEnum fType = UNKNOWN_FORM; + if (fChar == "U" || fChar == "B") + fType = BETA; + else if (fChar == "D" || fChar == "A") + fType = ALPHA; + for (pdb_glycam = pdb_to_glycam_.begin(); pdb_glycam != pdb_to_glycam_.end(); ++pdb_glycam) + if (pdb_glycam->second.GlycamCode() == rChar && + pdb_glycam->second.Form() == fType && + pdb_glycam->second.Chirality() == cType) + break; + } + if ( pdb_glycam == pdb_to_glycam_.end() ) { mprinterr("Error: Could not identify sugar from residue name '%s'\n", *res.Name()); return 1; } - //resChar = pdb_glycam->second; mprintf("DEBUG: "); pdb_glycam->second.PrintInfo( pdb_glycam->first.Truncated() ); @@ -1583,9 +1614,11 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, // Change PDB names to Glycam ones // FIXME get rid of resChar char resChar = pdb_glycam->second.GlycamCode()[0]; - if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, sugarInfo.Form())) { - mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); - return 1; + if (!hasGlycam_) { + if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, sugarInfo.Form())) { + mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); + return 1; + } } // Modify residue char to indicate L form if necessary. @@ -1595,8 +1628,15 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, resChar = tolower( resChar ); // Set new residue name NameType newResName( linkcode + std::string(1,resChar) + formStr ); - mprintf("\t Changing %s to Glycam resname: %s\n", topIn.TruncResNameOnumId(rnum).c_str(), *newResName); - ChangeResName(res, newResName); + if (!hasGlycam_) { + mprintf("\t Changing %s to Glycam resname: %s\n", + topIn.TruncResNameOnumId(rnum).c_str(), *newResName); + ChangeResName(res, newResName); + } else { + if (newResName.Truncated() != resName) + mprintf("Warning: Detected glycam name '%s' differs from original name '%s'\n", + *newResName, resName.c_str()); + } if (resStat_[rnum] == UNKNOWN) resStat_[rnum] = VALIDATED; return 0; @@ -2188,6 +2228,14 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, } // Bonds to sugars have been removed, so regenerate molecule info topIn.DetermineMolecules(); + // Set each sugar as terminal +/* for (std::vector::const_iterator sugar = Sugars.begin(); sugar != Sugars.end(); ++sugar) + { + int rnum = sugar->ResNum(topIn); + topIn.SetRes(rnum).SetTerminal(true); + if (rnum - 1 > -1) + topIn.SetRes(rnum-1).SetTerminal(true); + }*/ } return 0; } @@ -2902,7 +2950,7 @@ void Exec_PrepareForLeap::Help() const "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars |\n" "\t sugarmask [noc1search] [notermsearch] [resmapfile ]\n" - "\t [terminalhydroxylname ]\n" + "\t [terminalhydroxylname ] [hasglycam]\n" "\t }]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" @@ -3153,6 +3201,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) sugarmaskstr.append( mit->first.Truncated() ); } } + hasGlycam_ = argIn.hasKey("hasglycam"); + if (hasGlycam_) + mprintf("\tAssuming sugars already have glycam residue names.\n"); // If preparing sugars, need to set up an atom map and potentially // search for terminal sugars/missing bonds. Do this here after all atom diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index cff9a6ddf0..f8982e48f8 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -164,7 +164,8 @@ class Exec_PrepareForLeap : public Exec { std::string leapunitname_; bool errorsAreFatal_; ///< If false, try to skip errors. - int debug_; ///< Debug level + bool hasGlycam_; ///< If true, assume sugars already have glycam names + int debug_; ///< Debug level std::string solventResName_; ///< Solvent residue name std::string terminalHydroxylName_; ///< Terminal hydroxyl name AtomMap myMap_; From fac022129d89a6367645c97d68992e49bb910e54 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Dec 2021 10:39:57 -0500 Subject: [PATCH 307/368] Set each sugar and the preceding residue as terminal, set split residues (functional groups) as terminal --- src/Exec_PrepareForLeap.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index c7260dd4a8..0a6a042049 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1969,6 +1969,8 @@ const mprinterr("Error: Could not split sulfate from residue '%s'.\n", sugarName.c_str()); return 1; } + // Set the split residue as terminal + topIn.SetRes(rnum+1).SetTerminal(true); // Reorder the frame to match Frame oldFrame = frameIn; frameIn.SetCoordinatesByMap( oldFrame, atomMap ); @@ -2060,6 +2062,8 @@ const mprinterr("Error: Could not split the residue '%s'.\n", sugarName.c_str()); return 1; } + // Set the split residue as terminal + topIn.SetRes(rnum+1).SetTerminal(true); // DEBUG //for (int at = original_at0; at != original_at1; at++) // mprintf("DEBUG:\t\tAtomMap[%i] = %i\n", at, atomMap[at]); @@ -2229,13 +2233,13 @@ int Exec_PrepareForLeap::PrepareSugars(std::string const& sugarmaskstr, // Bonds to sugars have been removed, so regenerate molecule info topIn.DetermineMolecules(); // Set each sugar as terminal -/* for (std::vector::const_iterator sugar = Sugars.begin(); sugar != Sugars.end(); ++sugar) + for (std::vector::const_iterator sugar = Sugars.begin(); sugar != Sugars.end(); ++sugar) { int rnum = sugar->ResNum(topIn); topIn.SetRes(rnum).SetTerminal(true); if (rnum - 1 > -1) topIn.SetRes(rnum-1).SetTerminal(true); - }*/ + } } return 0; } @@ -3427,7 +3431,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (!pdbout.empty()) { Trajout_Single PDB; PDB.SetDebug( debug_ ); - if (PDB.InitTrajWrite( pdbout, "topresnum", State.DSL(), TrajectoryFile::PDBFILE)) { + if (PDB.InitTrajWrite( pdbout, "topresnum pdbter", State.DSL(), TrajectoryFile::PDBFILE)) { mprinterr("Error: Could not initialize output PDB\n"); return CpptrajState::ERR; } From 8d1dc9ddda823786736cfc76661348021f088f13 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Dec 2021 10:56:19 -0500 Subject: [PATCH 308/368] Have solvent marked as terminal for now --- src/Exec_PrepareForLeap.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0a6a042049..289ef13679 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3342,6 +3342,8 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if ( res->Name() == solvName) { nsolvent++; resStat_[res-topIn.ResStart()] = VALIDATED; + // Set as terminal; TODO is this needed? Leap seems ok with not having TER for HOH + topIn.SetRes(res-topIn.ResStart()).SetTerminal(true); } } if (nsolvent > 0) mprintf("\t%u solvent residues.\n", nsolvent); @@ -3395,7 +3397,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } - // Change HIS res names + // Change HIS res names FIXME this will have to go before sugar split stuff for (unsigned int idx = 0; idx != HisResIdxs.size(); idx++) ChangeResName( topIn.SetRes(HisResIdxs[idx]), HisResNames[idx] ); From d2aeff6726db6a261fc8604cafa5c1d94504604d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 1 Dec 2021 11:48:53 -0500 Subject: [PATCH 309/368] Add terbymol keyword to recover previous behavior if desired --- src/Exec_PrepareForLeap.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 289ef13679..4b5a704ca5 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2941,7 +2941,8 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const { - mprintf("\tcrdset [frame <#>] name [pdbout ]\n" + mprintf("\tcrdset [frame <#>] name \n" + "\t[pdbout [terbymol]]\n" "\t[leapunitname ] [out [runleap ]]\n" "\t[skiperrors]\n" "\t[nowat [watername ] [noh] [keepaltloc ]\n" @@ -3027,6 +3028,12 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } } + std::string pdb_ter_arg; + if (!argIn.hasKey("terbymol")) { + mprintf("\tUsing original TER cards where possible.\n"); + pdb_ter_arg.assign("pdbter"); + } else + mprintf("\tGenerating TER cards based on molecular connectivity.\n"); std::string leapfilename = argIn.GetStringKey("out"); if (!leapfilename.empty()) @@ -3433,7 +3440,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (!pdbout.empty()) { Trajout_Single PDB; PDB.SetDebug( debug_ ); - if (PDB.InitTrajWrite( pdbout, "topresnum pdbter", State.DSL(), TrajectoryFile::PDBFILE)) { + if (PDB.InitTrajWrite( pdbout, "topresnum " + pdb_ter_arg, State.DSL(), TrajectoryFile::PDBFILE)) { mprinterr("Error: Could not initialize output PDB\n"); return CpptrajState::ERR; } From d4bd46ed8d844e1bfc5c8bc61778703f25dde233 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 2 Dec 2021 08:57:43 -0500 Subject: [PATCH 310/368] Add some test code. Not enabled though. --- src/Exec_PrepareForLeap.cpp | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4b5a704ca5..7a72424fb4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1120,6 +1120,54 @@ int Exec_PrepareForLeap::DetermineUpOrDown(SugarToken& stoken, Topology const& topIn, Frame const& frameIn) const { + /** TEST TEST TEST */ +/* + double t_an = 0; + int ret1 = CalcAnomericTorsion(t_an, sugar.AnomericAtom(), sugar.RingOxygenAtom(), + sugar.ResNum(topIn), + sugar.RingAtoms(), topIn, frameIn); + //if (ret < 0) { + // // This means C1 X substituent missing; non-fatal. + // sugarIn.SetStatus( Sugar::MISSING_C1X ); + // return 1; // TODO return 0? + //} else if (ret > 0) { + // // Error + // return 1; + //} + // The definition of 'up' here is reversed compared to pyranose. + bool t_an_up = !(t_an > 0); + + double t_cc = 0; + int ret2 = CalcConfigCarbonTorsion(t_cc, sugar.HighestStereocenter(), + sugar.ChainAtoms(), topIn, frameIn); + // return 1; + //} else + // t_cc = t_ar; + bool t_cc_up = !(t_cc > 0); + + if (t_cc_up) { + mprintf("DEBUG: Furanose config carbon is UP (D); torsion: %f deg., ret= %i\n", + t_cc*Constants::RADDEG, ret2); + if (t_an_up) + mprintf("DEBUG: Furanose anomeric carbon is UP (beta-D); torsion: %f deg., ret= %i\n", + t_an*Constants::RADDEG, ret1); + else + mprintf("DEBUG: Furanose anomeric carbon is DOWN (alpha-D); torsion %f deg., ret= %i\n", + t_an*Constants::RADDEG, ret2); + } else { + mprintf("DEBUG: Furanose config carbon is DOWN (L); torsion: %f deg., ret= %i\n", + t_cc*Constants::RADDEG, ret2); + if (t_an_up) + mprintf("DEBUG: Furanose anomeric carbon is UP (alpha-L); torsion: %f deg., ret= %i\n", + t_an*Constants::RADDEG, ret1); + else + mprintf("DEBUG: Furanose anomeric carbon is DOWN (beta-L); torsion %f deg., ret= %i\n", + t_an*Constants::RADDEG, ret2); + } +*/ + /** END TEST TEST TEST */ + + int cdebug; if (debug_ > 1) cdebug = 1; From ee244844fa35088f6b430856dfc7cfcd684ea84a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 2 Dec 2021 10:32:26 -0500 Subject: [PATCH 311/368] Fix error message --- src/Exec_PrepareForLeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 7a72424fb4..89a88c4a97 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1612,8 +1612,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, pdb_glycam->second.Chirality() != sugarInfo.Chirality()) { mprintf("Warning: '%s' detected chirality is %s but chirality based on name is %s.\n", - sugarName.c_str(), chirstr_[sugarInfo.Form()], - chirstr_[pdb_glycam->second.Form()]); + sugarName.c_str(), chirstr_[sugarInfo.Chirality()], + chirstr_[pdb_glycam->second.Chirality()]); if (sugarInfo.Chirality() != UNKNOWN_CHIR) resStat_[rnum] = SUGAR_NAME_MISMATCH; } From b4b4fee25387f2f50f6f287e7091ba3b9fa35874 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 11:53:52 -0500 Subject: [PATCH 312/368] Start getting missing residue info to store in topology --- src/PDBfile.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++------ src/PDBfile.h | 8 ++++--- src/Parm_PDB.cpp | 19 +++++++++++++--- 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/src/PDBfile.cpp b/src/PDBfile.cpp index dc82a8acab..ed7a33ec03 100644 --- a/src/PDBfile.cpp +++ b/src/PDBfile.cpp @@ -2,6 +2,7 @@ #include // atoi, atof #include // strncmp #include // std::copy +#include "ArgList.h" #include "PDBfile.h" #include "CpptrajStdio.h" #include "StringRoutines.h" // integerToString @@ -165,9 +166,9 @@ PDBfile::Link& PDBfile::Link::operator=(Link const& rhs) { // ===== PDBfile class ========================================================= /// PDB record types // NOTE: Must correspond with PDB_RECTYPE -const char* PDBfile::PDB_RECNAME[] = { +const char* PDBfile::PDB_RECNAME_[] = { "ATOM ", "HETATM", "CRYST1", "TER ", "END ", "ANISOU", "EndRec", - "CONECT", "LINK ", "REMARK", 0 }; + "CONECT", "LINK ", "REMARK", "REMARK", "REMARK", 0 }; /// CONSTRUCTOR PDBfile::PDBfile() : @@ -279,13 +280,56 @@ PDBfile::PDB_RECTYPE PDBfile::NextRecord() { recType_ = END; else if (strncmp(linebuffer_,"REMARK",6)==0) { // REMARK record. - if (linebuffer_[7] == '4' && linebuffer_[8] == '6' && - linebuffer_[9] == '5' && linebuffer_[11] == 'M') + // 111111111122222222 + // 0123456789012345678901234567 + // REMARK 465 MISSING RESIDUES + // REMARK 470 MISSING ATOM + // REMARK 610 MISSING HETEROATOM + if (linebuffer_[7] == '4' && linebuffer_[8] == '6' && linebuffer_[9] == '5') recType_ = MISSING_RES; + else if (linebuffer_[7] == '4' && linebuffer_[8] == '7' && linebuffer_[9] == '0') + recType_ = MISSING_ATOM; + else if (linebuffer_[7] == '6' && linebuffer_[8] == '1' && linebuffer_[9] == '0') + recType_ = MISSING_HET; } return recType_; } +/** Get a list of missing residues from the PDB file. */ +int PDBfile::Get_Missing_Res(std::vector& missingResidues) { + bool inMissing = false; + while (recType_ == MISSING_RES) { + mprintf("DEBUG: rectype=%i %s", (int)recType_, linebuffer_); + ArgList line(linebuffer_, " \r\n"); + if (line.Nargs() > 5) { + // Actual missing residues starts after 'REMARK 465 M RES C SSSEQI' + if (line[2] == "M" && line[3] == "RES" && line[4] == "C") + inMissing = true; + } else if (inMissing && line.Nargs() > 2) { + std::string const& currentname = line[2]; + char currentchain = linebuffer_[19]; + // Need to be able to parse out insertion code + char currenticode = linebuffer_[26]; + int currentres; + if (currenticode == ' ') { + currentres = atoi(line[4].c_str()); + } else { + char numbuf[6]; + std::copy(linebuffer_+21, linebuffer_+26, numbuf); + numbuf[5] = '\0'; + currentres = atoi(numbuf); + } + mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", + currentname.c_str(), currentres, currenticode, currentchain); + //if (std::find(ignoreseq.begin(), ignoreseq.end(), currentname) == ignoreseq.end()) + missingResidues.push_back( Residue(currentname, currentres, currenticode, currentchain) ); + } + NextRecord(); + mprintf("DEBUG: rectype=%i\n", (int)recType_); + } + return 0; +} + /** \return Atom alt. loc. code from PDB ATOM/HETATM line. */ char PDBfile::pdb_AltLoc() const { return linebuffer_[16]; @@ -595,8 +639,8 @@ void PDBfile::WriteRecordHeader(PDB_RECTYPE Record, int anum, NameType const& na for (int i = 0; i < an_size; i++) atomName[i+1] = name[i]; } - - Printf("%-6s%5i %-4s%5s%c%4i%c",PDB_RECNAME[Record], anum, atomName, + // TODO if REMARK, which #? + Printf("%-6s%5i %-4s%5s%c%4i%c",PDB_RECNAME_[Record], anum, atomName, resName, chain, resnum, icode); if (Record == TER) Printf("\n"); } diff --git a/src/PDBfile.h b/src/PDBfile.h index a7bfcf01be..9ec4de1e96 100644 --- a/src/PDBfile.h +++ b/src/PDBfile.h @@ -9,15 +9,17 @@ class PDBfile : public CpptrajFile { class SSBOND; class SymOp; class Link; - // NOTE: PDB_RECNAME must correspond with this. + // NOTE: PDB_RECNAME_ must correspond with this. enum PDB_RECTYPE {ATOM=0, HETATM, CRYST1, TER, END, ANISOU, END_OF_FILE, - CONECT, LINK, MISSING_RES, UNKNOWN}; + CONECT, LINK, MISSING_RES, MISSING_ATOM, MISSING_HET, UNKNOWN}; /// CONSTRUCTOR PDBfile(); /// Check if either of the first two lines contain valid PDB records. static bool ID_PDB(CpptrajFile&); /// \return the type of the next PDB record read. PDB_RECTYPE NextRecord(); + /// Get a list of missing residues from the PDB file (REMARK 465) + int Get_Missing_Res(std::vector&); /// \return ATOM/HETATM alt. loc ID char pdb_AltLoc() const; /// \return Atom info with name and element for ATOM/HETATM; set altLoc and #. @@ -98,7 +100,7 @@ class PDBfile : public CpptrajFile { bool coordOverflow_; ///< True if coords on write exceed field width bool useCol21_; ///< If true, use column 21 for 4-char res name /// Recognized PDB record types; corresponds to PDB_RECTYPE - static const char* PDB_RECNAME[]; + static const char* PDB_RECNAME_[]; }; /// Hold information for an SSBOND record. class PDBfile::SSBOND { diff --git a/src/Parm_PDB.cpp b/src/Parm_PDB.cpp index 709913c4f1..2d60d3ffd4 100644 --- a/src/Parm_PDB.cpp +++ b/src/Parm_PDB.cpp @@ -86,7 +86,8 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { Timer time_total, time_atom; time_total.Start(); # endif - bool missingResidues = false; + bool hasMissingResidues = false; + std::vector missingResidues; int nAltLocSkipped = 0; // Loop over PDB records while ( infile.NextRecord() != PDBfile::END_OF_FILE ) { @@ -158,15 +159,27 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { //TopIn.StartNewMol(); TopIn.SetRes( TopIn.Nres()-1 ).SetTerminal( true ); if (infile.RecType() == PDBfile::END) break; - } else if ( !missingResidues && infile.RecType() == PDBfile::MISSING_RES ) { - missingResidues = true; + } else if ( !hasMissingResidues && infile.RecType() == PDBfile::MISSING_RES ) { + hasMissingResidues = true; mprintf("Warning: PDB file has MISSING RESIDUES section.\n"); + if (infile.Get_Missing_Res(missingResidues)) + mprintf("Warning: Could not read MISSING RESIDUES section.\n"); /*if (readConect) mprintf("Warning: If molecule determination fails try specifying 'noconect' instead.\n"); if (readLink) mprintf("Warning: If molecule determination fails try not specifying 'link' instead.\n");*/ } } // END loop over PDB records + + if (hasMissingResidues) { + mprintf("DEBUG: MISSING RESIDUES: "); + for (std::vector::const_iterator res = missingResidues.begin(); + res != missingResidues.end(); ++res) + mprintf(" {%s %i %c %c}", *(res->Name()), res->OriginalResNum(), + res->Icode(), res->ChainId()); + mprintf("\n"); + } + if (nAltLocSkipped > 0) mprintf("\tSkipped %i alternate atom locations.\n", nAltLocSkipped); // Sanity check From 9e1c6ba7da3ce35c906fccb734a9d5b5137674c9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 12:11:21 -0500 Subject: [PATCH 313/368] Remove reliance on ArgList --- src/PDBfile.cpp | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/PDBfile.cpp b/src/PDBfile.cpp index ed7a33ec03..e69239e2be 100644 --- a/src/PDBfile.cpp +++ b/src/PDBfile.cpp @@ -2,7 +2,6 @@ #include // atoi, atof #include // strncmp #include // std::copy -#include "ArgList.h" #include "PDBfile.h" #include "CpptrajStdio.h" #include "StringRoutines.h" // integerToString @@ -295,30 +294,33 @@ PDBfile::PDB_RECTYPE PDBfile::NextRecord() { return recType_; } -/** Get a list of missing residues from the PDB file. */ +/** Get a list of missing residues from the PDB file. */ // TODO record MODEL int PDBfile::Get_Missing_Res(std::vector& missingResidues) { bool inMissing = false; while (recType_ == MISSING_RES) { mprintf("DEBUG: rectype=%i %s", (int)recType_, linebuffer_); - ArgList line(linebuffer_, " \r\n"); - if (line.Nargs() > 5) { - // Actual missing residues starts after 'REMARK 465 M RES C SSSEQI' - if (line[2] == "M" && line[3] == "RES" && line[4] == "C") + if (!inMissing) { + // Actual missing residues starts after: + // 11111111112222222 + // 012345678901234567890123456 + // REMARK 465 M RES C SSSEQI + if (linebuffer_[13] == 'M' && linebuffer_[15] == 'R' && linebuffer_[19] == 'C') inMissing = true; - } else if (inMissing && line.Nargs() > 2) { - std::string const& currentname = line[2]; + } else { + // parse out res name + std::string currentname;// = line[2]; + currentname.assign(linebuffer_+15, 3); + // get chain char currentchain = linebuffer_[19]; - // Need to be able to parse out insertion code + // get insertion code char currenticode = linebuffer_[26]; - int currentres; - if (currenticode == ' ') { - currentres = atoi(line[4].c_str()); - } else { - char numbuf[6]; - std::copy(linebuffer_+21, linebuffer_+26, numbuf); - numbuf[5] = '\0'; - currentres = atoi(numbuf); - } + // parse out res number + std::string numbuf; + numbuf.assign(linebuffer_+21, 5); + //char numbuf[6]; + //std::copy(linebuffer_+21, linebuffer_+26, numbuf); + //numbuf[5] = '\0'; + int currentres = atoi(numbuf.c_str()); mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", currentname.c_str(), currentres, currenticode, currentchain); //if (std::find(ignoreseq.begin(), ignoreseq.end(), currentname) == ignoreseq.end()) @@ -330,6 +332,14 @@ int PDBfile::Get_Missing_Res(std::vector& missingResidues) { return 0; } +/** Get a list of residues missing heteroatoms */ +/* +int PDBfile::Get_Missing_Het(std::vector& missingHet) { + bool inMissing = false; + while (recType_ == MISSING_HET) { + if (line.Nargs() > 5) { + // Actual missing residues starts after */ + /** \return Atom alt. loc. code from PDB ATOM/HETATM line. */ char PDBfile::pdb_AltLoc() const { return linebuffer_[16]; From 0bd8763e0a7ddb868a50f9be96c50b9183916aee Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 13:22:54 -0500 Subject: [PATCH 314/368] Get list of residues missing heteroatoms --- src/PDBfile.cpp | 68 ++++++++++++++++++++++++++++++++---------------- src/PDBfile.h | 4 +++ src/Parm_PDB.cpp | 17 +++++++++++- 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/src/PDBfile.cpp b/src/PDBfile.cpp index e69239e2be..528520e19a 100644 --- a/src/PDBfile.cpp +++ b/src/PDBfile.cpp @@ -294,11 +294,37 @@ PDBfile::PDB_RECTYPE PDBfile::NextRecord() { return recType_; } +/** Get a residue from line with format: + * 1111111111222222 + * 01234567890123456789012345 + * REMARK XXX M RES C SSEQI + */ +Residue PDBfile::missing_res() const { + // parse out res name + std::string currentname; + currentname.assign(linebuffer_+15, 3); + // get chain + char currentchain = linebuffer_[19]; + // get insertion code + char currenticode = linebuffer_[26]; + // parse out res number + std::string numbuf; + numbuf.assign(linebuffer_+21, 5); + //char numbuf[6]; + //std::copy(linebuffer_+21, linebuffer_+26, numbuf); + //numbuf[5] = '\0'; + int currentres = atoi(numbuf.c_str()); + mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", + currentname.c_str(), currentres, currenticode, currentchain); + return Residue(currentname, currentres, currenticode, currentchain); +} + + /** Get a list of missing residues from the PDB file. */ // TODO record MODEL int PDBfile::Get_Missing_Res(std::vector& missingResidues) { bool inMissing = false; while (recType_ == MISSING_RES) { - mprintf("DEBUG: rectype=%i %s", (int)recType_, linebuffer_); + //mprintf("DEBUG: rectype=%i %s", (int)recType_, linebuffer_); if (!inMissing) { // Actual missing residues starts after: // 11111111112222222 @@ -307,38 +333,34 @@ int PDBfile::Get_Missing_Res(std::vector& missingResidues) { if (linebuffer_[13] == 'M' && linebuffer_[15] == 'R' && linebuffer_[19] == 'C') inMissing = true; } else { - // parse out res name - std::string currentname;// = line[2]; - currentname.assign(linebuffer_+15, 3); - // get chain - char currentchain = linebuffer_[19]; - // get insertion code - char currenticode = linebuffer_[26]; - // parse out res number - std::string numbuf; - numbuf.assign(linebuffer_+21, 5); - //char numbuf[6]; - //std::copy(linebuffer_+21, linebuffer_+26, numbuf); - //numbuf[5] = '\0'; - int currentres = atoi(numbuf.c_str()); - mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", - currentname.c_str(), currentres, currenticode, currentchain); - //if (std::find(ignoreseq.begin(), ignoreseq.end(), currentname) == ignoreseq.end()) - missingResidues.push_back( Residue(currentname, currentres, currenticode, currentchain) ); + missingResidues.push_back( missing_res() ); } NextRecord(); - mprintf("DEBUG: rectype=%i\n", (int)recType_); + //mprintf("DEBUG: rectype=%i\n", (int)recType_); } return 0; } /** Get a list of residues missing heteroatoms */ -/* int PDBfile::Get_Missing_Het(std::vector& missingHet) { bool inMissing = false; while (recType_ == MISSING_HET) { - if (line.Nargs() > 5) { - // Actual missing residues starts after */ + //mprintf("DEBUG: rectype=%i %s", (int)recType_, linebuffer_); + if (!inMissing) { + // Actual missing residues starts after: + // 11111111112222222 + // 012345678901234567890123456 + // REMARK 610 M RES C SSEQI + if (linebuffer_[13] == 'M' && linebuffer_[15] == 'R' && linebuffer_[19] == 'C') + inMissing = true; + } else { + missingHet.push_back( missing_res() ); + } + NextRecord(); + //mprintf("DEBUG: rectype=%i\n", (int)recType_); + } + return 0; +} /** \return Atom alt. loc. code from PDB ATOM/HETATM line. */ char PDBfile::pdb_AltLoc() const { diff --git a/src/PDBfile.h b/src/PDBfile.h index 9ec4de1e96..5d4a6f15ea 100644 --- a/src/PDBfile.h +++ b/src/PDBfile.h @@ -20,6 +20,8 @@ class PDBfile : public CpptrajFile { PDB_RECTYPE NextRecord(); /// Get a list of missing residues from the PDB file (REMARK 465) int Get_Missing_Res(std::vector&); + /// Get a list of residues missing heteroatoms from PDB file (REMARK 610) + int Get_Missing_Het(std::vector&); /// \return ATOM/HETATM alt. loc ID char pdb_AltLoc() const; /// \return Atom info with name and element for ATOM/HETATM; set altLoc and #. @@ -93,6 +95,8 @@ class PDBfile : public CpptrajFile { static bool IsPDBkeyword(std::string const&); /// Read box info from CRYST1 record void readCRYST1(double*); + /// Parse a MISSING residue line + Residue missing_res() const; int anum_; ///< Atom number for writing. PDB_RECTYPE recType_; ///< Current record type. diff --git a/src/Parm_PDB.cpp b/src/Parm_PDB.cpp index 2d60d3ffd4..98f9ef6ab2 100644 --- a/src/Parm_PDB.cpp +++ b/src/Parm_PDB.cpp @@ -88,6 +88,8 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { # endif bool hasMissingResidues = false; std::vector missingResidues; + bool hasMissingHet = false; + std::vector missingHet; int nAltLocSkipped = 0; // Loop over PDB records while ( infile.NextRecord() != PDBfile::END_OF_FILE ) { @@ -168,17 +170,30 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { mprintf("Warning: If molecule determination fails try specifying 'noconect' instead.\n"); if (readLink) mprintf("Warning: If molecule determination fails try not specifying 'link' instead.\n");*/ + } else if ( !hasMissingHet && infile.RecType() == PDBfile::MISSING_HET ) { + hasMissingHet = true; + mprintf("Warning: PDB file has MISSING HETEROATOM section.\n"); + if (infile.Get_Missing_Het(missingHet)) + mprintf("Warning: Could not read MISSING HETEROATOM section.\n"); } } // END loop over PDB records if (hasMissingResidues) { - mprintf("DEBUG: MISSING RESIDUES: "); + mprintf("DEBUG: Missing Residues: "); for (std::vector::const_iterator res = missingResidues.begin(); res != missingResidues.end(); ++res) mprintf(" {%s %i %c %c}", *(res->Name()), res->OriginalResNum(), res->Icode(), res->ChainId()); mprintf("\n"); } + if (hasMissingHet) { + mprintf("DEBUG: Residues missing heteroatoms: "); + for (std::vector::const_iterator res = missingHet.begin(); + res != missingHet.end(); ++res) + mprintf(" {%s %i %c %c}", *(res->Name()), res->OriginalResNum(), + res->Icode(), res->ChainId()); + mprintf("\n"); + } if (nAltLocSkipped > 0) mprintf("\tSkipped %i alternate atom locations.\n", nAltLocSkipped); From 02ad4d71c38b79308e98334dbad0d8f0e3c41129 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 14:46:26 -0500 Subject: [PATCH 315/368] Save missing res info --- src/Topology.cpp | 32 ++++++++++++++++++++++++-------- src/Topology.h | 6 ++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/Topology.cpp b/src/Topology.cpp index 439f13a0fd..9fced87887 100644 --- a/src/Topology.cpp +++ b/src/Topology.cpp @@ -54,6 +54,16 @@ void Topology::ResetPDBinfo() { res->SetIcode(' '); res->SetChainID(' '); } + missingRes_.clear(); + missingHet_.clear(); +} + +/** Set list of missing residues and residues missing heteroatoms */ +void Topology::SetMissingResInfo(std::vector const& missingResIn, + std::vector const& missingHetIn) +{ + missingRes_ = missingResIn; + missingHet_ = missingHetIn; } /** Used to set box info from currently associated trajectory. */ @@ -1471,6 +1481,17 @@ Topology* Topology::ModifyByMap(std::vector const& MapIn, bool setupFullPar newParm->pindex_ = pindex_; // Copy box information newParm->parmBox_ = parmBox_; + // PDB info + TopVecStrip stripInt; + stripInt.Strip(newParm->pdbSerialNum_, pdbSerialNum_, MapIn); + TopVecStrip stripChar; + stripChar.Strip(newParm->atom_altloc_, atom_altloc_, MapIn); + TopVecStrip stripFloat; + stripFloat.Strip(newParm->occupancy_, occupancy_, MapIn); + stripFloat.Strip(newParm->bfactor_, bfactor_, MapIn); + newParm->missingRes_ = missingRes_; + newParm->missingHet_ = missingHet_; + // If we dont care about setting up full parm information, exit now. if (!setupFullParm) return newParm; @@ -1642,16 +1663,9 @@ Topology* Topology::ModifyByMap(std::vector const& MapIn, bool setupFullPar // Amber extra info. TopVecStrip stripNameType; stripNameType.Strip(newParm->tree_, tree_, MapIn); - TopVecStrip stripInt; stripInt.Strip(newParm->ijoin_, ijoin_, MapIn); stripInt.Strip(newParm->irotat_, irotat_, MapIn); - stripInt.Strip(newParm->pdbSerialNum_, pdbSerialNum_, MapIn); - TopVecStrip stripChar; - stripChar.Strip(newParm->atom_altloc_, atom_altloc_, MapIn); - TopVecStrip stripFloat; - stripFloat.Strip(newParm->occupancy_, occupancy_, MapIn); - stripFloat.Strip(newParm->bfactor_, bfactor_, MapIn); - + // Determine number of extra points newParm->DetermineNumExtraPoints(); @@ -2242,6 +2256,8 @@ int Topology::AppendTop(Topology const& NewTop) { AddDihArray(NewTop.Dihedrals(), NewTop.DihedralParm(), atomOffset); AddDihArray(NewTop.DihedralsH(), NewTop.DihedralParm(), atomOffset); + // TODO append missing stuff? + // Re-set up this topology // TODO: Could get expensive for multiple appends. return CommonSetup(); diff --git a/src/Topology.h b/src/Topology.h index 0d2d5fedb9..09d205f71f 100644 --- a/src/Topology.h +++ b/src/Topology.h @@ -76,6 +76,10 @@ class Topology { void AddOccupancy(float o) { occupancy_.push_back( o ); } void AddBfactor(float b) { bfactor_.push_back( b ); } void AddPdbSerialNum(int i) { pdbSerialNum_.push_back( i ); } + /// Set list of missing residues and residues missing heteroatoms + void SetMissingResInfo(std::vector const&, std::vector const&); + /// \return list of residues missing heteroatoms + std::vector const& MissingHet() const { return missingHet_; } // ----- Residue-specific routines ----------- typedef std::vector::const_iterator res_iterator; inline res_iterator ResStart() const { return residues_.begin(); } @@ -307,6 +311,8 @@ class Topology { std::vector occupancy_; ///< Atom occupancy std::vector bfactor_; ///< Atom B-factor std::vector pdbSerialNum_; ///< Atom PDB original serial number + std::vector missingRes_; ///< List of residues missing from PDB + std::vector missingHet_; ///< List of residues missing heteroatoms in PDB Box parmBox_; Frame refCoords_; ///< Internal reference coords for distance-based masks From f19ffd39b47b029fec801fe8931f2bd89e165c6a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 14:46:42 -0500 Subject: [PATCH 316/368] Add missing res info to topology --- src/Parm_PDB.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Parm_PDB.cpp b/src/Parm_PDB.cpp index 98f9ef6ab2..91b0c1bb60 100644 --- a/src/Parm_PDB.cpp +++ b/src/Parm_PDB.cpp @@ -194,6 +194,7 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { res->Icode(), res->ChainId()); mprintf("\n"); } + TopIn.SetMissingResInfo(missingResidues, missingHet); if (nAltLocSkipped > 0) mprintf("\tSkipped %i alternate atom locations.\n", nAltLocSkipped); From c73ce7e393b4011c998bfe050e0bab2fbfb3635c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 14:49:32 -0500 Subject: [PATCH 317/368] Print if sugar res is missing atoms --- src/Exec_PrepareForLeap.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 89a88c4a97..f36a652daf 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -813,11 +813,31 @@ const } // ----------------------------------------------- +/** \return true if residue is on the list of residues with missing heteroatoms. */ +static bool res_missing_het(int rnum, Topology const& topIn) { + Residue const& res = topIn.Res(rnum); + mprintf("DEBUG: TGT %s %i '%c' '%c'\n", *(res.Name()), res.OriginalResNum(), res.Icode(), res.ChainId()); + for (std::vector::const_iterator het = topIn.MissingHet().begin(); + het != topIn.MissingHet().end(); ++het) + { + mprintf("DEBUG: HET %s %i '%c' '%c'\n", *(het->Name()), het->OriginalResNum(), het->Icode(), het->ChainId()); + if ( het->OriginalResNum() == res.OriginalResNum() && + het->Icode() == res.Icode() && + het->ChainId() == res.ChainId() && + het->Name() == res.Name() ) + return true; + } + return false; +} + /** Identify sugar oxygen, anomeric and ref carbons, and ring atoms. */ Exec_PrepareForLeap::Sugar Exec_PrepareForLeap::IdSugarRing(int rnum, Topology const& topIn) const { Residue const& res = topIn.Res(rnum); + bool residue_missing_atoms = res_missing_het(rnum, topIn); + if (residue_missing_atoms) + mprintf("\tResidue is missing atoms.\n"); // Determine candidates for ring oxygen atoms. Iarray potentialRingStartAtoms; From 9168401dc8b964d3ac629ed8ec78b73c4bcf883d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 15:21:40 -0500 Subject: [PATCH 318/368] Store missing status in sugar --- src/Exec_PrepareForLeap.cpp | 11 ++++++++--- src/Exec_PrepareForLeap.h | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f36a652daf..c0ae074736 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -29,7 +29,8 @@ Exec_PrepareForLeap::Sugar::Sugar(StatType status, int firstat) : anomeric_atom_(firstat), ano_ref_atom_(-1), highest_stereocenter_(-1), - ringType_(UNKNOWN_RING) + ringType_(UNKNOWN_RING), + isMissingAtoms_(false) {} /** CONSTRUCTOR - Partial setup; ring O, anomeric atom, ring and chain atoms. */ @@ -41,6 +42,7 @@ Exec_PrepareForLeap::Sugar::Sugar(StatType status, int roa, int aa, ano_ref_atom_(-1), highest_stereocenter_(-1), ringType_(UNKNOWN_RING), + isMissingAtoms_(true), ring_atoms_(RA), chain_atoms_(CA) { @@ -54,13 +56,14 @@ Exec_PrepareForLeap::Sugar::Sugar(StatType status, int roa, int aa, /** CONSTRUCTOR - Set ring atom indices and ring type. */ Exec_PrepareForLeap::Sugar::Sugar(int roa, int aa, int ara, int hs, - Iarray const& RA, Iarray const& CA) : + Iarray const& RA, Iarray const& CA, bool isMissing) : stat_(SETUP_OK), ring_oxygen_atom_(roa), anomeric_atom_(aa), ano_ref_atom_(ara), highest_stereocenter_(hs), ringType_(UNKNOWN_RING), + isMissingAtoms_(isMissing), ring_atoms_(RA), chain_atoms_(CA) { @@ -92,6 +95,8 @@ void Exec_PrepareForLeap::Sugar::PrintInfo(Topology const& topIn) const { StatTypeStr_[stat_]); } //mprintf("\t%s :\n", topIn.TruncResNameOnumId(ResNum(topIn)).c_str()); + if (isMissingAtoms_) + mprintf("\t\tIs missing atoms.\n"); if (ring_oxygen_atom_ != -1) mprintf("\t\tRing O : %s\n", topIn.TruncAtomNameNum(ring_oxygen_atom_).c_str()); if (anomeric_atom_ != -1) @@ -1098,7 +1103,7 @@ const if (debug_ > 0) mprintf("\t Ring oxygen : %s\n", topIn.ResNameNumAtomNameNum(ring_oxygen_atom).c_str()); return Sugar(ring_oxygen_atom, anomeric_atom, ano_ref_atom, highest_stereocenter, - RA, carbon_chain); + RA, carbon_chain, residue_missing_atoms); } /** Change PDB atom names in residue to glycam ones. */ diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index f8982e48f8..ac783f3ac5 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -188,8 +188,8 @@ class Exec_PrepareForLeap::Sugar { Sugar(StatType, int); /// CONSTRUCTOR - Status, ring O, anomeric, ring atoms, chain atoms, incomplete setup Sugar(StatType, int, int, Iarray const&,Iarray const&); - /// CONSTRUCTOR - ring O, Anomeric, Anomeric Ref, Highest Sterocenter, ring atoms, chain atoms - Sugar(int,int,int,int,Iarray const&,Iarray const&); + /// CONSTRUCTOR - ring O, Anomeric, Anomeric Ref, Highest Sterocenter, ring atoms, chain atoms, isMissingAtoms + Sugar(int,int,int,int,Iarray const&,Iarray const&, bool); inline int ResNum(Topology const&) const; StatType Status() const { return stat_; } @@ -198,6 +198,7 @@ class Exec_PrepareForLeap::Sugar { int AnomericRefAtom() const { return ano_ref_atom_; } int HighestStereocenter() const { return highest_stereocenter_; } RingTypeEnum RingType() const { return ringType_; } + bool IsMissingAtoms() const { return isMissingAtoms_; } Iarray const& RingAtoms() const { return ring_atoms_; } int RingEndAtom() const { return ring_atoms_.back(); } Iarray const& ChainAtoms() const { return chain_atoms_; } @@ -223,6 +224,7 @@ class Exec_PrepareForLeap::Sugar { int ano_ref_atom_; ///< Index of the anomeric reference C atom int highest_stereocenter_; ///< Index of the highest stereocenter in the carbon chain RingTypeEnum ringType_; ///< Will be set to ring type + bool isMissingAtoms_; ///< True if original PDB indicates sugar has missing atoms. Iarray ring_atoms_; ///< Index of all non-oxygen ring atoms Iarray chain_atoms_; ///< Index of all chain carbon atoms (from anomeric carbon). }; From d2340f944c3ee0a0b92883683e221cd38a7ec90c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 6 Dec 2021 15:33:44 -0500 Subject: [PATCH 319/368] When a form/chirality/ring type mismatch occurs, if the sugar was missing atoms defer to what is indicated by the residue name. --- src/Exec_PrepareForLeap.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index c0ae074736..3babb1020e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -821,11 +821,11 @@ const /** \return true if residue is on the list of residues with missing heteroatoms. */ static bool res_missing_het(int rnum, Topology const& topIn) { Residue const& res = topIn.Res(rnum); - mprintf("DEBUG: TGT %s %i '%c' '%c'\n", *(res.Name()), res.OriginalResNum(), res.Icode(), res.ChainId()); + //mprintf("DEBUG: TGT %s %i '%c' '%c'\n", *(res.Name()), res.OriginalResNum(), res.Icode(), res.ChainId()); for (std::vector::const_iterator het = topIn.MissingHet().begin(); het != topIn.MissingHet().end(); ++het) { - mprintf("DEBUG: HET %s %i '%c' '%c'\n", *(het->Name()), het->OriginalResNum(), het->Icode(), het->ChainId()); + //mprintf("DEBUG: HET %s %i '%c' '%c'\n", *(het->Name()), het->OriginalResNum(), het->Icode(), het->ChainId()); if ( het->OriginalResNum() == res.OriginalResNum() && het->Icode() == res.Icode() && het->ChainId() == res.ChainId() && @@ -842,7 +842,7 @@ const Residue const& res = topIn.Res(rnum); bool residue_missing_atoms = res_missing_het(rnum, topIn); if (residue_missing_atoms) - mprintf("\tResidue is missing atoms.\n"); + mprintf("\tResidue '%s' is missing atoms.\n", topIn.TruncResNameOnumId(rnum).c_str()); // Determine candidates for ring oxygen atoms. Iarray potentialRingStartAtoms; @@ -1623,7 +1623,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, sugarInfo.SetRingType( pdb_glycam->second.RingType() ); } } - // Warn about form/chirality mismatches. + // Warn about form/chirality mismatches. If a mismatch occurs and the sugar + // did not have all atoms present, defer to the name. if (pdb_glycam->second.Form() != UNKNOWN_FORM && pdb_glycam->second.Form() != sugarInfo.Form()) { @@ -1632,6 +1633,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, formstr_[pdb_glycam->second.Form()]); if (sugarInfo.Form() != UNKNOWN_FORM) resStat_[rnum] = SUGAR_NAME_MISMATCH; + if (sugar.IsMissingAtoms()) { + mprintf("Warning: Residue was missing atoms; setting form based on residue name.\n"); + sugarInfo.SetForm( pdb_glycam->second.Form() ); + } } if (pdb_glycam->second.Chirality() != UNKNOWN_CHIR && pdb_glycam->second.Chirality() != sugarInfo.Chirality()) @@ -1641,6 +1646,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, chirstr_[pdb_glycam->second.Chirality()]); if (sugarInfo.Chirality() != UNKNOWN_CHIR) resStat_[rnum] = SUGAR_NAME_MISMATCH; + if (sugar.IsMissingAtoms()) { + mprintf("Warning: Residue was missing atoms; setting chirality based on residue name.\n"); + sugarInfo.SetChirality( pdb_glycam->second.Chirality() ); + } } if (pdb_glycam->second.RingType() != UNKNOWN_RING && pdb_glycam->second.RingType() != sugarInfo.RingType()) @@ -1650,6 +1659,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, ringstr_[pdb_glycam->second.RingType()]); if (sugarInfo.RingType() != UNKNOWN_RING) resStat_[rnum] = SUGAR_NAME_MISMATCH; + if (sugar.IsMissingAtoms()) { + mprintf("Warning: Residue was missing atoms; setting ring type based on residue name.\n"); + sugarInfo.SetRingType( pdb_glycam->second.RingType() ); + } } // Get glycam form string From 87f5a018295b2b44a575792f41bfb7cdcb0496da Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 7 Dec 2021 06:58:58 -0500 Subject: [PATCH 320/368] Try to use missing res in top --- src/Exec_AddMissingRes.cpp | 30 ++++++++++++++++++------------ src/Topology.h | 2 ++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/Exec_AddMissingRes.cpp b/src/Exec_AddMissingRes.cpp index 7a3e032c80..4b2a1f2c35 100644 --- a/src/Exec_AddMissingRes.cpp +++ b/src/Exec_AddMissingRes.cpp @@ -70,6 +70,22 @@ const mprintf("\n"); } Rlist missingResidues; + + // Read existing/missing residues from the PDB + ParmFile pdbIn; + Topology topIn; + if (pdbIn.ReadTopology(topIn, pdbname, ArgList(), debug_)) { + mprinterr("Error: Read of topology from PDB failed.\n"); + return CpptrajState::ERR; + } + topIn.Summary(); + + // Place completely missing residues into a list. + for (std::vector::const_iterator res = topIn.MissingRes().begin(); + res != topIn.MissingRes().end(); ++res) + if (std::find(ignoreseq.begin(), ignoreseq.end(), res->Name().Truncated()) == ignoreseq.end()) + missingResidues.push_back( *res ); +/* BufferedLine infile; if (infile.OpenFileRead( pdbname )) { mprinterr("Error: Could not open '%s' for reading.\n", pdbname.c_str()); @@ -77,7 +93,6 @@ const } // Loop over lines from PDB int inMissing = 0; - unsigned int nmissing = 0; const char* linePtr = infile.Line(); while (linePtr != 0) { if (strncmp(linePtr, "REMARK", 6) == 0) @@ -130,21 +145,12 @@ const linePtr = infile.Line(); } // END while linePtr != 0 infile.CloseFile(); - +*/ // DEBUG for (Rlist::const_iterator it = missingResidues.begin(); it != missingResidues.end(); ++it) mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", *(it->Name()), it->OriginalResNum(), it->Icode(), it->ChainId()); - // Read existing residues from the PDB - ParmFile pdbIn; - Topology topIn; - if (pdbIn.ReadTopology(topIn, pdbname, ArgList(), debug_)) { - mprinterr("Error: Read of topology from PDB failed.\n"); - return CpptrajState::ERR; - } - topIn.Summary(); - // Put existing residues into a list ResList.clear(); for (Topology::res_iterator res = topIn.ResStart(); res != topIn.ResEnd(); ++res) @@ -253,7 +259,7 @@ const missingResidues.erase(gapStart, gapEnd); gapStart = gapEnd; } - outfile.Printf("%u missing residues.\n", nmissing); + outfile.Printf("%zu missing residues.\n", topIn.MissingRes().size()); mprintf("Final residues:\n"); for (Rlist::const_iterator it = ResList.begin(); it != ResList.end(); ++it) diff --git a/src/Topology.h b/src/Topology.h index 09d205f71f..56fcb60797 100644 --- a/src/Topology.h +++ b/src/Topology.h @@ -78,6 +78,8 @@ class Topology { void AddPdbSerialNum(int i) { pdbSerialNum_.push_back( i ); } /// Set list of missing residues and residues missing heteroatoms void SetMissingResInfo(std::vector const&, std::vector const&); + /// \return list of completely missing residues + std::vector const& MissingRes() const { return missingRes_; } /// \return list of residues missing heteroatoms std::vector const& MissingHet() const { return missingHet_; } // ----- Residue-specific routines ----------- From 5b8654d29bdf2bf2b7e0e6e53f72e3cc3da9100a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 8 Dec 2021 08:52:28 -0500 Subject: [PATCH 321/368] Use missing res info in Topology to find gaps --- src/Exec_AddMissingRes.cpp | 116 +++++++++++++------------------------ src/Exec_AddMissingRes.h | 2 +- 2 files changed, 41 insertions(+), 77 deletions(-) diff --git a/src/Exec_AddMissingRes.cpp b/src/Exec_AddMissingRes.cpp index 4b2a1f2c35..bd329ccd53 100644 --- a/src/Exec_AddMissingRes.cpp +++ b/src/Exec_AddMissingRes.cpp @@ -85,71 +85,12 @@ const res != topIn.MissingRes().end(); ++res) if (std::find(ignoreseq.begin(), ignoreseq.end(), res->Name().Truncated()) == ignoreseq.end()) missingResidues.push_back( *res ); -/* - BufferedLine infile; - if (infile.OpenFileRead( pdbname )) { - mprinterr("Error: Could not open '%s' for reading.\n", pdbname.c_str()); - return 1; - } - // Loop over lines from PDB - int inMissing = 0; - const char* linePtr = infile.Line(); - while (linePtr != 0) { - if (strncmp(linePtr, "REMARK", 6) == 0) - { - ArgList line(linePtr); - if (line.Nargs() > 2) { - if (inMissing == 0) { - // MISSING section not yet encountered. - if (line[0] == "REMARK" && line[1] == "465" && line[2] == "MISSING" && line[3] == "RESIDUES") { - inMissing = 1; - } - } else if (inMissing == 1) { - // In MISSING, looking for start of missing residues - if (line[0] == "REMARK" && line[2] == "M") { - inMissing = 2; - nmissing = 0; - } - } else if (inMissing == 2) { - // Reading MISSING residues - if (line[1] != "465") { - //mprinterr("END REACHED.\n"); // DEBUG - break; - } else { - // This is a missing residue - nmissing++; - // 11111111112222222 - // 012345678901234567890123456 - // REMARK 465 M RES C SSSEQI - std::string const& currentname = line[2]; - char currentchain = linePtr[19]; - // Need to be able to parse out insertion code - char currenticode = linePtr[26]; - int currentres; - if (currenticode == ' ') { - currentres = atoi(line[4].c_str()); - } else { - char numbuf[6]; - std::copy(linePtr+21, linePtr+26, numbuf); - numbuf[5] = '\0'; - currentres = atoi(numbuf); - } - //mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", - // currentname.c_str(), currentres, currenticode, currentchain); - if (std::find(ignoreseq.begin(), ignoreseq.end(), currentname) == ignoreseq.end()) - missingResidues.push_back( Residue(currentname, currentres, currenticode, currentchain) ); - } // END missing residue - } // END inMissing == 2 - } // END nargs > 2 - } // END REMARK - linePtr = infile.Line(); - } // END while linePtr != 0 - infile.CloseFile(); -*/ + // DEBUG - for (Rlist::const_iterator it = missingResidues.begin(); it != missingResidues.end(); ++it) - mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", - *(it->Name()), it->OriginalResNum(), it->Icode(), it->ChainId()); + if (debug_ > 0) + for (Rlist::const_iterator it = missingResidues.begin(); it != missingResidues.end(); ++it) + mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", + *(it->Name()), it->OriginalResNum(), it->Icode(), it->ChainId()); // Put existing residues into a list ResList.clear(); @@ -273,10 +214,33 @@ const /** Get missing residues from PDB, organize them into "gaps", i.e. * contiguous sequences. */ -int Exec_AddMissingRes::FindGaps(Garray& Gaps, CpptrajFile& outfile, std::string const& pdbname) +int Exec_AddMissingRes::FindGaps(Garray& Gaps, CpptrajFile& outfile, Topology const& topIn) const { - BufferedLine infile; + for (std::vector::const_iterator res = topIn.MissingRes().begin(); + res != topIn.MissingRes().end(); ++res) + { + int currentres = res->OriginalResNum(); + char currentchain = res->ChainId(); + Pres thisRes(res->Name().Truncated(), currentres, res->Icode(), currentchain); + // Is this the first "gap"? + if (Gaps.empty()) + Gaps.push_back( ResArray(1, thisRes) ); + else { + ResArray& currentGap = Gaps.back(); + if ( currentres - currentGap.back().Onum() > 1 || + currentchain != currentGap.back().Chain() ) + { + // Starting a new "gap" + Gaps.push_back( ResArray(1, thisRes) ); + } else { + // Add to existing "gap" + currentGap.push_back( thisRes ); + } + } + } + +/* BufferedLine infile; if (infile.OpenFileRead( pdbname )) { mprinterr("Error: Could not open '%s' for reading.\n", pdbname.c_str()); return 1; @@ -348,7 +312,7 @@ const } // END REMARK linePtr = infile.Line(); } // END while linePtr != 0 - +*/ // Printout for (Garray::const_iterator it = Gaps.begin(); it != Gaps.end(); ++it) { outfile.Printf(" Gap %c %4s %6i to %4s %6i %6zu\n", @@ -369,7 +333,7 @@ const if (col > 1) outfile.Printf("\n"); } - outfile.Printf("%i missing residues.\n", nmissing); + outfile.Printf("%zu missing residues.\n", topIn.MissingRes().size()); if (Gaps.empty()) { mprintf("Warning: No gaps found.\n"); } @@ -1406,14 +1370,6 @@ Exec::RetType Exec_AddMissingRes::Execute(CpptrajState& State, ArgList& argIn) } mprintf("\tOutput set: %s\n", dataOut->legend()); - // Find missing residues/gaps in the PDB - Garray Gaps; - if (FindGaps(Gaps, *outfile, pdbname)) { - mprinterr("Error: Finding missing residues failed.\n"); - return CpptrajState::ERR; - } - mprintf("\tThere are %zu gaps in the PDB.\n", Gaps.size()); - // Read in topology ParmFile parmIn; Topology topIn; @@ -1423,6 +1379,14 @@ Exec::RetType Exec_AddMissingRes::Execute(CpptrajState& State, ArgList& argIn) } topIn.Summary(); + // Find missing residues/gaps in the PDB + Garray Gaps; + if (FindGaps(Gaps, *outfile, topIn)) { + mprinterr("Error: Finding missing residues failed.\n"); + return CpptrajState::ERR; + } + mprintf("\tThere are %zu gaps in the PDB.\n", Gaps.size()); + // Set up input trajectory Trajin_Single trajIn; if (trajIn.SetupTrajRead(pdbname, trajArgs, &topIn)) { diff --git a/src/Exec_AddMissingRes.h b/src/Exec_AddMissingRes.h index da1b6223b9..e614d44ebe 100644 --- a/src/Exec_AddMissingRes.h +++ b/src/Exec_AddMissingRes.h @@ -27,7 +27,7 @@ class Exec_AddMissingRes : public Exec { Rlist::iterator FindClosestRes(Rlist&, Residue const&, int&) const; int GetSequenceFromPDB(Rlist& ResList, std::string const&, Narray const&, CpptrajFile&) const; - int FindGaps(Garray&, CpptrajFile&, std::string const&) const; + int FindGaps(Garray&, CpptrajFile&, Topology const&) const; int Minimize(Topology const&, Frame&, CharMask const&) const; int WriteStructure(std::string const&, Topology*, Frame const&, TrajectoryFile::TrajFormatType) const; static void GenerateLinearGapCoords(int, int, Frame&); From 4ab567dc8735f60b00dc33379e0b9a9dfd9e48cc Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 8 Dec 2021 08:55:19 -0500 Subject: [PATCH 322/368] Remove old code --- src/Exec_AddMissingRes.cpp | 75 +------------------------------------- 1 file changed, 1 insertion(+), 74 deletions(-) diff --git a/src/Exec_AddMissingRes.cpp b/src/Exec_AddMissingRes.cpp index bd329ccd53..cbe2d720e0 100644 --- a/src/Exec_AddMissingRes.cpp +++ b/src/Exec_AddMissingRes.cpp @@ -211,7 +211,7 @@ const return 0; } -/** Get missing residues from PDB, organize them into "gaps", i.e. +/** Organize missing residues in given topology into "gaps", i.e. * contiguous sequences. */ int Exec_AddMissingRes::FindGaps(Garray& Gaps, CpptrajFile& outfile, Topology const& topIn) @@ -240,79 +240,6 @@ const } } -/* BufferedLine infile; - if (infile.OpenFileRead( pdbname )) { - mprinterr("Error: Could not open '%s' for reading.\n", pdbname.c_str()); - return 1; - } - const char* linePtr = infile.Line(); - int inMissing = 0; - int nmissing = 0; - while (linePtr != 0) { - if (strncmp(linePtr, "REMARK", 6) == 0) - { - ArgList line(linePtr); - if (line.Nargs() > 2) { - if (inMissing == 0) { - // MISSING section not yet encountered. - if (line[0] == "REMARK" && line[1] == "465" && line[2] == "MISSING" && line[3] == "RESIDUES") { - inMissing = 1; - } - } else if (inMissing == 1) { - // In MISSING, looking for start of missing residues - if (line[0] == "REMARK" && line[2] == "M") { - inMissing = 2; - nmissing = 0; - } - } else if (inMissing == 2) { - // Reading MISSING residues - if (line[1] != "465") { - //mprinterr("END REACHED.\n"); // DEBUG - break; - } else { - // This is a missing residue - nmissing++; - // 11111111112222222 - // 012345678901234567890123456 - // REMARK 465 M RES C SSSEQI - std::string const& currentname = line[2]; - char currentchain = linePtr[19]; - // Need to be able to parse out insertion code - char currenticode = linePtr[26]; - int currentres; - if (currenticode == ' ') { - currentres = atoi(line[4].c_str()); - } else { - char numbuf[6]; - std::copy(linePtr+21, linePtr+26, numbuf); - numbuf[5] = '\0'; - currentres = atoi(numbuf); - } - mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", - currentname.c_str(), currentres, currenticode, currentchain); - Pres thisRes(currentname, currentres, currenticode, currentchain); - // Is this the first "gap"? - if (Gaps.empty()) - Gaps.push_back( ResArray(1, thisRes) ); - else { - ResArray& currentGap = Gaps.back(); - if ( currentres - currentGap.back().Onum() > 1 || - currentchain != currentGap.back().Chain() ) - { - // Starting a new "gap" - Gaps.push_back( ResArray(1, thisRes) ); - } else { - // Add to existing "gap" - currentGap.push_back( thisRes ); - } - } - } // END missing residue - } // END inMissing == 2 - } // END nargs > 2 - } // END REMARK - linePtr = infile.Line(); - } // END while linePtr != 0 -*/ // Printout for (Garray::const_iterator it = Gaps.begin(); it != Gaps.end(); ++it) { outfile.Printf(" Gap %c %4s %6i to %4s %6i %6zu\n", From 67355eef86e04b25d36a5e418f31ef56cb4ecca9 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Dec 2021 09:58:59 -0500 Subject: [PATCH 323/368] Change histidine residue names at time of detection since residue numbering can change afterwards. Add changed histidine names as recognized names. --- src/Exec_PrepareForLeap.cpp | 51 ++++++++++++++++--------------------- src/Exec_PrepareForLeap.h | 3 ++- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 3babb1020e..0b811d791c 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2741,9 +2741,8 @@ int Exec_PrepareForLeap::RemoveHydrogens(Topology& topIn, Frame& frameIn) const return 0; } -/** Try to determine histidine protonation. - * \param HisResNames Array containing final histidine residue names. - * \param HisResIdxs Array containing residue indices of histidine residues (correspond to HisResNames). +/** Try to determine histidine protonation from existing hydrogens. + * Change residue names as appropriate. * \param topIn Input topology. * \param ND1 ND1 atom name. * \param NE2 NE2 atom name. @@ -2752,9 +2751,7 @@ int Exec_PrepareForLeap::RemoveHydrogens(Topology& topIn, Frame& frameIn) const * \param HidName Name for delta-protonated His. * \param HipName Name for doubly-protonated His. */ -int Exec_PrepareForLeap::DetermineHisProt( std::vector& HisResNames, - Iarray& HisResIdxs, - Topology const& topIn, +int Exec_PrepareForLeap::DetermineHisProt( Topology& topIn, NameType const& ND1, NameType const& NE2, NameType const& HisName, @@ -2773,11 +2770,8 @@ const if ( topIn.SetupIntegerMask( mask )) return 1; mask.MaskInfo(); Iarray resIdxs = topIn.ResnumsSelectedBy( mask ); - - HisResIdxs.clear(); - HisResIdxs.reserve( resIdxs.size() ); - HisResNames.clear(); - HisResNames.reserve( resIdxs.size() ); + // Loop over selected histidine residues + unsigned int nchanged = 0; for (Iarray::const_iterator rnum = resIdxs.begin(); rnum != resIdxs.end(); ++rnum) { @@ -2828,14 +2822,17 @@ const return 1; } if (nd1h > 0 && ne2h > 0) { - HisResNames.push_back( HipName ); - HisResIdxs.push_back( *rnum ); + mprintf("\t\t%s => %s\n", topIn.TruncResNameOnumId(*rnum).c_str(), *HipName); + ChangeResName( topIn.SetRes(*rnum), HipName ); + nchanged++; } else if (nd1h > 0) { - HisResNames.push_back( HidName ); - HisResIdxs.push_back( *rnum ); + mprintf("\t\t%s => %s\n", topIn.TruncResNameOnumId(*rnum).c_str(), *HidName); + ChangeResName( topIn.SetRes(*rnum), HidName ); + nchanged++; } else if (ne2h > 0) { - HisResNames.push_back( HieName ); - HisResIdxs.push_back( *rnum ); + mprintf("\t\t%s => %s\n", topIn.TruncResNameOnumId(*rnum).c_str(), *HieName); + ChangeResName( topIn.SetRes(*rnum), HieName ); + nchanged++; } //else { // // Default to epsilon @@ -2843,12 +2840,10 @@ const // HisResNames.push_back( HieName ); //} } - if (!HisResIdxs.empty()) { - mprintf("\tChanged histidine names:\n"); - for (unsigned int idx = 0; idx < HisResIdxs.size(); idx++) - mprintf("\t\t%i %s\n", HisResIdxs[idx]+1, *HisResNames[idx]); - } else + if (nchanged == 0) mprintf("\tNo histidine names were changed.\n"); + else + mprintf("\t%u histidine names were changed.\n", nchanged); return 0; } @@ -3252,8 +3247,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } // Do histidine detection before H atoms are removed - Iarray HisResIdxs; - std::vector HisResNames; if (!argIn.hasKey("nohisdetect")) { std::string nd1name = argIn.GetStringKey("nd1", "ND1"); std::string ne2name = argIn.GetStringKey("ne2", "NE2"); @@ -3268,7 +3261,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\t\tEpsilon-protonated residue name : %s\n", hiename.c_str()); mprintf("\t\tDelta-protonated residue name : %s\n", hidname.c_str()); mprintf("\t\tDoubly-protonated residue name : %s\n", hipname.c_str()); - if (DetermineHisProt( HisResNames, HisResIdxs, topIn, + // Add epsilon, delta, and double-protonated names as recognized. + pdb_res_names_.insert( hiename ); + pdb_res_names_.insert( hidname ); + pdb_res_names_.insert( hipname ); + if (DetermineHisProt( topIn, nd1name, ne2name, hisname, hiename, hidname, hipname)) { mprinterr("Error: HIS protonation detection failed.\n"); @@ -3490,10 +3487,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } } - // Change HIS res names FIXME this will have to go before sugar split stuff - for (unsigned int idx = 0; idx != HisResIdxs.size(); idx++) - ChangeResName( topIn.SetRes(HisResIdxs[idx]), HisResNames[idx] ); - // Try to set terminal residues if (!molMasks.empty() || determineMolMask.MaskStringSet()) { // Reset terminal status diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index ac783f3ac5..80a526df19 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -127,7 +127,8 @@ class Exec_PrepareForLeap : public Exec { int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, std::string const&, Iarray const&) const; int RemoveHydrogens(Topology&, Frame&) const; - int DetermineHisProt(std::vector&, Iarray&, Topology const&, + /** Try to determine protonation state of histidines from any hydrogens present. */ + int DetermineHisProt(Topology&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&, NameType const&) const; /// Run leap to generate topology, perform any modifications From 8fae070a54c5cfb68a2f7ab511022afbaba3f516 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 17 Dec 2021 09:01:12 -0500 Subject: [PATCH 324/368] Modify the error message; sugar may still be identified from name --- src/Exec_PrepareForLeap.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0b811d791c..4bd1973223 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3450,6 +3450,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // mprintf("\t\t%s VALIDATED\n", topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); //else // mprintf("\t\t%s UNKNOWN\n", topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + // ----- Warnings -------- if ( *it == UNKNOWN ) { SetType::const_iterator pname = pdb_res_names_.find( topIn.Res(it-resStat_.begin()).Name() ); if (pname == pdb_res_names_.end()) @@ -3460,6 +3461,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } else if ( *it == SUGAR_NAME_MISMATCH ) { mprintf("\t%s%s sugar form and/or chirality is not consistent with name.\n", msg1, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); + // ----- Fatal Errors ---- } else if ( *it == SUGAR_UNRECOGNIZED_LINK_RES ) { mprintf("\t%s%s is linked to a sugar but has no sugar-linkage form.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); @@ -3477,7 +3479,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; } else if ( *it == SUGAR_MISSING_C1X ) { - mprintf("\t%s%s Sugar is missing anomeric carbon substituent and cannot be identified.\n", + mprintf("\t%s%s Sugar is missing anomeric carbon substituent.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; } else if ( *it == SUGAR_SETUP_FAILED ) { From 5346c5ed16a7a400fb0801ac54dac457fb8f0894 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 17 Dec 2021 13:38:59 -0500 Subject: [PATCH 325/368] Add comment --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4bd1973223..851e31eeac 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3478,7 +3478,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\t%s%s could not identify chain atoms for determining linkages.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; - } else if ( *it == SUGAR_MISSING_C1X ) { + } else if ( *it == SUGAR_MISSING_C1X ) { // TODO should this be a warning mprintf("\t%s%s Sugar is missing anomeric carbon substituent.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; From 9a25af8b4b88295c922f0f7831138bdd7b0f94bf Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 5 Jan 2022 13:21:24 -0500 Subject: [PATCH 326/368] sugar missing a C1X may no longer be an issue since we can determine form etc from name --- src/Exec_PrepareForLeap.cpp | 8 ++++---- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 851e31eeac..66504c280d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1590,11 +1590,11 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, detect_err = DetermineAnomericForm(sugarInfo, sugarIn, topIn, frameIn); else detect_err = 1; - // Modify resStat_ based on sugar status +/* // Modify resStat_ based on sugar status if (sugar.Status() == Sugar::MISSING_C1X) { // Sugar missing C1-X substituent, non-fatal resStat_[rnum] = SUGAR_MISSING_C1X; - } + }*/ } if (detect_err != 0) { @@ -3478,10 +3478,10 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\t%s%s could not identify chain atoms for determining linkages.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; - } else if ( *it == SUGAR_MISSING_C1X ) { // TODO should this be a warning +/* } else if ( *it == SUGAR_MISSING_C1X ) { // TODO should this be a warning mprintf("\t%s%s Sugar is missing anomeric carbon substituent.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); - fatal_errors++; + fatal_errors++;*/ } else if ( *it == SUGAR_SETUP_FAILED ) { mprintf("\t%s%s Sugar setup failed and could not be identified.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 80a526df19..41fc7cae58 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -34,7 +34,7 @@ class Exec_PrepareForLeap : public Exec { SUGAR_NO_LINKAGE, SUGAR_NO_CHAIN_FOR_LINK, SUGAR_NAME_MISMATCH, - SUGAR_MISSING_C1X, + //SUGAR_MISSING_C1X, SUGAR_SETUP_FAILED }; typedef std::vector ResStatArray; From 03b264a2bf1c756e16b0962bb6f59b67f235576b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 5 Jan 2022 14:55:41 -0500 Subject: [PATCH 327/368] Warn if the leap unit name is a number; can confuse leap --- src/Exec_PrepareForLeap.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 66504c280d..f7d508c4c6 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3127,6 +3127,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } leapunitname_ = argIn.GetStringKey("leapunitname", "m"); mprintf("\tUsing leap unit name: %s\n", leapunitname_.c_str()); + if (validDouble(leapunitname_)) + mprintf("Warning: LEaP unit name '%s' is a valid number; this may confuse some LEaP commands.\n", + leapunitname_.c_str()); solventResName_ = argIn.GetStringKey("solventresname", "HOH"); mprintf("\tSolvent residue name: %s\n", solventResName_.c_str()); terminalHydroxylName_ = argIn.GetStringKey("terminalhydroxylname", "ROH"); From e0ad1ca2916f4fdb3da41b01edc2c6ebcb6832e4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 6 Jan 2022 12:10:40 -0500 Subject: [PATCH 328/368] Remove terminalhydroxyname keyword; info should be in file eventually --- src/Exec_PrepareForLeap.cpp | 11 ++++++----- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index f7d508c4c6..a17f9c6901 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1448,7 +1448,7 @@ const mprintf("DEBUG: Link residue name for %s found: %s\n", *(lname->first), *(lname->second)); ChangeResName( pres, lname->second ); resStatIn[topIn[*bat].ResNum()] = VALIDATED; - } else if (pres.Name() == terminalHydroxylName_) { + } else if (pres.Name() == "ROH") { if (debug_ > 0) mprintf("DEBUG: '%s' is terminal hydroxyl.\n", *(pres.Name())); resStatIn[topIn[*bat].ResNum()] = VALIDATED; @@ -2107,7 +2107,7 @@ const std::string newResName; if (groupType == G_OH) { - newResName = terminalHydroxylName_; + newResName = "ROH";//terminalHydroxylName_; // Change atom names ChangeAtomName(topIn.SetAtom(selected[0]), "O1"); if (selected.size() > 1) @@ -3036,7 +3036,7 @@ void Exec_PrepareForLeap::Help() const "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars |\n" "\t sugarmask [noc1search] [notermsearch] [resmapfile ]\n" - "\t [terminalhydroxylname ] [hasglycam]\n" + "\t [hasglycam]\n" "\t }]\n" "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" @@ -3132,8 +3132,9 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) leapunitname_.c_str()); solventResName_ = argIn.GetStringKey("solventresname", "HOH"); mprintf("\tSolvent residue name: %s\n", solventResName_.c_str()); - terminalHydroxylName_ = argIn.GetStringKey("terminalhydroxylname", "ROH"); - mprintf("\tTerminal hydroxyl name: %s\n", terminalHydroxylName_.c_str()); + // FIXME functional group stuff should be in a file + //terminalHydroxylName_ = argIn.GetStringKey("terminalhydroxylname", "ROH"); + //mprintf("\tTerminal hydroxyl name: %s\n", terminalHydroxylName_.c_str()); bool prepare_sugars = !argIn.hasKey("nosugars"); if (!prepare_sugars) diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 41fc7cae58..c7a812e359 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -168,7 +168,7 @@ class Exec_PrepareForLeap : public Exec { bool hasGlycam_; ///< If true, assume sugars already have glycam names int debug_; ///< Debug level std::string solventResName_; ///< Solvent residue name - std::string terminalHydroxylName_; ///< Terminal hydroxyl name + //std::string terminalHydroxylName_; ///< Terminal hydroxyl name FIXME this info should be in a separate file AtomMap myMap_; std::vector functionalGroups_; ///< Recognized functional groups (FunctionalGroupType). }; From 11a896a635ba54efcfeea4d34b8fcaab4d4a2b4e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 09:23:54 -0500 Subject: [PATCH 329/368] Separate least squares plane code not needed yet. --- src/LeastSquaresPlaneVector.cpp | 139 -------------------------------- src/LeastSquaresPlaneVector.h | 24 ------ src/cpptrajdepend | 1 - src/cpptrajfiles | 1 - 4 files changed, 165 deletions(-) delete mode 100644 src/LeastSquaresPlaneVector.cpp delete mode 100644 src/LeastSquaresPlaneVector.h diff --git a/src/LeastSquaresPlaneVector.cpp b/src/LeastSquaresPlaneVector.cpp deleted file mode 100644 index 41ed6a029e..0000000000 --- a/src/LeastSquaresPlaneVector.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include "LeastSquaresPlaneVector.h" -#include "Frame.h" -#include "AtomMask.h" -#include "Constants.h" -#include -#include //sort - -/** CONSTRUCTOR */ -LeastSquaresPlaneVector::LeastSquaresPlaneVector() -{} - -/** Reserve space for selected number of atoms. */ -void LeastSquaresPlaneVector::ReserveForNumAtoms(unsigned int nselected) { - vcorr_.reserve( nselected ); -} - -/** Solves a cubic equation: ax^3 + bx^2 + cx + d = 0 using "Cardan's formula" - * (see: Bronstein, S.131f) - */ -double LeastSquaresPlaneVector::solve_cubic_eq(double a, double b, double c, double d) { - const double one3 = 1.0 / 3.0; - const double one27 = 1.0 / 27.0; - double droot = 0; - - double r, s, t; - double p, q, rho, phi; - double D, u, v; - std::vector dtmp(3); - - /* Coeff. for normal form x^3 + rx^2 + sx + t = 0 */ - r = b / a; - s = c / a; - t = d / a; - - /* Coeff. for red. eq. y^3 + py + q = 0 with y = x + r/3 bzw. (x = y - r/3) */ - p = s - r * r * one3; - q = 2.0 * r * r * r * one27 - r * s * one3 + t; - - /* Dummy variables */ - rho = sqrt(-p * p * p * one27); - phi = acos(-q / (2.0 * rho)); - - /* Discriminante(?) */ - D = pow((p * one3),3) + q * q * 0.25; - - if(D > 0){ /* x real -> one real solution */ - u = pow(-q * 0.5 + sqrt(D), one3); - v = -p / u * one3; - droot = (u + v) - r * one3; - } else { // D <= 0 - /* three real solutions (d < 0) | one real solution + one real double solution or - one real triple solution (d = 0) */ - dtmp[0] = 2.0 * pow(rho, one3) * cos(phi * one3) - r * one3; - dtmp[1] = 2.0 * pow(rho, one3) * cos((phi + Constants::TWOPI ) * one3) - r * one3; - dtmp[2] = 2.0 * pow(rho, one3) * cos((phi + Constants::FOURPI) * one3) - r * one3; - - sort(dtmp.begin(), dtmp.end()); - - //qsort((void *) dtmp, (size_t) 3, sizeof(double), cmpdouble); - droot = dtmp[0]; - } - return droot; -} - -/** Calcs (least-squares best) plane through a series of points - * relative to their center of geom. (the latter has to be done outside this routine), - * returns (normalized) coeff. for plane eq. ax + by + cz = 0 - * following: Crystal Structure Analysis for Chem. and Biol., - * Glusker, Lewis, Rossi, S. 460ff - */ -Vec3 LeastSquaresPlaneVector::leastSquaresPlane(int n, const double* vcorr) { - double Xout, Yout, Zout; - if (n == 9) { // Special case, only 3 coords - double x1 = vcorr[3] - vcorr[0]; - double y1 = vcorr[4] - vcorr[1]; - double z1 = vcorr[5] - vcorr[2]; - double x2 = vcorr[6] - vcorr[3]; - double y2 = vcorr[7] - vcorr[4]; - double z2 = vcorr[8] - vcorr[5]; - - Xout = y1 * z2 - z1 * y2; - Yout = z1 * x2 - x1 * z2; - Zout = x1 * y2 - y1 * x2; - } else { // General case - // Calc Var. - double dSumXX = 0.0; - double dSumYY = 0.0; - double dSumZZ = 0.0; - double dSumXY = 0.0; - double dSumXZ = 0.0; - double dSumYZ = 0.0; - - for (int i = 0; i < n; i+=3) { - dSumXX += vcorr[i ] * vcorr[i ]; - dSumYY += vcorr[i+1] * vcorr[i+1]; - dSumZZ += vcorr[i+2] * vcorr[i+2]; - - dSumXY += vcorr[i ] * vcorr[i+1]; - dSumXZ += vcorr[i ] * vcorr[i+2]; - dSumYZ += vcorr[i+1] * vcorr[i+2]; - } - - // Calc coeff. for -l^3 + o * l^2 + p * l + q = 0 - double o = dSumXX + dSumYY + dSumZZ; - double p = pow(dSumXY,2) + pow(dSumXZ,2) + pow(dSumYZ,2) - - (dSumXX * dSumYY + dSumXX * dSumZZ + dSumYY * dSumZZ); - double q = dSumXX * dSumYY * dSumZZ + 2.0 * dSumXY * dSumXZ * dSumYZ - - (dSumXX * dSumYZ * dSumYZ + dSumYY * dSumXZ * dSumXZ + dSumZZ * dSumXY * dSumXY); - - // Solve cubic eq. - double root = solve_cubic_eq(-1.0, o, p, q); - - // Calc determinents - Xout = (dSumYY - root) * dSumXZ - dSumXY * dSumYZ; - Yout = (dSumXX - root) * dSumYZ - dSumXY * dSumXZ; - Zout = dSumXY * dSumXY - (dSumYY - root) * (dSumXX - root); - } - // Normalize - double dnorm = 1.0 / sqrt((Xout * Xout) + (Yout * Yout) + (Zout * Zout)); - return Vec3(Xout * dnorm, Yout * dnorm, Zout * dnorm); -} - -/** \return vector perpendicular to the plane passing through selected atoms. */ -Vec3 LeastSquaresPlaneVector::CalcLSPvec(Frame const& currentFrame, AtomMask const& maskIn) -{ - CXYZ_ = currentFrame.VCenterOfMass(maskIn); - vcorr_.clear(); - for (AtomMask::const_iterator atom = maskIn.begin(); - atom != maskIn.end(); ++atom) - { - Vec3 XYZ = currentFrame.XYZ( *atom ); - XYZ -= CXYZ_; - vcorr_.push_back(XYZ[0]); - vcorr_.push_back(XYZ[1]); - vcorr_.push_back(XYZ[2]); - } - Vec3 VXYZ = leastSquaresPlane(vcorr_.size(), &vcorr_[0]); - return VXYZ; -} diff --git a/src/LeastSquaresPlaneVector.h b/src/LeastSquaresPlaneVector.h deleted file mode 100644 index 64f980c939..0000000000 --- a/src/LeastSquaresPlaneVector.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef INC_LEASTSQUARESPLANEVECTOR_H -#define INC_LEASTSQUARESPLANEVECTOR_H -#include -#include "Vec3.h" -class Frame; -class AtomMask; -/// Calculate vector perpendicular to the plane passing through selected atoms. -class LeastSquaresPlaneVector { - public: - LeastSquaresPlaneVector(); - /// Reserve space for specified number of selected atoms. - void ReserveForNumAtoms(unsigned int); - /// \return vector perpendicular to the plane passing through selected atoms. - Vec3 CalcLSPvec(Frame const&, AtomMask const&); - /// \return Coordinates of the center of atoms selected in last call of CalcLSPvec - Vec3 Center() const { return CXYZ_; } - private: - static inline double solve_cubic_eq(double, double, double, double); - static inline Vec3 leastSquaresPlane(int, const double*); - - std::vector vcorr_; ///< Will hold XYZ coordinates of selected atoms. - Vec3 CXYZ_; ///< Will hold the coordinates of the center of selected atoms. -}; -#endif diff --git a/src/cpptrajdepend b/src/cpptrajdepend index d0f38f9a27..1570838976 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -319,7 +319,6 @@ Image_List_Unit.o : Image_List_Unit.cpp Atom.h AtomMask.h AtomType.h Box.h Const InputTrajCommon.o : InputTrajCommon.cpp CpptrajStdio.h FileName.h InputTrajCommon.h TrajFrameCounter.h KDE.o : KDE.cpp AssociatedData.h Constants.h CpptrajFile.h CpptrajStdio.h DataSet.h DataSet_1D.h DataSet_double.h Dimension.h FileIO.h FileName.h HistBin.h KDE.h MetaData.h Parallel.h Range.h TextFormat.h LeapInterface.o : LeapInterface.cpp ArgList.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h File_TempName.h LeapInterface.h Parallel.h StringRoutines.h -LeastSquaresPlaneVector.o : LeastSquaresPlaneVector.cpp Atom.h AtomMask.h Box.h Constants.h CoordinateInfo.h Frame.h LeastSquaresPlaneVector.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Unit.h Vec3.h MapAtom.o : MapAtom.cpp Atom.h MapAtom.h NameType.h SymbolExporting.h MaskArray.o : MaskArray.cpp Atom.h AtomMask.h AtomType.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h MaskArray.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TypeNameHolder.h Unit.h Vec3.h MaskToken.o : MaskToken.cpp ArgList.h Atom.h CpptrajStdio.h DistRoutines.h ImageOption.h MaskToken.h Molecule.h NameType.h Residue.h Segment.h StringRoutines.h SymbolExporting.h Unit.h diff --git a/src/cpptrajfiles b/src/cpptrajfiles index 5d94e78749..373fe69b5f 100644 --- a/src/cpptrajfiles +++ b/src/cpptrajfiles @@ -318,7 +318,6 @@ COMMON_SOURCES= \ InputTrajCommon.cpp \ KDE.cpp \ LeapInterface.cpp \ - LeastSquaresPlaneVector.cpp \ MapAtom.cpp \ MaskArray.cpp \ MaskToken.cpp \ From 031872d4c8935a38fb327d884a8ce86449107377 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 09:39:25 -0500 Subject: [PATCH 330/368] Clean up output a little --- src/Exec_PrepareForLeap.cpp | 23 ++++++++--------------- src/Exec_PrepareForLeap.h | 4 ++-- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index a17f9c6901..5e9fde584e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -180,11 +180,12 @@ Exec_PrepareForLeap::SugarToken::SugarToken(RingTypeEnum rt) : ring_(rt) {} -/** Print token info to stdout. */ -void Exec_PrepareForLeap::SugarToken::PrintInfo(std::string const& resname) const { - mprintf("\t'%s' \"%s\" %s %s-%s-%s\n", - resname.c_str(), name_.c_str(), glycamCode_.c_str(), - formstr_[form_], chirstr_[chir_], ringstr_[ring_]); +/** \return String containing name, glycam code, and form-chirality-ring type. */ +std::string Exec_PrepareForLeap::SugarToken::InfoStr() const { + return std::string("\"" + name_ + "\" " + glycamCode_ + " " + + std::string(formstr_[form_]) + "-" + + std::string(chirstr_[chir_]) + "-" + + std::string(ringstr_[ring_])); } /** Set up from line: @@ -1571,11 +1572,8 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, mprinterr("Error: Could not identify sugar from residue name '%s'\n", *res.Name()); return 1; } - mprintf("DEBUG: "); - pdb_glycam->second.PrintInfo( pdb_glycam->first.Truncated() ); - mprintf("\tSugar %s glycam name: %s\n", sugarName.c_str(), - pdb_glycam->second.GlycamCode().c_str()); + mprintf("\tSugar %s %s\n", sugarName.c_str(), pdb_glycam->second.InfoStr().c_str()); SugarToken sugarInfo; int detect_err = 1; @@ -1590,11 +1588,6 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, detect_err = DetermineAnomericForm(sugarInfo, sugarIn, topIn, frameIn); else detect_err = 1; -/* // Modify resStat_ based on sugar status - if (sugar.Status() == Sugar::MISSING_C1X) { - // Sugar missing C1-X substituent, non-fatal - resStat_[rnum] = SUGAR_MISSING_C1X; - }*/ } if (detect_err != 0) { @@ -1684,7 +1677,7 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, return 1; } - mprintf("\t %s form is %s(%s)-%s-%s\n", sugarName.c_str(), + mprintf("\t %s detected form is %s(%s)-%s-%s\n", sugarName.c_str(), formstr_[sugarInfo.Form()], formStr.c_str(), chirstr_[sugarInfo.Chirality()], ringstr_[sugarInfo.RingType()]); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index c7a812e359..4a3182718d 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -273,8 +273,8 @@ class Exec_PrepareForLeap::SugarToken { SugarToken(RingTypeEnum); /// /return , set up from line: ' ' std::string SetFromLine(ArgList const&); - /// Print token info to stdout - void PrintInfo(std::string const&) const; + /// \return string containing token info + std::string InfoStr() const; std::string const& FullName() const { return name_; } std::string const& GlycamCode() const { return glycamCode_; } From 0fab86273588f6d4c517dea11a44a1360da88527 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 10:08:13 -0500 Subject: [PATCH 331/368] Hide some debug info --- src/Exec_PrepareForLeap.cpp | 18 ++++++++++-------- src/LeapInterface.cpp | 7 +++++-- src/LeapInterface.h | 2 ++ src/PDBfile.cpp | 4 ++-- src/Parm_PDB.cpp | 30 ++++++++++++++++++------------ 5 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 5e9fde584e..13125ae8bf 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2902,7 +2902,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, std::string topname = leapunitname_ + ".parm7"; std::string rstname = leapunitname_ + ".rst7"; - Cpptraj::LeapInterface LEAP; + Cpptraj::LeapInterface LEAP(debug_); LEAP.AddInputFile( ff_file ); LEAP.AddInputFile( leapfilename ); LEAP.AddCommand("saveamberparm " + leapunitname_ + " " + @@ -2994,13 +2994,15 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, } // DEBUG: Print out total charge on each residue - for (Topology::res_iterator res = leaptop.ResStart(); res != leaptop.ResEnd(); ++res) - { - double tcharge = 0; - for (int at = res->FirstAtom(); at != res->LastAtom(); ++at) - tcharge += leaptop[at].Charge(); - mprintf("\tResidue %10s charge= %12.5f\n", - leaptop.TruncResNameOnumId(res-leaptop.ResStart()).c_str(), tcharge); + if (debug_ > 0) { + for (Topology::res_iterator res = leaptop.ResStart(); res != leaptop.ResEnd(); ++res) + { + double tcharge = 0; + for (int at = res->FirstAtom(); at != res->LastAtom(); ++at) + tcharge += leaptop[at].Charge(); + mprintf("DEBUG:\tResidue %10s charge= %12.5f\n", + leaptop.TruncResNameOnumId(res-leaptop.ResStart()).c_str(), tcharge); + } } // If topology was modified, write it back out diff --git a/src/LeapInterface.cpp b/src/LeapInterface.cpp index 9e89e8e3f8..29591e07d3 100644 --- a/src/LeapInterface.cpp +++ b/src/LeapInterface.cpp @@ -11,6 +11,9 @@ using namespace Cpptraj; /** CONSTRUCTOR */ LeapInterface::LeapInterface() : debug_(0) {} +/** CONSTRUCTOR - set debug level */ +LeapInterface::LeapInterface(int d) : debug_(d) {} + /** Set up leap to run. */ int LeapInterface::AddInputFile(std::string const& fname) { if (fname.empty()) return 1; @@ -49,7 +52,7 @@ int LeapInterface::execute_leap(FileName const& input) const { leapin.CloseFile(); std::string cmd("tleap -f " + input.Full()); - mprintf("DEBUG: %s\n", cmd.c_str()); + if (debug_ > 0) mprintf("DEBUG: %s\n", cmd.c_str()); // int err = system( cmd.c_str() ); Sarray errorMessages; @@ -92,7 +95,7 @@ int LeapInterface::execute_leap(FileName const& input) const { pclose(file); if (!cleanExit) return 1; - mprintf("DEBUG: Leap Exit line '%s'\n", exitLine.c_str()); + if (debug_ > 0) mprintf("DEBUG: Leap Exit line '%s'\n", exitLine.c_str()); ArgList exitArgs(exitLine, " :=;."); int nerr = exitArgs.getKeyInt("Errors", -1); int nwarn = exitArgs.getKeyInt("Warnings", -1); diff --git a/src/LeapInterface.h b/src/LeapInterface.h index 46ad9c390d..3ac76006a2 100644 --- a/src/LeapInterface.h +++ b/src/LeapInterface.h @@ -9,6 +9,8 @@ class LeapInterface { public: /// CONSTRUCTOR LeapInterface(); + /// CONSTRUCTOR - debug level + LeapInterface(int); /// Add input file int AddInputFile(std::string const&); /// Add command to run after input files are sourced diff --git a/src/PDBfile.cpp b/src/PDBfile.cpp index 528520e19a..9b33ae2358 100644 --- a/src/PDBfile.cpp +++ b/src/PDBfile.cpp @@ -314,8 +314,8 @@ Residue PDBfile::missing_res() const { //std::copy(linebuffer_+21, linebuffer_+26, numbuf); //numbuf[5] = '\0'; int currentres = atoi(numbuf.c_str()); - mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", - currentname.c_str(), currentres, currenticode, currentchain); + //mprintf("DEBUG: Missing residue %s %i icode= %c chain= %c\n", + // currentname.c_str(), currentres, currenticode, currentchain); return Residue(currentname, currentres, currenticode, currentchain); } diff --git a/src/Parm_PDB.cpp b/src/Parm_PDB.cpp index 91b0c1bb60..29c06b6cea 100644 --- a/src/Parm_PDB.cpp +++ b/src/Parm_PDB.cpp @@ -179,20 +179,26 @@ int Parm_PDB::ReadParm(FileName const& fname, Topology &TopIn) { } // END loop over PDB records if (hasMissingResidues) { - mprintf("DEBUG: Missing Residues: "); - for (std::vector::const_iterator res = missingResidues.begin(); - res != missingResidues.end(); ++res) - mprintf(" {%s %i %c %c}", *(res->Name()), res->OriginalResNum(), - res->Icode(), res->ChainId()); - mprintf("\n"); + mprintf("\t%zu missing residues.\n", missingResidues.size()); + if (debug_ > 0) { + mprintf("DEBUG: Missing Residues: "); + for (std::vector::const_iterator res = missingResidues.begin(); + res != missingResidues.end(); ++res) + mprintf(" {%s %i %c %c}", *(res->Name()), res->OriginalResNum(), + res->Icode(), res->ChainId()); + mprintf("\n"); + } } if (hasMissingHet) { - mprintf("DEBUG: Residues missing heteroatoms: "); - for (std::vector::const_iterator res = missingHet.begin(); - res != missingHet.end(); ++res) - mprintf(" {%s %i %c %c}", *(res->Name()), res->OriginalResNum(), - res->Icode(), res->ChainId()); - mprintf("\n"); + mprintf("\t%zu HET residues with missing atoms.\n", missingHet.size()); + if (debug_ > 0) { + mprintf("DEBUG: Residues missing heteroatoms: "); + for (std::vector::const_iterator res = missingHet.begin(); + res != missingHet.end(); ++res) + mprintf(" {%s %i %c %c}", *(res->Name()), res->OriginalResNum(), + res->Icode(), res->ChainId()); + mprintf("\n"); + } } TopIn.SetMissingResInfo(missingResidues, missingHet); From c7ee07084778ba7fb6a7b07bf7164c30f5ce810a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 11:28:27 -0500 Subject: [PATCH 332/368] Make prepareforleap not hidden --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 13125ae8bf..eb9f34053e 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -239,7 +239,7 @@ Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), hasGlycam_(false), debug_(0) { - SetHidden(true); + SetHidden(false); } /// Used to change residue name to nameIn From 362ca36cfa777809056ab7baddf63a3453635aa5 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 12:10:03 -0500 Subject: [PATCH 333/368] Add a test for prepareforleap --- .../Test_PrepareForLeap/1qos.cpptraj.pdb.save | 3679 ++++++++++++++ test/Test_PrepareForLeap/1qos.pdb | 4274 +++++++++++++++++ test/Test_PrepareForLeap/RunTest.sh | 25 + test/Test_PrepareForLeap/leap.1qos.in.save | 7 + 4 files changed, 7985 insertions(+) create mode 100644 test/Test_PrepareForLeap/1qos.cpptraj.pdb.save create mode 100644 test/Test_PrepareForLeap/1qos.pdb create mode 100755 test/Test_PrepareForLeap/RunTest.sh create mode 100644 test/Test_PrepareForLeap/leap.1qos.in.save diff --git a/test/Test_PrepareForLeap/1qos.cpptraj.pdb.save b/test/Test_PrepareForLeap/1qos.cpptraj.pdb.save new file mode 100644 index 0000000000..c259c6caf4 --- /dev/null +++ b/test/Test_PrepareForLeap/1qos.cpptraj.pdb.save @@ -0,0 +1,3679 @@ +CRYST1 106.030 106.030 87.020 90.00 90.00 120.00 1 +ATOM 1 N SER A 1 -16.435 94.977 30.342 1.00 84.94 N +ATOM 2 CA SER A 1 -17.175 94.424 29.170 1.00 85.50 C +ATOM 3 C SER A 1 -16.366 94.512 27.857 1.00 85.44 C +ATOM 4 O SER A 1 -15.236 95.016 27.840 1.00 85.31 O +ATOM 5 CB SER A 1 -18.530 95.132 29.028 1.00 84.43 C +ATOM 6 N ASP A 2 -16.957 94.008 26.771 1.00 84.11 N +ATOM 7 CA ASP A 2 -16.341 93.991 25.437 1.00 79.71 C +ATOM 8 C ASP A 2 -16.424 95.338 24.732 1.00 74.36 C +ATOM 9 O ASP A 2 -17.185 96.217 25.134 1.00 74.12 O +ATOM 10 CB ASP A 2 -17.019 92.933 24.558 1.00 83.81 C +ATOM 11 CG ASP A 2 -17.018 91.546 25.193 1.00 87.73 C +ATOM 12 OD1 ASP A 2 -17.980 91.220 25.929 1.00 90.79 O +ATOM 13 OD2 ASP A 2 -16.057 90.780 24.957 1.00 88.99 O +ATOM 14 N ASP A 3 -15.671 95.472 23.645 1.00 68.27 N +ATOM 15 CA ASP A 3 -15.659 96.708 22.876 1.00 63.65 C +ATOM 16 C ASP A 3 -17.034 97.107 22.345 1.00 59.20 C +ATOM 17 O ASP A 3 -17.496 98.220 22.599 1.00 57.56 O +ATOM 18 CB ASP A 3 -14.627 96.629 21.748 1.00 65.55 C +ATOM 19 CG ASP A 3 -13.204 96.793 22.258 1.00 68.62 C +ATOM 20 OD1 ASP A 3 -12.696 95.859 22.919 1.00 69.88 O +ATOM 21 OD2 ASP A 3 -12.605 97.871 22.031 1.00 70.38 O +ATOM 22 N LEU A 4 -17.689 96.202 21.620 1.00 55.53 N +ATOM 23 CA LEU A 4 -19.022 96.472 21.076 1.00 49.36 C +ATOM 24 C LEU A 4 -19.967 95.309 21.283 1.00 46.46 C +ATOM 25 O LEU A 4 -19.567 94.151 21.270 1.00 46.13 O +ATOM 26 CB LEU A 4 -18.975 96.792 19.585 1.00 48.41 C +ATOM 27 CG LEU A 4 -20.339 97.199 19.019 1.00 46.68 C +ATOM 28 CD1 LEU A 4 -20.764 98.526 19.616 1.00 46.27 C +ATOM 29 CD2 LEU A 4 -20.292 97.298 17.509 1.00 48.23 C +ATOM 30 N SER A 5 -21.243 95.631 21.405 1.00 44.60 N +ATOM 31 CA SER A 5 -22.262 94.625 21.619 1.00 42.44 C +ATOM 32 C SER A 5 -23.633 95.241 21.345 1.00 40.15 C +ATOM 33 O SER A 5 -23.972 96.286 21.902 1.00 40.19 O +ATOM 34 CB SER A 5 -22.164 94.121 23.062 1.00 41.64 C +ATOM 35 OG SER A 5 -23.162 93.167 23.346 1.00 45.84 O +ATOM 36 N PHE A 6 -24.384 94.647 20.421 1.00 38.17 N +ATOM 37 CA PHE A 6 -25.721 95.144 20.116 1.00 37.02 C +ATOM 38 C PHE A 6 -26.701 94.055 19.741 1.00 37.87 C +ATOM 39 O PHE A 6 -26.363 93.104 19.040 1.00 37.75 O +ATOM 40 CB PHE A 6 -25.710 96.254 19.057 1.00 34.03 C +ATOM 41 CG PHE A 6 -25.256 95.814 17.693 1.00 33.51 C +ATOM 42 CD1 PHE A 6 -26.082 95.050 16.872 1.00 32.22 C +ATOM 43 CD2 PHE A 6 -24.014 96.200 17.204 1.00 32.40 C +ATOM 44 CE1 PHE A 6 -25.672 94.686 15.591 1.00 29.06 C +ATOM 45 CE2 PHE A 6 -23.604 95.837 15.922 1.00 28.87 C +ATOM 46 CZ PHE A 6 -24.428 95.083 15.121 1.00 27.29 C +ATOM 47 N ASN A 7 -27.920 94.208 20.234 1.00 40.43 N +ATOM 48 CA ASN A 7 -28.980 93.255 19.983 1.00 40.71 C +ATOM 49 C ASN A 7 -30.207 93.916 19.362 1.00 41.17 C +ATOM 50 O ASN A 7 -30.597 95.016 19.748 1.00 42.64 O +ATOM 51 CB ASN A 7 -29.365 92.566 21.282 1.00 39.85 C +ATOM 52 CG ASN A 7 -30.360 91.466 21.071 1.00 42.55 C +ATOM 53 OD1 ASN A 7 -30.051 90.444 20.456 1.00 45.14 O +ATOM 54 ND2 ASN A 7 -31.575 91.667 21.563 1.00 43.45 N +ATOM 55 N PHE A 8 -30.784 93.246 18.372 1.00 41.73 N +ATOM 56 CA PHE A 8 -31.981 93.718 17.686 1.00 41.47 C +ATOM 57 C PHE A 8 -32.976 92.559 17.701 1.00 41.62 C +ATOM 58 O PHE A 8 -32.825 91.607 16.942 1.00 40.03 O +ATOM 59 CB PHE A 8 -31.659 94.102 16.236 1.00 40.83 C +ATOM 60 CG PHE A 8 -30.818 95.345 16.093 1.00 42.34 C +ATOM 61 CD1 PHE A 8 -31.016 96.439 16.923 1.00 46.34 C +ATOM 62 CD2 PHE A 8 -29.847 95.435 15.100 1.00 42.27 C +ATOM 63 CE1 PHE A 8 -30.261 97.615 16.762 1.00 46.79 C +ATOM 64 CE2 PHE A 8 -29.087 96.602 14.931 1.00 42.19 C +ATOM 65 CZ PHE A 8 -29.295 97.691 15.761 1.00 43.32 C +ATOM 66 N ASP A 9 -33.952 92.614 18.604 1.00 43.97 N +ATOM 67 CA ASP A 9 -34.965 91.558 18.717 1.00 47.04 C +ATOM 68 C ASP A 9 -35.855 91.578 17.504 1.00 46.29 C +ATOM 69 O ASP A 9 -36.330 90.549 17.045 1.00 46.00 O +ATOM 70 CB ASP A 9 -35.824 91.767 19.960 1.00 52.02 C +ATOM 71 CG ASP A 9 -35.029 91.637 21.247 1.00 59.12 C +ATOM 72 OD1 ASP A 9 -34.505 90.525 21.503 1.00 60.60 O +ATOM 73 OD2 ASP A 9 -34.922 92.643 21.994 1.00 62.25 O +ATOM 74 N LYS A 10 -36.095 92.789 17.023 1.00 47.74 N +ATOM 75 CA LYS A 10 -36.909 93.071 15.848 1.00 48.62 C +ATOM 76 C LYS A 10 -36.369 94.371 15.268 1.00 46.66 C +ATOM 77 O LYS A 10 -35.648 95.109 15.943 1.00 46.33 O +ATOM 78 CB LYS A 10 -38.400 93.237 16.223 1.00 52.69 C +ATOM 79 CG LYS A 10 -38.695 94.023 17.536 1.00 61.76 C +ATOM 80 CD LYS A 10 -38.566 95.565 17.424 1.00 68.68 C +ATOM 81 CE LYS A 10 -38.507 96.287 18.806 1.00 71.02 C +ATOM 82 NZ LYS A 10 -37.183 96.154 19.532 1.00 72.03 N +ATOM 83 N PHE A 11 -36.678 94.631 14.008 1.00 45.66 N +ATOM 84 CA PHE A 11 -36.236 95.859 13.376 1.00 45.59 C +ATOM 85 C PHE A 11 -37.450 96.768 13.272 1.00 47.36 C +ATOM 86 O PHE A 11 -38.587 96.299 13.364 1.00 47.34 O +ATOM 87 CB PHE A 11 -35.684 95.564 11.990 1.00 43.43 C +ATOM 88 CG PHE A 11 -34.522 94.616 11.988 1.00 43.79 C +ATOM 89 CD1 PHE A 11 -33.221 95.091 12.125 1.00 45.00 C +ATOM 90 CD2 PHE A 11 -34.720 93.253 11.819 1.00 43.02 C +ATOM 91 CE1 PHE A 11 -32.134 94.222 12.089 1.00 43.29 C +ATOM 92 CE2 PHE A 11 -33.643 92.374 11.781 1.00 42.61 C +ATOM 93 CZ PHE A 11 -32.349 92.858 11.915 1.00 43.85 C +ATOM 94 N VAL A 12 -37.216 98.073 13.162 1.00 48.76 N +ATOM 95 CA VAL A 12 -38.310 99.032 13.018 1.00 50.95 C +ATOM 96 C VAL A 12 -38.162 99.675 11.640 1.00 54.25 C +ATOM 97 O VAL A 12 -37.057 99.702 11.094 1.00 54.43 O +ATOM 98 CB VAL A 12 -38.276 100.124 14.113 1.00 49.94 C +ATOM 99 CG1 VAL A 12 -38.227 99.496 15.493 1.00 51.43 C +ATOM 100 CG2 VAL A 12 -37.103 101.054 13.910 1.00 52.83 C +ATOM 101 N PRO A 13 -39.275 100.128 11.020 1.00 57.30 N +ATOM 102 CA PRO A 13 -39.180 100.770 9.705 1.00 59.32 C +ATOM 103 C PRO A 13 -38.342 102.050 9.765 1.00 61.96 C +ATOM 104 O PRO A 13 -38.546 102.900 10.643 1.00 61.49 O +ATOM 105 CB PRO A 13 -40.643 101.034 9.343 1.00 58.63 C +ATOM 106 CG PRO A 13 -41.317 101.149 10.662 1.00 59.39 C +ATOM 107 CD PRO A 13 -40.681 100.035 11.446 1.00 58.68 C +ATOM 108 N ASN A 14 -37.373 102.146 8.850 1.00 65.01 N +ATOM 109 CA ASN A 14 -36.445 103.281 8.761 1.00 68.06 C +ATOM 110 C ASN A 14 -35.680 103.441 10.075 1.00 66.31 C +ATOM 111 O ASN A 14 -35.781 104.462 10.760 1.00 68.90 O +ATOM 112 CB ASN A 14 -37.184 104.578 8.413 1.00 74.32 C +ATOM 113 CG ASN A 14 -37.976 104.469 7.121 1.00 80.53 C +ATOM 114 OD1 ASN A 14 -39.211 104.507 7.134 1.00 84.23 O +ATOM 115 ND2 ASN A 14 -37.270 104.315 5.999 1.00 81.74 N +ATOM 116 N GLN A 15 -34.953 102.390 10.435 1.00 61.06 N +ATOM 117 CA GLN A 15 -34.162 102.355 11.651 1.00 55.28 C +ATOM 118 C GLN A 15 -32.988 103.293 11.428 1.00 53.14 C +ATOM 119 O GLN A 15 -32.354 103.233 10.383 1.00 54.43 O +ATOM 120 CB GLN A 15 -33.681 100.929 11.865 1.00 52.83 C +ATOM 121 CG GLN A 15 -33.358 100.573 13.283 1.00 51.11 C +ATOM 122 CD GLN A 15 -33.548 99.102 13.537 1.00 51.27 C +ATOM 123 OE1 GLN A 15 -33.793 98.679 14.662 1.00 56.02 O +ATOM 124 NE2 GLN A 15 -33.475 98.312 12.484 1.00 50.67 N +ATOM 125 N LYS A 16 -32.718 104.172 12.388 1.00 49.65 N +ATOM 126 CA LYS A 16 -31.632 105.132 12.252 1.00 47.15 C +ATOM 127 C LYS A 16 -30.214 104.609 12.406 1.00 45.04 C +ATOM 128 O LYS A 16 -29.276 105.262 11.957 1.00 43.97 O +ATOM 129 CB LYS A 16 -31.827 106.306 13.199 1.00 50.13 C +ATOM 130 CG LYS A 16 -32.236 107.588 12.525 1.00 52.65 C +ATOM 131 CD LYS A 16 -33.655 107.500 12.000 1.00 57.62 C +ATOM 132 CE LYS A 16 -34.137 108.853 11.472 1.00 60.30 C +ATOM 133 NZ LYS A 16 -34.081 109.922 12.519 1.00 61.02 N +ATOM 134 N ASN A 17 -30.037 103.468 13.065 1.00 42.65 N +ATOM 135 CA ASN A 17 -28.689 102.929 13.241 1.00 39.67 C +ATOM 136 C ASN A 17 -28.348 101.832 12.252 1.00 37.26 C +ATOM 137 O ASN A 17 -27.465 101.007 12.481 1.00 38.69 O +ATOM 138 CB ASN A 17 -28.434 102.474 14.683 1.00 38.85 C +ATOM 139 CG ASN A 17 -29.462 101.497 15.181 1.00 36.75 C +ATOM 140 OD1 ASN A 17 -30.253 100.945 14.408 1.00 36.38 O +ATOM 141 ND2 ASN A 17 -29.467 101.282 16.489 1.00 35.89 N +ATOM 142 N ILE A 18 -29.065 101.818 11.144 1.00 35.03 N +ATOM 143 CA ILE A 18 -28.801 100.849 10.107 1.00 33.38 C +ATOM 144 C ILE A 18 -28.755 101.600 8.796 1.00 33.71 C +ATOM 145 O ILE A 18 -29.577 102.485 8.537 1.00 32.72 O +ATOM 146 CB ILE A 18 -29.865 99.754 10.058 1.00 32.64 C +ATOM 147 CG1 ILE A 18 -29.649 98.796 11.220 1.00 30.75 C +ATOM 148 CG2 ILE A 18 -29.798 98.999 8.731 1.00 32.40 C +ATOM 149 CD1 ILE A 18 -30.559 97.617 11.169 1.00 33.09 C +ATOM 150 N ILE A 19 -27.750 101.285 7.994 1.00 35.49 N +ATOM 151 CA ILE A 19 -27.589 101.932 6.704 1.00 37.41 C +ATOM 152 C ILE A 19 -28.178 101.044 5.626 1.00 37.07 C +ATOM 153 O ILE A 19 -27.763 99.898 5.466 1.00 36.90 O +ATOM 154 CB ILE A 19 -26.105 102.213 6.415 1.00 38.04 C +ATOM 155 CG1 ILE A 19 -25.548 103.180 7.466 1.00 40.11 C +ATOM 156 CG2 ILE A 19 -25.935 102.799 5.027 1.00 37.58 C +ATOM 157 CD1 ILE A 19 -24.038 103.408 7.355 1.00 43.02 C +ATOM 158 N PHE A 20 -29.183 101.564 4.931 1.00 37.56 N +ATOM 159 CA PHE A 20 -29.841 100.812 3.870 1.00 38.68 C +ATOM 160 C PHE A 20 -29.278 101.174 2.518 1.00 39.75 C +ATOM 161 O PHE A 20 -29.204 102.347 2.167 1.00 39.48 O +ATOM 162 CB PHE A 20 -31.347 101.064 3.876 1.00 37.18 C +ATOM 163 CG PHE A 20 -32.021 100.641 5.141 1.00 36.58 C +ATOM 164 CD1 PHE A 20 -32.431 99.321 5.319 1.00 36.86 C +ATOM 165 CD2 PHE A 20 -32.226 101.555 6.172 1.00 37.06 C +ATOM 166 CE1 PHE A 20 -33.034 98.913 6.512 1.00 37.77 C +ATOM 167 CE2 PHE A 20 -32.829 101.164 7.372 1.00 38.04 C +ATOM 168 CZ PHE A 20 -33.233 99.839 7.542 1.00 39.10 C +ATOM 169 N GLN A 21 -28.863 100.151 1.777 1.00 43.06 N +ATOM 170 CA GLN A 21 -28.302 100.310 0.436 1.00 45.23 C +ATOM 171 C GLN A 21 -29.074 99.387 -0.503 1.00 46.85 C +ATOM 172 O GLN A 21 -29.311 98.220 -0.175 1.00 48.60 O +ATOM 173 CB GLN A 21 -26.820 99.910 0.408 1.00 44.51 C +ATOM 174 CG GLN A 21 -25.930 100.638 1.389 1.00 44.36 C +ATOM 175 CD GLN A 21 -24.489 100.163 1.324 1.00 45.79 C +ATOM 176 OE1 GLN A 21 -24.213 98.966 1.183 1.00 46.19 O +ATOM 177 NE2 GLN A 21 -23.559 101.102 1.429 1.00 45.23 N +ATOM 178 N GLY A 22 -29.444 99.897 -1.673 1.00 47.83 N +ATOM 179 CA GLY A 22 -30.180 99.083 -2.623 1.00 49.27 C +ATOM 180 C GLY A 22 -31.637 98.975 -2.238 1.00 50.94 C +ATOM 181 O GLY A 22 -32.201 99.924 -1.690 1.00 51.42 O +ATOM 182 N ASP A 23 -32.236 97.812 -2.494 1.00 52.07 N +ATOM 183 CA ASP A 23 -33.647 97.569 -2.186 1.00 53.30 C +ATOM 184 C ASP A 23 -33.922 97.162 -0.739 1.00 52.81 C +ATOM 185 O ASP A 23 -35.070 96.907 -0.358 1.00 52.73 O +ATOM 186 CB ASP A 23 -34.208 96.514 -3.137 1.00 56.39 C +ATOM 187 CG ASP A 23 -34.204 96.974 -4.580 1.00 60.62 C +ATOM 188 OD1 ASP A 23 -35.149 97.684 -4.972 1.00 64.94 O +ATOM 189 OD2 ASP A 23 -33.259 96.636 -5.324 1.00 63.35 O +ATOM 190 N ALA A 24 -32.864 97.104 0.064 1.00 52.44 N +ATOM 191 CA ALA A 24 -32.973 96.731 1.464 1.00 50.84 C +ATOM 192 C ALA A 24 -33.925 97.663 2.200 1.00 51.47 C +ATOM 193 O ALA A 24 -33.872 98.884 2.043 1.00 52.67 O +ATOM 194 CB ALA A 24 -31.612 96.756 2.108 1.00 50.71 C +ATOM 195 N SER A 25 -34.802 97.071 2.998 1.00 51.53 N +ATOM 196 CA SER A 25 -35.785 97.828 3.760 1.00 50.92 C +ATOM 197 C SER A 25 -36.352 96.969 4.881 1.00 50.32 C +ATOM 198 O SER A 25 -36.078 95.767 4.958 1.00 48.82 O +ATOM 199 CB SER A 25 -36.921 98.260 2.840 1.00 51.26 C +ATOM 200 OG SER A 25 -37.435 97.134 2.152 1.00 52.35 O +ATOM 201 N VAL A 26 -37.166 97.586 5.731 1.00 49.73 N +ATOM 202 CA VAL A 26 -37.779 96.878 6.842 1.00 50.34 C +ATOM 203 C VAL A 26 -39.298 97.071 6.839 1.00 50.63 C +ATOM 204 O VAL A 26 -39.794 98.187 6.945 1.00 52.26 O +ATOM 205 CB VAL A 26 -37.123 97.284 8.195 1.00 48.33 C +ATOM 206 CG1 VAL A 26 -36.834 98.751 8.209 1.00 51.18 C +ATOM 207 CG2 VAL A 26 -38.005 96.912 9.361 1.00 47.63 C +ATOM 208 N SER A 27 -40.022 95.969 6.671 1.00 51.32 N +ATOM 209 CA SER A 27 -41.479 95.987 6.628 1.00 53.07 C +ATOM 210 C SER A 27 -42.087 96.398 7.964 1.00 54.95 C +ATOM 211 O SER A 27 -41.416 96.355 8.997 1.00 54.28 O +ATOM 212 CB SER A 27 -42.014 94.617 6.205 1.00 52.72 C +ATOM 213 OG SER A 27 -41.820 93.655 7.219 1.00 47.35 O +ATOM 214 N THR A 28 -43.364 96.788 7.933 1.00 57.37 N +ATOM 215 CA THR A 28 -44.082 97.222 9.136 1.00 58.75 C +ATOM 216 C THR A 28 -44.338 96.122 10.170 1.00 58.78 C +ATOM 217 O THR A 28 -44.855 96.390 11.259 1.00 58.59 O +ATOM 218 CB THR A 28 -45.416 97.919 8.790 1.00 59.32 C +ATOM 219 OG1 THR A 28 -46.138 97.135 7.830 1.00 56.49 O +ATOM 220 CG2 THR A 28 -45.152 99.326 8.248 1.00 59.62 C +ATOM 221 N THR A 29 -44.005 94.885 9.813 1.00 58.03 N +ATOM 222 CA THR A 29 -44.153 93.751 10.722 1.00 56.56 C +ATOM 223 C THR A 29 -42.852 93.608 11.528 1.00 54.06 C +ATOM 224 O THR A 29 -42.741 92.752 12.406 1.00 53.05 O +ATOM 225 CB THR A 29 -44.444 92.444 9.959 1.00 57.66 C +ATOM 226 OG1 THR A 29 -43.500 92.301 8.894 1.00 63.23 O +ATOM 227 CG2 THR A 29 -45.861 92.448 9.386 1.00 57.61 C +ATOM 228 N GLY A 30 -41.871 94.450 11.197 1.00 51.69 N +ATOM 229 CA GLY A 30 -40.594 94.458 11.890 1.00 47.72 C +ATOM 230 C GLY A 30 -39.476 93.581 11.354 1.00 45.26 C +ATOM 231 O GLY A 30 -38.506 93.330 12.069 1.00 44.79 O +ATOM 232 N VAL A 31 -39.590 93.122 10.111 1.00 42.62 N +ATOM 233 CA VAL A 31 -38.559 92.267 9.519 1.00 41.56 C +ATOM 234 C VAL A 31 -37.717 92.964 8.450 1.00 39.26 C +ATOM 235 O VAL A 31 -38.233 93.696 7.615 1.00 39.55 O +ATOM 236 CB VAL A 31 -39.156 90.919 8.974 1.00 42.05 C +ATOM 237 CG1 VAL A 31 -40.499 91.143 8.332 1.00 44.70 C +ATOM 238 CG2 VAL A 31 -38.218 90.275 7.963 1.00 43.15 C +ATOM 239 N LEU A 32 -36.408 92.746 8.505 1.00 38.18 N +ATOM 240 CA LEU A 32 -35.488 93.338 7.554 1.00 36.81 C +ATOM 241 C LEU A 32 -35.447 92.506 6.278 1.00 38.66 C +ATOM 242 O LEU A 32 -34.921 91.391 6.264 1.00 38.03 O +ATOM 243 CB LEU A 32 -34.098 93.421 8.161 1.00 34.53 C +ATOM 244 CG LEU A 32 -32.995 93.790 7.175 1.00 36.51 C +ATOM 245 CD1 LEU A 32 -33.199 95.198 6.679 1.00 39.81 C +ATOM 246 CD2 LEU A 32 -31.653 93.661 7.844 1.00 38.75 C +ATOM 247 N GLN A 33 -36.030 93.045 5.215 1.00 40.43 N +ATOM 248 CA GLN A 33 -36.054 92.364 3.931 1.00 40.98 C +ATOM 249 C GLN A 33 -34.910 92.924 3.109 1.00 41.02 C +ATOM 250 O GLN A 33 -35.037 93.998 2.517 1.00 39.99 O +ATOM 251 CB GLN A 33 -37.380 92.635 3.230 1.00 42.48 C +ATOM 252 CG GLN A 33 -38.592 92.490 4.135 1.00 44.37 C +ATOM 253 CD GLN A 33 -39.906 92.764 3.420 1.00 46.23 C +ATOM 254 OE1 GLN A 33 -40.948 92.221 3.788 1.00 47.24 O +ATOM 255 NE2 GLN A 33 -39.861 93.607 2.394 1.00 46.10 N +ATOM 256 N VAL A 34 -33.783 92.217 3.095 1.00 43.16 N +ATOM 257 CA VAL A 34 -32.621 92.689 2.343 1.00 47.55 C +ATOM 258 C VAL A 34 -32.926 92.666 0.857 1.00 49.30 C +ATOM 259 O VAL A 34 -32.329 93.394 0.075 1.00 49.90 O +ATOM 260 CB VAL A 34 -31.336 91.863 2.643 1.00 46.07 C +ATOM 261 CG1 VAL A 34 -31.136 91.719 4.134 1.00 45.79 C +ATOM 262 CG2 VAL A 34 -31.407 90.519 1.995 1.00 48.91 C +ATOM 263 N THR A 35 -33.901 91.844 0.496 1.00 53.65 N +ATOM 264 CA THR A 35 -34.344 91.690 -0.878 1.00 56.21 C +ATOM 265 C THR A 35 -35.765 92.229 -1.011 1.00 61.16 C +ATOM 266 O THR A 35 -36.605 92.006 -0.133 1.00 63.88 O +ATOM 267 CB THR A 35 -34.250 90.206 -1.290 1.00 54.17 C +ATOM 268 OG1 THR A 35 -33.138 90.052 -2.170 1.00 51.80 O +ATOM 269 CG2 THR A 35 -35.540 89.680 -1.944 1.00 51.40 C +ATOM 270 N LYS A 36 -36.018 92.957 -2.099 1.00 64.87 N +ATOM 271 CA LYS A 36 -37.330 93.543 -2.356 1.00 68.32 C +ATOM 272 C LYS A 36 -38.446 92.501 -2.459 1.00 69.66 C +ATOM 273 O LYS A 36 -38.360 91.541 -3.234 1.00 69.77 O +ATOM 274 CB LYS A 36 -37.297 94.389 -3.629 1.00 69.16 C +ATOM 275 CG LYS A 36 -38.556 95.210 -3.842 1.00 72.21 C +ATOM 276 CD LYS A 36 -38.445 96.112 -5.065 1.00 75.79 C +ATOM 277 CE LYS A 36 -39.564 97.159 -5.105 1.00 77.44 C +ATOM 278 NZ LYS A 36 -39.550 98.071 -3.916 1.00 78.05 N +ATOM 279 N VAL A 37 -39.487 92.695 -1.658 1.00 70.03 N +ATOM 280 CA VAL A 37 -40.623 91.791 -1.646 1.00 71.24 C +ATOM 281 C VAL A 37 -41.818 92.540 -2.233 1.00 73.29 C +ATOM 282 O VAL A 37 -42.468 93.317 -1.537 1.00 72.17 O +ATOM 283 CB VAL A 37 -40.937 91.319 -0.203 1.00 70.35 C +ATOM 284 CG1 VAL A 37 -41.994 90.247 -0.217 1.00 70.14 C +ATOM 285 CG2 VAL A 37 -39.681 90.795 0.471 1.00 70.08 C +ATOM 286 N SER A 38 -42.083 92.336 -3.522 1.00 77.13 N +ATOM 287 CA SER A 38 -43.201 93.011 -4.183 1.00 80.90 C +ATOM 288 C SER A 38 -43.977 92.208 -5.218 1.00 83.83 C +ATOM 289 O SER A 38 -43.517 91.174 -5.703 1.00 85.72 O +ATOM 290 CB SER A 38 -42.736 94.315 -4.816 1.00 80.32 C +ATOM 291 OG SER A 38 -42.466 95.266 -3.807 1.00 83.54 O +ATOM 292 N LYS A 39 -45.176 92.699 -5.528 1.00 86.06 N +ATOM 293 CA LYS A 39 -46.059 92.082 -6.509 1.00 86.30 C +ATOM 294 C LYS A 39 -46.349 93.122 -7.599 1.00 86.77 C +ATOM 295 O LYS A 39 -46.880 94.200 -7.316 1.00 86.07 O +ATOM 296 CB LYS A 39 -47.361 91.609 -5.849 1.00 84.64 C +ATOM 297 N PRO A 40 -45.927 92.839 -8.846 1.00 87.56 N +ATOM 298 CA PRO A 40 -45.205 91.615 -9.220 1.00 86.66 C +ATOM 299 C PRO A 40 -43.748 91.590 -8.748 1.00 85.14 C +ATOM 300 O PRO A 40 -43.180 92.615 -8.359 1.00 84.50 O +ATOM 301 CB PRO A 40 -45.309 91.610 -10.745 1.00 86.94 C +ATOM 302 CG PRO A 40 -45.278 93.066 -11.076 1.00 87.80 C +ATOM 303 CD PRO A 40 -46.209 93.665 -10.036 1.00 87.12 C +ATOM 304 N THR A 41 -43.170 90.396 -8.761 1.00 83.98 N +ATOM 305 CA THR A 41 -41.794 90.180 -8.337 1.00 82.83 C +ATOM 306 C THR A 41 -40.801 90.843 -9.306 1.00 83.05 C +ATOM 307 O THR A 41 -40.917 90.688 -10.526 1.00 83.28 O +ATOM 308 CB THR A 41 -41.512 88.660 -8.204 1.00 81.84 C +ATOM 309 OG1 THR A 41 -41.606 88.028 -9.487 1.00 81.71 O +ATOM 310 CG2 THR A 41 -42.537 88.015 -7.278 1.00 79.34 C +ATOM 311 N THR A 42 -39.836 91.586 -8.758 1.00 82.40 N +ATOM 312 CA THR A 42 -38.831 92.292 -9.566 1.00 80.76 C +ATOM 313 C THR A 42 -37.366 91.934 -9.231 1.00 79.76 C +ATOM 314 O THR A 42 -37.069 91.547 -8.100 1.00 80.43 O +ATOM 315 CB THR A 42 -39.032 93.838 -9.457 1.00 79.94 C +ATOM 316 OG1 THR A 42 -38.049 94.515 -10.250 1.00 80.63 O +ATOM 317 CG2 THR A 42 -38.926 94.306 -8.013 1.00 76.67 C +ATOM 318 N THR A 43 -36.470 92.053 -10.226 1.00 77.95 N +ATOM 319 CA THR A 43 -35.026 91.773 -10.070 1.00 73.63 C +ATOM 320 C THR A 43 -34.513 92.729 -8.969 1.00 70.08 C +ATOM 321 O THR A 43 -34.863 93.914 -8.960 1.00 68.87 O +ATOM 322 CB THR A 43 -34.268 91.937 -11.456 1.00 75.60 C +ATOM 323 OG1 THR A 43 -33.056 91.174 -11.453 1.00 76.40 O +ATOM 324 CG2 THR A 43 -33.937 93.403 -11.775 1.00 76.49 C +ATOM 325 N SER A 44 -33.714 92.224 -8.027 1.00 66.38 N +ATOM 326 CA SER A 44 -33.279 93.065 -6.904 1.00 61.84 C +ATOM 327 C SER A 44 -31.937 92.759 -6.228 1.00 58.62 C +ATOM 328 O SER A 44 -31.438 91.635 -6.281 1.00 58.09 O +ATOM 329 CB SER A 44 -34.393 93.041 -5.838 1.00 60.58 C +ATOM 330 OG SER A 44 -34.018 93.686 -4.638 1.00 58.72 O +ATOM 331 N ILE A 45 -31.383 93.785 -5.576 1.00 55.34 N +ATOM 332 CA ILE A 45 -30.120 93.713 -4.817 1.00 52.09 C +ATOM 333 C ILE A 45 -30.182 94.679 -3.625 1.00 50.03 C +ATOM 334 O ILE A 45 -30.566 95.846 -3.771 1.00 50.17 O +ATOM 335 CB ILE A 45 -28.879 94.091 -5.667 1.00 51.11 C +ATOM 336 CG1 ILE A 45 -28.666 93.070 -6.786 1.00 54.39 C +ATOM 337 CG2 ILE A 45 -27.636 94.138 -4.790 1.00 45.70 C +ATOM 338 CD1 ILE A 45 -27.555 93.433 -7.763 1.00 55.85 C +ATOM 339 N GLY A 46 -29.789 94.199 -2.449 1.00 46.73 N +ATOM 340 CA GLY A 46 -29.820 95.047 -1.270 1.00 42.72 C +ATOM 341 C GLY A 46 -28.811 94.667 -0.209 1.00 39.51 C +ATOM 342 O GLY A 46 -28.339 93.529 -0.170 1.00 38.06 O +ATOM 343 N ARG A 47 -28.446 95.643 0.619 1.00 38.16 N +ATOM 344 CA ARG A 47 -27.492 95.439 1.716 1.00 38.77 C +ATOM 345 C ARG A 47 -27.868 96.333 2.900 1.00 37.90 C +ATOM 346 O ARG A 47 -28.309 97.466 2.714 1.00 36.96 O +ATOM 347 CB ARG A 47 -26.050 95.771 1.290 1.00 38.94 C +ATOM 348 CG ARG A 47 -25.613 95.218 -0.059 1.00 38.40 C +ATOM 349 CD ARG A 47 -24.102 95.210 -0.205 1.00 37.25 C +ATOM 350 NE ARG A 47 -23.484 96.495 0.102 1.00 35.69 N +ATOM 351 CZ ARG A 47 -22.175 96.726 0.052 1.00 37.35 C +ATOM 352 NH1 ARG A 47 -21.328 95.762 -0.306 1.00 37.63 N +ATOM 353 NH2 ARG A 47 -21.704 97.912 0.403 1.00 35.57 N +ATOM 354 N ALA A 48 -27.721 95.810 4.114 1.00 36.15 N +ATOM 355 CA ALA A 48 -28.025 96.576 5.316 1.00 34.35 C +ATOM 356 C ALA A 48 -26.817 96.464 6.243 1.00 34.81 C +ATOM 357 O ALA A 48 -26.325 95.363 6.489 1.00 34.69 O +ATOM 358 CB ALA A 48 -29.269 96.039 5.981 1.00 29.60 C +ATOM 359 N LEU A 49 -26.306 97.603 6.708 1.00 34.57 N +ATOM 360 CA LEU A 49 -25.139 97.610 7.587 1.00 34.51 C +ATOM 361 C LEU A 49 -25.388 98.393 8.853 1.00 34.26 C +ATOM 362 O LEU A 49 -26.165 99.349 8.864 1.00 35.39 O +ATOM 363 CB LEU A 49 -23.945 98.257 6.896 1.00 33.89 C +ATOM 364 CG LEU A 49 -23.956 98.383 5.379 1.00 36.68 C +ATOM 365 CD1 LEU A 49 -22.820 99.286 4.939 1.00 39.44 C +ATOM 366 CD2 LEU A 49 -23.830 97.027 4.748 1.00 39.64 C +ATOM 367 N TYR A 50 -24.708 97.994 9.920 1.00 32.96 N +ATOM 368 CA TYR A 50 -24.826 98.703 11.181 1.00 33.39 C +ATOM 369 C TYR A 50 -24.118 100.038 10.930 1.00 33.34 C +ATOM 370 O TYR A 50 -23.014 100.065 10.375 1.00 35.82 O +ATOM 371 CB TYR A 50 -24.147 97.904 12.301 1.00 33.61 C +ATOM 372 CG TYR A 50 -24.131 98.605 13.639 1.00 32.23 C +ATOM 373 CD1 TYR A 50 -25.310 98.878 14.319 1.00 32.23 C +ATOM 374 CD2 TYR A 50 -22.938 99.044 14.196 1.00 33.66 C +ATOM 375 CE1 TYR A 50 -25.302 99.579 15.510 1.00 33.25 C +ATOM 376 CE2 TYR A 50 -22.919 99.745 15.390 1.00 34.45 C +ATOM 377 CZ TYR A 50 -24.103 100.014 16.038 1.00 33.83 C +ATOM 378 OH TYR A 50 -24.092 100.764 17.186 1.00 34.99 O +ATOM 379 N ALA A 51 -24.770 101.131 11.311 1.00 32.79 N +ATOM 380 CA ALA A 51 -24.255 102.483 11.100 1.00 35.51 C +ATOM 381 C ALA A 51 -22.823 102.805 11.534 1.00 39.66 C +ATOM 382 O ALA A 51 -22.099 103.489 10.808 1.00 44.50 O +ATOM 383 CB ALA A 51 -25.210 103.503 11.676 1.00 35.33 C +ATOM 384 N ALA A 52 -22.413 102.354 12.715 1.00 40.61 N +ATOM 385 CA ALA A 52 -21.054 102.625 13.185 1.00 40.24 C +ATOM 386 C ALA A 52 -20.046 101.589 12.675 1.00 41.61 C +ATOM 387 O ALA A 52 -20.355 100.396 12.585 1.00 43.66 O +ATOM 388 CB ALA A 52 -21.027 102.680 14.712 1.00 39.50 C +ATOM 389 N PRO A 53 -18.848 102.039 12.267 1.00 41.97 N +ATOM 390 CA PRO A 53 -17.810 101.100 11.823 1.00 41.46 C +ATOM 391 C PRO A 53 -17.256 100.368 13.041 1.00 40.78 C +ATOM 392 O PRO A 53 -17.420 100.826 14.169 1.00 41.05 O +ATOM 393 CB PRO A 53 -16.746 102.021 11.235 1.00 40.50 C +ATOM 394 CG PRO A 53 -17.533 103.215 10.799 1.00 42.20 C +ATOM 395 CD PRO A 53 -18.452 103.422 11.960 1.00 41.29 C +ATOM 396 N ILE A 54 -16.616 99.230 12.818 1.00 39.66 N +ATOM 397 CA ILE A 54 -16.037 98.467 13.911 1.00 39.77 C +ATOM 398 C ILE A 54 -14.529 98.371 13.712 1.00 40.69 C +ATOM 399 O ILE A 54 -14.063 98.178 12.588 1.00 40.92 O +ATOM 400 CB ILE A 54 -16.604 97.005 13.974 1.00 40.87 C +ATOM 401 CG1 ILE A 54 -18.042 96.976 14.489 1.00 41.12 C +ATOM 402 CG2 ILE A 54 -15.764 96.146 14.901 1.00 42.18 C +ATOM 403 CD1 ILE A 54 -19.082 97.176 13.439 1.00 46.55 C +ATOM 404 N GLN A 55 -13.764 98.547 14.786 1.00 41.27 N +ATOM 405 CA GLN A 55 -12.320 98.396 14.685 1.00 41.95 C +ATOM 406 C GLN A 55 -12.095 96.897 14.800 1.00 39.88 C +ATOM 407 O GLN A 55 -12.229 96.331 15.881 1.00 41.45 O +ATOM 408 CB GLN A 55 -11.600 99.123 15.816 1.00 45.82 C +ATOM 409 CG GLN A 55 -10.126 98.759 15.913 1.00 53.29 C +ATOM 410 CD GLN A 55 -9.259 99.887 16.442 1.00 57.79 C +ATOM 411 OE1 GLN A 55 -8.173 100.137 15.913 1.00 60.46 O +ATOM 412 NE2 GLN A 55 -9.728 100.572 17.492 1.00 60.28 N +ATOM 413 N ILE A 56 -11.795 96.250 13.683 1.00 37.26 N +ATOM 414 CA ILE A 56 -11.599 94.814 13.697 1.00 38.78 C +ATOM 415 C ILE A 56 -10.195 94.335 14.114 1.00 41.46 C +ATOM 416 O ILE A 56 -10.027 93.187 14.547 1.00 41.20 O +ATOM 417 CB ILE A 56 -12.062 94.204 12.369 1.00 38.14 C +ATOM 418 CG1 ILE A 56 -12.632 92.814 12.612 1.00 39.53 C +ATOM 419 CG2 ILE A 56 -10.952 94.183 11.355 1.00 38.23 C +ATOM 420 CD1 ILE A 56 -13.934 92.833 13.386 1.00 38.55 C +ATOM 421 N TRP A 57 -9.197 95.208 13.967 1.00 43.07 N +ATOM 422 CA TRP A 57 -7.812 94.924 14.370 1.00 45.80 C +ATOM 423 C TRP A 57 -7.074 96.249 14.566 1.00 48.66 C +ATOM 424 O TRP A 57 -7.488 97.277 14.024 1.00 48.66 O +ATOM 425 CB TRP A 57 -7.079 93.985 13.392 1.00 47.69 C +ATOM 426 CG TRP A 57 -6.818 94.523 12.003 1.00 51.98 C +ATOM 427 CD1 TRP A 57 -7.693 94.545 10.961 1.00 54.22 C +ATOM 428 CD2 TRP A 57 -5.598 95.104 11.519 1.00 54.52 C +ATOM 429 NE1 TRP A 57 -7.104 95.110 9.853 1.00 56.54 N +ATOM 430 CE2 TRP A 57 -5.821 95.468 10.163 1.00 56.63 C +ATOM 431 CE3 TRP A 57 -4.346 95.365 12.084 1.00 55.86 C +ATOM 432 CZ2 TRP A 57 -4.831 96.073 9.372 1.00 56.55 C +ATOM 433 CZ3 TRP A 57 -3.362 95.967 11.297 1.00 57.19 C +ATOM 434 CH2 TRP A 57 -3.616 96.316 9.954 1.00 56.93 C +ATOM 435 N ASP A 58 -6.004 96.233 15.359 1.00 52.24 N +ATOM 436 CA ASP A 58 -5.252 97.456 15.666 1.00 57.33 C +ATOM 437 C ASP A 58 -3.830 97.439 15.107 1.00 59.11 C +ATOM 438 O ASP A 58 -3.013 96.615 15.521 1.00 59.51 O +ATOM 439 CB ASP A 58 -5.205 97.646 17.196 1.00 60.24 C +ATOM 440 CG ASP A 58 -4.808 99.063 17.622 1.00 63.41 C +ATOM 441 OD1 ASP A 58 -4.603 99.937 16.744 1.00 66.19 O +ATOM 442 OD2 ASP A 58 -4.718 99.303 18.853 1.00 63.93 O +ATOM 443 N SER A 59 -3.526 98.372 14.199 1.00 60.39 N +ATOM 444 CA SER A 59 -2.188 98.458 13.599 1.00 61.42 C +ATOM 445 C SER A 59 -1.132 98.802 14.650 1.00 62.14 C +ATOM 446 O SER A 59 -0.005 98.313 14.591 1.00 61.78 O +ATOM 447 CB SER A 59 -2.161 99.490 12.458 1.00 61.32 C +ATOM 448 OG SER A 59 -2.480 100.794 12.920 1.00 61.07 O +ATOM 449 N ILE A 60 -1.531 99.611 15.630 1.00 62.92 N +ATOM 450 CA ILE A 60 -0.657 100.032 16.716 1.00 63.11 C +ATOM 451 C ILE A 60 -0.206 98.859 17.598 1.00 62.65 C +ATOM 452 O ILE A 60 0.973 98.764 17.929 1.00 62.98 O +ATOM 453 CB ILE A 60 -1.361 101.096 17.603 1.00 64.39 C +ATOM 454 CG1 ILE A 60 -1.755 102.309 16.752 1.00 65.03 C +ATOM 455 CG2 ILE A 60 -0.457 101.526 18.749 1.00 63.87 C +ATOM 456 CD1 ILE A 60 -2.628 103.328 17.475 1.00 66.71 C +ATOM 457 N THR A 61 -1.126 97.949 17.928 1.00 61.70 N +ATOM 458 CA THR A 61 -0.820 96.806 18.805 1.00 60.88 C +ATOM 459 C THR A 61 -0.764 95.408 18.183 1.00 60.00 C +ATOM 460 O THR A 61 -0.359 94.454 18.852 1.00 58.34 O +ATOM 461 CB THR A 61 -1.814 96.732 19.986 1.00 61.02 C +ATOM 462 OG1 THR A 61 -3.148 96.565 19.481 1.00 63.43 O +ATOM 463 CG2 THR A 61 -1.751 98.003 20.829 1.00 60.84 C +ATOM 464 N GLY A 62 -1.214 95.273 16.939 1.00 60.51 N +ATOM 465 CA GLY A 62 -1.206 93.973 16.281 1.00 59.51 C +ATOM 466 C GLY A 62 -2.323 93.024 16.706 1.00 60.22 C +ATOM 467 O GLY A 62 -2.464 91.952 16.114 1.00 60.11 O +ATOM 468 N LYS A 63 -3.102 93.407 17.727 1.00 59.67 N +ATOM 469 CA LYS A 63 -4.226 92.609 18.252 1.00 56.20 C +ATOM 470 C LYS A 63 -5.371 92.474 17.249 1.00 52.55 C +ATOM 471 O LYS A 63 -5.742 93.436 16.576 1.00 52.20 O +ATOM 472 CB LYS A 63 -4.803 93.266 19.513 1.00 60.16 C +ATOM 473 CG LYS A 63 -3.873 93.347 20.719 1.00 64.62 C +ATOM 474 CD LYS A 63 -4.356 94.417 21.731 1.00 67.46 C +ATOM 475 CE LYS A 63 -5.705 94.085 22.381 1.00 67.32 C +ATOM 476 NZ LYS A 63 -6.134 95.133 23.359 1.00 65.50 N +ATOM 477 N VAL A 64 -5.947 91.284 17.174 1.00 48.52 N +ATOM 478 CA VAL A 64 -7.070 91.049 16.277 1.00 47.68 C +ATOM 479 C VAL A 64 -8.307 90.783 17.128 1.00 44.97 C +ATOM 480 O VAL A 64 -8.234 90.089 18.142 1.00 46.36 O +ATOM 481 CB VAL A 64 -6.812 89.850 15.339 1.00 49.15 C +ATOM 482 CG1 VAL A 64 -8.000 89.638 14.402 1.00 48.72 C +ATOM 483 CG2 VAL A 64 -5.559 90.098 14.522 1.00 50.06 C +ATOM 484 N ALA A 65 -9.437 91.351 16.722 1.00 40.89 N +ATOM 485 CA ALA A 65 -10.677 91.181 17.464 1.00 38.40 C +ATOM 486 C ALA A 65 -11.335 89.829 17.245 1.00 36.73 C +ATOM 487 O ALA A 65 -11.167 89.213 16.202 1.00 37.85 O +ATOM 488 CB ALA A 65 -11.649 92.289 17.102 1.00 37.62 C +ATOM 489 N SER A 66 -12.024 89.336 18.267 1.00 35.68 N +ATOM 490 CA SER A 66 -12.756 88.078 18.157 1.00 34.08 C +ATOM 491 C SER A 66 -14.200 88.522 18.207 1.00 34.21 C +ATOM 492 O SER A 66 -14.572 89.345 19.048 1.00 34.85 O +ATOM 493 CB SER A 66 -12.482 87.142 19.336 1.00 29.06 C +ATOM 494 OG SER A 66 -11.152 86.679 19.328 1.00 30.82 O +ATOM 495 N PHE A 67 -15.007 88.048 17.272 1.00 33.36 N +ATOM 496 CA PHE A 67 -16.401 88.440 17.290 1.00 33.72 C +ATOM 497 C PHE A 67 -17.317 87.233 17.251 1.00 32.87 C +ATOM 498 O PHE A 67 -16.870 86.097 17.093 1.00 31.31 O +ATOM 499 CB PHE A 67 -16.730 89.423 16.152 1.00 34.28 C +ATOM 500 CG PHE A 67 -16.673 88.817 14.783 1.00 33.82 C +ATOM 501 CD1 PHE A 67 -17.790 88.196 14.238 1.00 34.26 C +ATOM 502 CD2 PHE A 67 -15.500 88.851 14.047 1.00 33.00 C +ATOM 503 CE1 PHE A 67 -17.741 87.615 12.979 1.00 34.50 C +ATOM 504 CE2 PHE A 67 -15.437 88.278 12.792 1.00 35.17 C +ATOM 505 CZ PHE A 67 -16.564 87.654 12.254 1.00 36.09 C +ATOM 506 N ALA A 68 -18.600 87.502 17.446 1.00 33.14 N +ATOM 507 CA ALA A 68 -19.635 86.483 17.432 1.00 31.65 C +ATOM 508 C ALA A 68 -20.916 87.185 17.040 1.00 30.72 C +ATOM 509 O ALA A 68 -21.187 88.305 17.487 1.00 31.63 O +ATOM 510 CB ALA A 68 -19.788 85.848 18.804 1.00 26.20 C +ATOM 511 N THR A 69 -21.661 86.558 16.141 1.00 29.41 N +ATOM 512 CA THR A 69 -22.917 87.119 15.704 1.00 28.49 C +ATOM 513 C THR A 69 -23.941 86.019 15.622 1.00 29.54 C +ATOM 514 O THR A 69 -23.624 84.865 15.306 1.00 29.28 O +ATOM 515 CB THR A 69 -22.820 87.833 14.345 1.00 25.95 C +ATOM 516 OG1 THR A 69 -24.047 88.529 14.097 1.00 26.86 O +ATOM 517 CG2 THR A 69 -22.589 86.838 13.221 1.00 23.35 C +ATOM 518 N SER A 70 -25.167 86.377 15.970 1.00 31.78 N +ATOM 519 CA SER A 70 -26.259 85.436 15.932 1.00 32.66 C +ATOM 520 C SER A 70 -27.411 86.116 15.249 1.00 32.50 C +ATOM 521 O SER A 70 -27.637 87.310 15.444 1.00 34.68 O +ATOM 522 CB SER A 70 -26.664 85.045 17.344 1.00 32.53 C +ATOM 523 OG SER A 70 -27.707 84.093 17.294 1.00 38.51 O +ATOM 524 N PHE A 71 -28.106 85.376 14.403 1.00 32.40 N +ATOM 525 CA PHE A 71 -29.251 85.929 13.713 1.00 33.97 C +ATOM 526 C PHE A 71 -30.142 84.826 13.211 1.00 33.13 C +ATOM 527 O PHE A 71 -29.741 83.666 13.173 1.00 32.11 O +ATOM 528 CB PHE A 71 -28.833 86.883 12.574 1.00 36.58 C +ATOM 529 CG PHE A 71 -27.951 86.258 11.526 1.00 37.69 C +ATOM 530 CD1 PHE A 71 -28.505 85.579 10.437 1.00 39.36 C +ATOM 531 CD2 PHE A 71 -26.568 86.362 11.612 1.00 38.64 C +ATOM 532 CE1 PHE A 71 -27.692 85.005 9.446 1.00 38.25 C +ATOM 533 CE2 PHE A 71 -25.742 85.792 10.625 1.00 39.78 C +ATOM 534 CZ PHE A 71 -26.309 85.113 9.540 1.00 38.18 C +ATOM 535 N SER A 72 -31.373 85.198 12.875 1.00 35.07 N +ATOM 536 CA SER A 72 -32.373 84.266 12.366 1.00 34.62 C +ATOM 537 C SER A 72 -32.931 84.809 11.062 1.00 32.90 C +ATOM 538 O SER A 72 -33.261 85.992 10.963 1.00 31.21 O +ATOM 539 CB SER A 72 -33.505 84.104 13.380 1.00 33.73 C +ATOM 540 OG SER A 72 -32.989 83.726 14.644 1.00 37.14 O +ATOM 541 N PHE A 73 -33.017 83.954 10.053 1.00 32.39 N +ATOM 542 CA PHE A 73 -33.541 84.401 8.775 1.00 32.87 C +ATOM 543 C PHE A 73 -34.473 83.393 8.155 1.00 32.30 C +ATOM 544 O PHE A 73 -34.571 82.251 8.602 1.00 30.53 O +ATOM 545 CB PHE A 73 -32.412 84.743 7.799 1.00 32.74 C +ATOM 546 CG PHE A 73 -31.631 83.549 7.313 1.00 32.95 C +ATOM 547 CD1 PHE A 73 -30.555 83.052 8.045 1.00 32.28 C +ATOM 548 CD2 PHE A 73 -31.949 82.944 6.101 1.00 33.64 C +ATOM 549 CE1 PHE A 73 -29.806 81.975 7.567 1.00 33.51 C +ATOM 550 CE2 PHE A 73 -31.205 81.862 5.615 1.00 34.93 C +ATOM 551 CZ PHE A 73 -30.133 81.377 6.350 1.00 33.21 C +ATOM 552 N VAL A 74 -35.161 83.847 7.117 1.00 34.86 N +ATOM 553 CA VAL A 74 -36.114 83.036 6.380 1.00 35.93 C +ATOM 554 C VAL A 74 -35.933 83.298 4.906 1.00 37.58 C +ATOM 555 O VAL A 74 -35.733 84.445 4.497 1.00 36.87 O +ATOM 556 CB VAL A 74 -37.559 83.451 6.679 1.00 33.80 C +ATOM 557 CG1 VAL A 74 -38.520 82.539 5.949 1.00 32.41 C +ATOM 558 CG2 VAL A 74 -37.823 83.443 8.162 1.00 35.69 C +ATOM 559 N VAL A 75 -35.998 82.230 4.116 1.00 41.14 N +ATOM 560 CA VAL A 75 -35.908 82.334 2.663 1.00 44.35 C +ATOM 561 C VAL A 75 -37.094 81.554 2.119 1.00 46.33 C +ATOM 562 O VAL A 75 -37.114 80.325 2.188 1.00 46.57 O +ATOM 563 CB VAL A 75 -34.581 81.768 2.102 1.00 44.04 C +ATOM 564 CG1 VAL A 75 -34.675 81.592 0.600 1.00 43.13 C +ATOM 565 CG2 VAL A 75 -33.435 82.714 2.423 1.00 43.03 C +ATOM 566 N LYS A 76 -38.107 82.285 1.657 1.00 48.34 N +ATOM 567 CA LYS A 76 -39.323 81.680 1.130 1.00 51.33 C +ATOM 568 C LYS A 76 -39.459 81.838 -0.377 1.00 53.11 C +ATOM 569 O LYS A 76 -39.462 82.954 -0.896 1.00 53.07 O +ATOM 570 CB LYS A 76 -40.557 82.261 1.829 1.00 50.73 C +ATOM 571 CG LYS A 76 -41.867 81.663 1.354 1.00 51.96 C +ATOM 572 CD LYS A 76 -43.035 82.183 2.158 1.00 54.62 C +ATOM 573 CE LYS A 76 -44.345 81.533 1.717 1.00 59.94 C +ATOM 574 NZ LYS A 76 -45.522 81.934 2.563 1.00 60.11 N +ATOM 575 N ALA A 77 -39.578 80.705 -1.066 1.00 54.75 N +ATOM 576 CA ALA A 77 -39.729 80.679 -2.513 1.00 56.99 C +ATOM 577 C ALA A 77 -41.162 80.307 -2.864 1.00 60.09 C +ATOM 578 O ALA A 77 -41.773 79.475 -2.184 1.00 60.49 O +ATOM 579 CB ALA A 77 -38.767 79.675 -3.124 1.00 53.70 C +ATOM 580 N ASP A 78 -41.707 80.957 -3.894 1.00 63.29 N +ATOM 581 CA ASP A 78 -43.067 80.676 -4.349 1.00 64.77 C +ATOM 582 C ASP A 78 -43.050 79.278 -4.960 1.00 66.13 C +ATOM 583 O ASP A 78 -43.909 78.446 -4.664 1.00 64.61 O +ATOM 584 CB ASP A 78 -43.504 81.705 -5.388 1.00 66.46 C +ATOM 585 CG ASP A 78 -43.506 83.115 -4.843 1.00 68.96 C +ATOM 586 OD1 ASP A 78 -43.915 83.304 -3.677 1.00 70.50 O +ATOM 587 OD2 ASP A 78 -43.099 84.036 -5.583 1.00 70.11 O +ATOM 588 N LYS A 79 -42.052 79.033 -5.805 1.00 67.62 N +ATOM 589 CA LYS A 79 -41.862 77.733 -6.440 1.00 68.91 C +ATOM 590 C LYS A 79 -41.126 76.839 -5.446 1.00 68.72 C +ATOM 591 O LYS A 79 -41.108 77.107 -4.239 1.00 69.34 O +ATOM 592 CB LYS A 79 -41.019 77.852 -7.725 1.00 71.41 C +ATOM 593 CG LYS A 79 -41.798 78.079 -9.018 1.00 72.56 C +ATOM 594 CD LYS A 79 -42.441 79.448 -9.052 1.00 77.30 C +ATOM 595 CE LYS A 79 -43.062 79.735 -10.410 1.00 79.50 C +ATOM 596 NZ LYS A 79 -43.819 81.027 -10.430 1.00 80.59 N +ATOM 597 N SER A 80 -40.514 75.776 -5.963 1.00 67.98 N +ATOM 598 CA SER A 80 -39.764 74.840 -5.135 1.00 66.36 C +ATOM 599 C SER A 80 -38.320 75.292 -5.038 1.00 66.12 C +ATOM 600 O SER A 80 -37.621 74.947 -4.091 1.00 66.65 O +ATOM 601 CB SER A 80 -39.825 73.434 -5.726 1.00 65.12 C +ATOM 602 OG SER A 80 -39.270 73.407 -7.028 1.00 63.56 O +ATOM 603 N ASP A 81 -37.881 76.059 -6.032 1.00 66.39 N +ATOM 604 CA ASP A 81 -36.519 76.575 -6.080 1.00 65.58 C +ATOM 605 C ASP A 81 -36.535 78.101 -6.046 1.00 63.91 C +ATOM 606 O ASP A 81 -37.562 78.728 -6.327 1.00 64.82 O +ATOM 607 CB ASP A 81 -35.812 76.077 -7.343 1.00 68.26 C +ATOM 608 CG ASP A 81 -34.472 75.442 -7.042 1.00 71.88 C +ATOM 609 OD1 ASP A 81 -34.462 74.253 -6.647 1.00 72.41 O +ATOM 610 OD2 ASP A 81 -33.434 76.133 -7.189 1.00 74.20 O +ATOM 611 N GLY A 82 -35.398 78.697 -5.695 1.00 61.29 N +ATOM 612 CA GLY A 82 -35.318 80.146 -5.627 1.00 57.20 C +ATOM 613 C GLY A 82 -33.927 80.709 -5.827 1.00 54.90 C +ATOM 614 O GLY A 82 -32.950 79.965 -5.870 1.00 56.05 O +ATOM 615 N VAL A 83 -33.845 82.030 -5.955 1.00 52.89 N +ATOM 616 CA VAL A 83 -32.576 82.736 -6.162 1.00 51.36 C +ATOM 617 C VAL A 83 -32.563 84.072 -5.402 1.00 50.91 C +ATOM 618 O VAL A 83 -33.619 84.635 -5.136 1.00 52.68 O +ATOM 619 CB VAL A 83 -32.325 83.013 -7.676 1.00 51.22 C +ATOM 620 CG1 VAL A 83 -32.338 81.707 -8.471 1.00 49.96 C +ATOM 621 CG2 VAL A 83 -33.344 84.004 -8.228 1.00 50.00 C +ATOM 622 N ASP A 84 -31.389 84.604 -5.068 1.00 50.77 N +ATOM 623 CA ASP A 84 -30.087 84.012 -5.378 1.00 50.56 C +ATOM 624 C ASP A 84 -29.328 83.590 -4.140 1.00 49.30 C +ATOM 625 O ASP A 84 -28.400 82.772 -4.219 1.00 47.75 O +ATOM 626 CB ASP A 84 -29.206 85.018 -6.118 1.00 52.43 C +ATOM 627 CG ASP A 84 -29.305 84.890 -7.609 1.00 54.93 C +ATOM 628 OD1 ASP A 84 -28.720 83.932 -8.160 1.00 55.68 O +ATOM 629 OD2 ASP A 84 -29.960 85.753 -8.226 1.00 56.45 O +ATOM 630 N GLY A 85 -29.667 84.223 -3.020 1.00 47.50 N +ATOM 631 CA GLY A 85 -29.000 83.927 -1.772 1.00 45.64 C +ATOM 632 C GLY A 85 -28.875 85.111 -0.836 1.00 44.34 C +ATOM 633 O GLY A 85 -29.168 86.261 -1.183 1.00 42.65 O +ATOM 634 N LEU A 86 -28.386 84.807 0.358 1.00 43.56 N +ATOM 635 CA LEU A 86 -28.206 85.786 1.420 1.00 40.96 C +ATOM 636 C LEU A 86 -26.752 85.746 1.874 1.00 38.54 C +ATOM 637 O LEU A 86 -26.087 84.723 1.724 1.00 38.18 O +ATOM 638 CB LEU A 86 -29.098 85.382 2.589 1.00 42.88 C +ATOM 639 CG LEU A 86 -29.103 86.307 3.792 1.00 43.72 C +ATOM 640 CD1 LEU A 86 -29.831 87.574 3.399 1.00 45.15 C +ATOM 641 CD2 LEU A 86 -29.780 85.630 4.959 1.00 42.97 C +ATOM 642 N ALA A 87 -26.268 86.832 2.466 1.00 36.64 N +ATOM 643 CA ALA A 87 -24.884 86.865 2.935 1.00 35.22 C +ATOM 644 C ALA A 87 -24.635 87.789 4.108 1.00 34.46 C +ATOM 645 O ALA A 87 -25.192 88.884 4.197 1.00 32.89 O +ATOM 646 CB ALA A 87 -23.947 87.239 1.794 1.00 31.54 C +ATOM 647 N PHE A 88 -23.840 87.306 5.051 1.00 35.48 N +ATOM 648 CA PHE A 88 -23.450 88.131 6.184 1.00 34.98 C +ATOM 649 C PHE A 88 -22.032 88.530 5.823 1.00 33.37 C +ATOM 650 O PHE A 88 -21.235 87.682 5.421 1.00 32.26 O +ATOM 651 CB PHE A 88 -23.444 87.351 7.483 1.00 35.74 C +ATOM 652 CG PHE A 88 -22.783 88.087 8.594 1.00 36.08 C +ATOM 653 CD1 PHE A 88 -23.426 89.150 9.219 1.00 34.35 C +ATOM 654 CD2 PHE A 88 -21.488 87.755 8.982 1.00 36.03 C +ATOM 655 CE1 PHE A 88 -22.783 89.878 10.211 1.00 35.31 C +ATOM 656 CE2 PHE A 88 -20.836 88.475 9.971 1.00 33.75 C +ATOM 657 CZ PHE A 88 -21.483 89.538 10.589 1.00 34.86 C +ATOM 658 N PHE A 89 -21.688 89.795 6.009 1.00 32.89 N +ATOM 659 CA PHE A 89 -20.357 90.216 5.601 1.00 34.40 C +ATOM 660 C PHE A 89 -19.671 91.336 6.379 1.00 35.55 C +ATOM 661 O PHE A 89 -20.313 92.156 7.060 1.00 33.69 O +ATOM 662 CB PHE A 89 -20.413 90.647 4.131 1.00 33.59 C +ATOM 663 CG PHE A 89 -21.132 91.948 3.920 1.00 32.76 C +ATOM 664 CD1 PHE A 89 -22.513 91.984 3.831 1.00 32.84 C +ATOM 665 CD2 PHE A 89 -20.427 93.151 3.875 1.00 33.72 C +ATOM 666 CE1 PHE A 89 -23.181 93.202 3.709 1.00 35.25 C +ATOM 667 CE2 PHE A 89 -21.086 94.367 3.753 1.00 32.54 C +ATOM 668 CZ PHE A 89 -22.460 94.392 3.671 1.00 33.82 C +ATOM 669 N LEU A 90 -18.351 91.378 6.195 1.00 36.16 N +ATOM 670 CA LEU A 90 -17.487 92.402 6.764 1.00 35.44 C +ATOM 671 C LEU A 90 -16.810 93.032 5.568 1.00 36.14 C +ATOM 672 O LEU A 90 -16.201 92.339 4.748 1.00 35.00 O +ATOM 673 CB LEU A 90 -16.421 91.811 7.663 1.00 34.00 C +ATOM 674 CG LEU A 90 -16.948 91.268 8.974 1.00 36.22 C +ATOM 675 CD1 LEU A 90 -17.264 89.788 8.826 1.00 37.33 C +ATOM 676 CD2 LEU A 90 -15.899 91.490 10.040 1.00 37.82 C +ATOM 677 N ALA A 91 -16.952 94.346 5.458 1.00 37.10 N +ATOM 678 CA ALA A 91 -16.368 95.098 4.362 1.00 35.61 C +ATOM 679 C ALA A 91 -15.742 96.363 4.924 1.00 35.65 C +ATOM 680 O ALA A 91 -15.947 96.703 6.088 1.00 35.31 O +ATOM 681 CB ALA A 91 -17.448 95.445 3.353 1.00 36.29 C +ATOM 682 N PRO A 92 -14.939 97.064 4.118 1.00 37.21 N +ATOM 683 CA PRO A 92 -14.325 98.295 4.602 1.00 38.99 C +ATOM 684 C PRO A 92 -15.403 99.247 5.079 1.00 39.96 C +ATOM 685 O PRO A 92 -16.515 99.225 4.560 1.00 40.23 O +ATOM 686 CB PRO A 92 -13.614 98.818 3.359 1.00 37.38 C +ATOM 687 CG PRO A 92 -13.165 97.551 2.703 1.00 37.29 C +ATOM 688 CD PRO A 92 -14.422 96.722 2.779 1.00 38.23 C +ATOM 689 N ALA A 93 -15.072 100.047 6.091 1.00 42.63 N +ATOM 690 CA ALA A 93 -16.000 101.013 6.669 1.00 45.01 C +ATOM 691 C ALA A 93 -16.767 101.813 5.614 1.00 47.34 C +ATOM 692 O ALA A 93 -16.175 102.431 4.731 1.00 47.04 O +ATOM 693 CB ALA A 93 -15.263 101.945 7.612 1.00 42.84 C +ATOM 694 N ASN A 94 -18.092 101.745 5.694 1.00 50.77 N +ATOM 695 CA ASN A 94 -18.990 102.441 4.779 1.00 54.55 C +ATOM 696 C ASN A 94 -18.784 102.082 3.308 1.00 55.08 C +ATOM 697 O ASN A 94 -18.739 102.953 2.445 1.00 55.08 O +ATOM 698 CB ASN A 94 -18.921 103.957 5.001 1.00 58.17 C +ATOM 699 CG ASN A 94 -19.236 104.352 6.446 1.00 63.83 C +ATOM 700 OD1 ASN A 94 -19.951 103.641 7.167 1.00 68.00 O +ATOM 701 ND2 ASN A 94 -18.692 105.482 6.876 1.00 64.52 N +ATOM 702 N SER A 95 -18.663 100.787 3.041 1.00 55.06 N +ATOM 703 CA SER A 95 -18.495 100.274 1.690 1.00 56.54 C +ATOM 704 C SER A 95 -19.769 100.531 0.886 1.00 58.14 C +ATOM 705 O SER A 95 -20.875 100.456 1.416 1.00 59.13 O +ATOM 706 CB SER A 95 -18.211 98.764 1.743 1.00 57.27 C +ATOM 707 OG SER A 95 -18.361 98.132 0.477 1.00 59.35 O +ATOM 708 N GLN A 96 -19.608 100.863 -0.386 1.00 58.34 N +ATOM 709 CA GLN A 96 -20.747 101.101 -1.258 1.00 58.55 C +ATOM 710 C GLN A 96 -20.933 99.871 -2.117 1.00 58.14 C +ATOM 711 O GLN A 96 -20.009 99.069 -2.264 1.00 59.40 O +ATOM 712 CB GLN A 96 -20.477 102.299 -2.157 1.00 63.99 C +ATOM 713 CG GLN A 96 -20.304 103.595 -1.405 1.00 69.83 C +ATOM 714 CD GLN A 96 -21.557 103.995 -0.651 1.00 72.27 C +ATOM 715 OE1 GLN A 96 -22.550 103.261 -0.630 1.00 73.23 O +ATOM 716 NE2 GLN A 96 -21.519 105.169 -0.031 1.00 74.53 N +ATOM 717 N ILE A 97 -22.123 99.700 -2.676 1.00 57.23 N +ATOM 718 CA ILE A 97 -22.355 98.546 -3.533 1.00 56.46 C +ATOM 719 C ILE A 97 -21.485 98.699 -4.780 1.00 58.24 C +ATOM 720 O ILE A 97 -21.630 99.665 -5.531 1.00 58.53 O +ATOM 721 CB ILE A 97 -23.838 98.418 -3.940 1.00 53.33 C +ATOM 722 CG1 ILE A 97 -24.695 98.151 -2.702 1.00 52.50 C +ATOM 723 CG2 ILE A 97 -24.014 97.295 -4.951 1.00 50.61 C +ATOM 724 CD1 ILE A 97 -26.152 97.943 -3.001 1.00 48.88 C +ATOM 725 N PRO A 98 -20.535 97.766 -4.988 1.00 59.74 N +ATOM 726 CA PRO A 98 -19.627 97.766 -6.135 1.00 60.01 C +ATOM 727 C PRO A 98 -20.374 98.012 -7.436 1.00 61.60 C +ATOM 728 O PRO A 98 -21.427 97.419 -7.684 1.00 62.09 O +ATOM 729 CB PRO A 98 -19.046 96.355 -6.104 1.00 59.47 C +ATOM 730 CG PRO A 98 -18.975 96.072 -4.656 1.00 61.66 C +ATOM 731 CD PRO A 98 -20.312 96.571 -4.154 1.00 62.09 C +ATOM 732 N SER A 99 -19.833 98.908 -8.250 1.00 63.27 N +ATOM 733 CA SER A 99 -20.434 99.246 -9.530 1.00 63.37 C +ATOM 734 C SER A 99 -20.529 98.016 -10.428 1.00 61.90 C +ATOM 735 O SER A 99 -19.595 97.206 -10.497 1.00 60.29 O +ATOM 736 CB SER A 99 -19.608 100.329 -10.219 1.00 65.82 C +ATOM 737 OG SER A 99 -20.158 100.643 -11.487 1.00 70.81 O +ATOM 738 N GLY A 100 -21.674 97.879 -11.094 1.00 60.15 N +ATOM 739 CA GLY A 100 -21.892 96.755 -11.983 1.00 58.69 C +ATOM 740 C GLY A 100 -21.869 95.417 -11.273 1.00 57.92 C +ATOM 741 O GLY A 100 -21.174 94.489 -11.688 1.00 55.31 O +ATOM 742 N SER A 101 -22.607 95.331 -10.174 1.00 59.14 N +ATOM 743 CA SER A 101 -22.679 94.097 -9.408 1.00 59.92 C +ATOM 744 C SER A 101 -23.860 93.286 -9.938 1.00 60.54 C +ATOM 745 O SER A 101 -24.500 93.684 -10.914 1.00 61.70 O +ATOM 746 CB SER A 101 -22.857 94.404 -7.921 1.00 57.34 C +ATOM 747 OG SER A 101 -22.434 93.309 -7.131 1.00 56.64 O +ATOM 748 N SER A 102 -24.128 92.143 -9.320 1.00 60.39 N +ATOM 749 CA SER A 102 -25.234 91.297 -9.746 1.00 60.79 C +ATOM 750 C SER A 102 -25.698 90.446 -8.582 1.00 60.95 C +ATOM 751 O SER A 102 -24.953 90.228 -7.624 1.00 60.95 O +ATOM 752 CB SER A 102 -24.815 90.396 -10.911 1.00 60.83 C +ATOM 753 OG SER A 102 -23.805 89.484 -10.513 1.00 60.87 O +ATOM 754 N ALA A 103 -26.928 89.952 -8.683 1.00 59.86 N +ATOM 755 CA ALA A 103 -27.515 89.115 -7.650 1.00 57.60 C +ATOM 756 C ALA A 103 -26.608 87.954 -7.227 1.00 56.74 C +ATOM 757 O ALA A 103 -26.502 87.652 -6.043 1.00 58.36 O +ATOM 758 CB ALA A 103 -28.841 88.596 -8.124 1.00 58.91 C +ATOM 759 N GLY A 104 -25.942 87.319 -8.189 1.00 54.75 N +ATOM 760 CA GLY A 104 -25.065 86.209 -7.870 1.00 51.34 C +ATOM 761 C GLY A 104 -23.829 86.598 -7.079 1.00 49.65 C +ATOM 762 O GLY A 104 -23.123 85.726 -6.569 1.00 50.03 O +ATOM 763 N MET A 105 -23.546 87.897 -6.999 1.00 48.41 N +ATOM 764 CA MET A 105 -22.383 88.397 -6.259 1.00 48.51 C +ATOM 765 C MET A 105 -22.836 89.132 -4.986 1.00 46.42 C +ATOM 766 O MET A 105 -22.075 89.866 -4.353 1.00 45.03 O +ATOM 767 CB MET A 105 -21.509 89.284 -7.169 1.00 49.29 C +ATOM 768 CG MET A 105 -21.072 88.566 -8.461 1.00 50.78 C +ATOM 769 SD MET A 105 -20.025 89.502 -9.607 1.00 52.10 S +ATOM 770 CE MET A 105 -21.119 90.874 -10.095 1.00 54.17 C +ATOM 771 N PHE A 106 -24.101 88.903 -4.638 1.00 44.77 N +ATOM 772 CA PHE A 106 -24.763 89.458 -3.463 1.00 42.42 C +ATOM 773 C PHE A 106 -24.480 90.919 -3.170 1.00 43.22 C +ATOM 774 O PHE A 106 -24.572 91.342 -2.024 1.00 46.41 O +ATOM 775 CB PHE A 106 -24.437 88.602 -2.249 1.00 40.98 C +ATOM 776 CG PHE A 106 -24.580 87.135 -2.502 1.00 41.80 C +ATOM 777 CD1 PHE A 106 -25.834 86.564 -2.681 1.00 43.91 C +ATOM 778 CD2 PHE A 106 -23.461 86.320 -2.579 1.00 42.52 C +ATOM 779 CE1 PHE A 106 -25.969 85.197 -2.933 1.00 45.04 C +ATOM 780 CE2 PHE A 106 -23.583 84.955 -2.829 1.00 43.43 C +ATOM 781 CZ PHE A 106 -24.838 84.392 -3.006 1.00 44.29 C +ATOM 782 N GLY A 107 -24.149 91.684 -4.203 1.00 43.11 N +ATOM 783 CA GLY A 107 -23.857 93.096 -4.035 1.00 43.69 C +ATOM 784 C GLY A 107 -22.539 93.364 -3.336 1.00 44.64 C +ATOM 785 O GLY A 107 -22.320 94.457 -2.798 1.00 45.54 O +ATOM 786 N LEU A 108 -21.648 92.377 -3.363 1.00 45.28 N +ATOM 787 CA LEU A 108 -20.353 92.502 -2.700 1.00 47.23 C +ATOM 788 C LEU A 108 -19.179 92.507 -3.677 1.00 49.12 C +ATOM 789 O LEU A 108 -18.107 93.020 -3.362 1.00 49.23 O +ATOM 790 CB LEU A 108 -20.175 91.365 -1.684 1.00 44.54 C +ATOM 791 CG LEU A 108 -21.304 91.077 -0.685 1.00 40.61 C +ATOM 792 CD1 LEU A 108 -20.977 89.822 0.091 1.00 36.10 C +ATOM 793 CD2 LEU A 108 -21.522 92.262 0.245 1.00 39.24 C +ATOM 794 N PHE A 109 -19.384 91.956 -4.869 1.00 53.16 N +ATOM 795 CA PHE A 109 -18.313 91.898 -5.858 1.00 55.32 C +ATOM 796 C PHE A 109 -18.644 92.493 -7.229 1.00 58.21 C +ATOM 797 O PHE A 109 -19.774 92.393 -7.715 1.00 57.91 O +ATOM 798 CB PHE A 109 -17.834 90.457 -6.021 1.00 53.63 C +ATOM 799 CG PHE A 109 -17.351 89.840 -4.750 1.00 52.26 C +ATOM 800 CD1 PHE A 109 -16.082 90.127 -4.262 1.00 53.34 C +ATOM 801 CD2 PHE A 109 -18.170 88.983 -4.029 1.00 51.65 C +ATOM 802 CE1 PHE A 109 -15.634 89.568 -3.062 1.00 52.81 C +ATOM 803 CE2 PHE A 109 -17.735 88.419 -2.831 1.00 52.62 C +ATOM 804 CZ PHE A 109 -16.463 88.713 -2.345 1.00 52.59 C +ATOM 805 N OLS A 110 -17.628 93.106 -7.836 1.00 61.49 N +ATOM 806 CA OLS A 110 -17.708 93.738 -9.153 1.00 63.49 C +ATOM 807 C OLS A 110 -17.475 92.667 -10.246 1.00 64.66 C +ATOM 808 O OLS A 110 -17.976 92.801 -11.361 1.00 65.12 O +ATOM 809 CB OLS A 110 -16.634 94.835 -9.242 1.00 64.06 C +ATOM 810 OG OLS A 110 -17.068 96.016 -9.918 1.00 70.05 O +ATOM 811 N SER A 111 -16.724 91.608 -9.915 1.00 66.84 N +ATOM 812 CA SER A 111 -16.414 90.499 -10.849 1.00 68.41 C +ATOM 813 C SER A 111 -16.130 89.178 -10.112 1.00 69.18 C +ATOM 814 O SER A 111 -16.205 89.115 -8.883 1.00 70.32 O +ATOM 815 CB SER A 111 -15.201 90.834 -11.724 1.00 69.11 C +ATOM 816 OG SER A 111 -13.985 90.612 -11.019 1.00 69.29 O +ATOM 817 N SER A 112 -15.741 88.144 -10.856 1.00 69.70 N +ATOM 818 CA SER A 112 -15.468 86.842 -10.250 1.00 72.23 C +ATOM 819 C SER A 112 -14.005 86.553 -9.917 1.00 75.35 C +ATOM 820 O SER A 112 -13.627 85.392 -9.741 1.00 74.70 O +ATOM 821 CB SER A 112 -16.020 85.719 -11.124 1.00 70.61 C +ATOM 822 OG SER A 112 -15.322 85.647 -12.347 1.00 69.06 O +ATOM 823 N ASP A 113 -13.194 87.601 -9.817 1.00 78.74 N +ATOM 824 CA ASP A 113 -11.776 87.457 -9.493 1.00 81.61 C +ATOM 825 C ASP A 113 -11.511 87.392 -7.994 1.00 82.23 C +ATOM 826 O ASP A 113 -12.405 87.642 -7.177 1.00 83.29 O +ATOM 827 CB ASP A 113 -10.980 88.620 -10.071 1.00 86.06 C +ATOM 828 CG ASP A 113 -11.041 88.675 -11.573 1.00 90.47 C +ATOM 829 OD1 ASP A 113 -10.881 87.613 -12.213 1.00 92.19 O +ATOM 830 OD2 ASP A 113 -11.244 89.784 -12.114 1.00 94.01 O +ATOM 831 N SER A 114 -10.263 87.088 -7.649 1.00 81.79 N +ATOM 832 CA SER A 114 -9.829 86.995 -6.261 1.00 82.12 C +ATOM 833 C SER A 114 -8.861 88.144 -5.939 1.00 81.92 C +ATOM 834 O SER A 114 -7.707 87.922 -5.558 1.00 83.59 O +ATOM 835 CB SER A 114 -9.170 85.633 -6.013 1.00 82.56 C +ATOM 836 OG SER A 114 -8.798 85.477 -4.654 1.00 84.61 O +ATOM 837 N LYS A 115 -9.346 89.373 -6.090 1.00 81.69 N +ATOM 838 CA LYS A 115 -8.545 90.573 -5.835 1.00 81.27 C +ATOM 839 C LYS A 115 -8.498 90.956 -4.360 1.00 79.15 C +ATOM 840 O LYS A 115 -9.531 91.228 -3.746 1.00 79.76 O +ATOM 841 CB LYS A 115 -9.082 91.750 -6.659 1.00 83.66 C +ATOM 842 CG LYS A 115 -9.078 91.489 -8.157 1.00 87.67 C +ATOM 843 CD LYS A 115 -9.678 92.631 -8.962 1.00 89.83 C +ATOM 844 CE LYS A 115 -9.641 92.298 -10.455 1.00 91.94 C +ATOM 845 NZ LYS A 115 -10.166 93.387 -11.332 1.00 92.76 N +ATOM 846 N SER A 116 -7.289 91.009 -3.805 1.00 76.48 N +ATOM 847 CA SER A 116 -7.097 91.361 -2.397 1.00 73.91 C +ATOM 848 C SER A 116 -7.606 92.765 -2.081 1.00 70.72 C +ATOM 849 O SER A 116 -7.731 93.146 -0.917 1.00 70.17 O +ATOM 850 CB SER A 116 -5.617 91.254 -2.014 1.00 74.28 C +ATOM 851 OG SER A 116 -4.844 92.246 -2.666 1.00 74.59 O +ATOM 852 N SER A 117 -7.895 93.523 -3.131 1.00 68.61 N +ATOM 853 CA SER A 117 -8.385 94.888 -3.006 1.00 67.19 C +ATOM 854 C SER A 117 -9.839 94.954 -2.557 1.00 66.90 C +ATOM 855 O SER A 117 -10.260 95.947 -1.961 1.00 66.87 O +ATOM 856 CB SER A 117 -8.226 95.630 -4.336 1.00 66.56 C +ATOM 857 OG SER A 117 -8.934 94.986 -5.384 1.00 67.17 O +ATOM 858 N ASN A 118 -10.604 93.902 -2.851 1.00 65.85 N +ATOM 859 CA ASN A 118 -12.018 93.836 -2.475 1.00 63.51 C +ATOM 860 C ASN A 118 -12.185 94.001 -0.974 1.00 62.02 C +ATOM 861 O ASN A 118 -13.149 94.613 -0.510 1.00 61.48 O +ATOM 862 CB ASN A 118 -12.615 92.501 -2.905 1.00 63.67 C +ATOM 863 CG ASN A 118 -12.529 92.285 -4.392 1.00 62.97 C +ATOM 864 OD1 ASN A 118 -12.143 91.212 -4.854 1.00 62.81 O +ATOM 865 ND2 ASN A 118 -12.883 93.310 -5.158 1.00 62.69 N +ATOM 866 N GLN A 119 -11.219 93.458 -0.233 1.00 60.78 N +ATOM 867 CA GLN A 119 -11.186 93.509 1.229 1.00 57.97 C +ATOM 868 C GLN A 119 -12.536 93.140 1.799 1.00 56.26 C +ATOM 869 O GLN A 119 -13.145 93.911 2.549 1.00 57.64 O +ATOM 870 CB GLN A 119 -10.768 94.893 1.715 1.00 55.13 C +ATOM 871 CG GLN A 119 -9.414 95.298 1.242 1.00 51.95 C +ATOM 872 CD GLN A 119 -8.993 96.577 1.858 1.00 51.88 C +ATOM 873 OE1 GLN A 119 -8.098 96.601 2.691 1.00 54.32 O +ATOM 874 NE2 GLN A 119 -9.663 97.658 1.489 1.00 51.20 N +ATOM 875 N ILE A 120 -12.999 91.953 1.422 1.00 52.57 N +ATOM 876 CA ILE A 120 -14.280 91.468 1.869 1.00 49.09 C +ATOM 877 C ILE A 120 -14.223 90.038 2.319 1.00 48.71 C +ATOM 878 O ILE A 120 -13.596 89.198 1.678 1.00 50.00 O +ATOM 879 CB ILE A 120 -15.343 91.611 0.759 1.00 48.33 C +ATOM 880 CG1 ILE A 120 -15.817 93.064 0.704 1.00 50.31 C +ATOM 881 CG2 ILE A 120 -16.517 90.671 0.991 1.00 44.84 C +ATOM 882 CD1 ILE A 120 -16.845 93.347 -0.352 1.00 53.44 C +ATOM 883 N ILE A 121 -14.830 89.796 3.475 1.00 47.33 N +ATOM 884 CA ILE A 121 -14.948 88.460 4.041 1.00 45.66 C +ATOM 885 C ILE A 121 -16.447 88.320 4.262 1.00 41.49 C +ATOM 886 O ILE A 121 -17.079 89.199 4.866 1.00 42.13 O +ATOM 887 CB ILE A 121 -14.183 88.321 5.377 1.00 48.19 C +ATOM 888 CG1 ILE A 121 -12.677 88.366 5.116 1.00 50.29 C +ATOM 889 CG2 ILE A 121 -14.543 87.013 6.067 1.00 45.68 C +ATOM 890 CD1 ILE A 121 -11.842 88.309 6.375 1.00 53.47 C +ATOM 891 N ALA A 122 -17.025 87.253 3.729 1.00 36.42 N +ATOM 892 CA ALA A 122 -18.451 87.060 3.875 1.00 34.56 C +ATOM 893 C ALA A 122 -18.862 85.615 3.966 1.00 33.52 C +ATOM 894 O ALA A 122 -18.159 84.722 3.512 1.00 35.00 O +ATOM 895 CB ALA A 122 -19.174 87.717 2.733 1.00 34.83 C +ATOM 896 N VAL A 123 -20.011 85.398 4.589 1.00 34.95 N +ATOM 897 CA VAL A 123 -20.578 84.064 4.727 1.00 34.63 C +ATOM 898 C VAL A 123 -21.833 84.082 3.851 1.00 35.77 C +ATOM 899 O VAL A 123 -22.789 84.835 4.114 1.00 35.34 O +ATOM 900 CB VAL A 123 -20.949 83.752 6.197 1.00 32.03 C +ATOM 901 CG1 VAL A 123 -21.471 82.336 6.320 1.00 27.53 C +ATOM 902 CG2 VAL A 123 -19.736 83.940 7.083 1.00 28.00 C +ATOM 903 N GLU A 124 -21.793 83.301 2.776 1.00 35.02 N +ATOM 904 CA GLU A 124 -22.904 83.240 1.846 1.00 34.79 C +ATOM 905 C GLU A 124 -23.817 82.052 2.058 1.00 35.83 C +ATOM 906 O GLU A 124 -23.393 80.967 2.463 1.00 34.53 O +ATOM 907 CB GLU A 124 -22.402 83.241 0.399 1.00 35.56 C +ATOM 908 CG GLU A 124 -21.536 82.039 0.028 1.00 38.50 C +ATOM 909 CD GLU A 124 -21.239 81.949 -1.460 1.00 42.57 C +ATOM 910 OE1 GLU A 124 -21.011 82.998 -2.108 1.00 42.76 O +ATOM 911 OE2 GLU A 124 -21.237 80.815 -1.988 1.00 45.88 O +ATOM 912 N PHE A 125 -25.091 82.297 1.779 1.00 38.94 N +ATOM 913 CA PHE A 125 -26.155 81.305 1.856 1.00 38.59 C +ATOM 914 C PHE A 125 -26.741 81.299 0.454 1.00 36.98 C +ATOM 915 O PHE A 125 -27.782 81.893 0.196 1.00 33.19 O +ATOM 916 CB PHE A 125 -27.185 81.727 2.887 1.00 38.15 C +ATOM 917 CG PHE A 125 -26.630 81.798 4.270 1.00 42.38 C +ATOM 918 CD1 PHE A 125 -26.575 80.656 5.070 1.00 42.31 C +ATOM 919 CD2 PHE A 125 -26.124 82.996 4.767 1.00 42.55 C +ATOM 920 CE1 PHE A 125 -26.023 80.707 6.350 1.00 41.57 C +ATOM 921 CE2 PHE A 125 -25.567 83.055 6.050 1.00 42.05 C +ATOM 922 CZ PHE A 125 -25.516 81.909 6.840 1.00 40.93 C +ATOM 923 N ASP A 126 -25.970 80.694 -0.443 1.00 38.14 N +ATOM 924 CA ASP A 126 -26.248 80.565 -1.869 1.00 41.59 C +ATOM 925 C ASP A 126 -27.397 79.608 -2.176 1.00 43.10 C +ATOM 926 O ASP A 126 -27.290 78.425 -1.874 1.00 43.56 O +ATOM 927 CB ASP A 126 -24.978 80.033 -2.541 1.00 41.24 C +ATOM 928 CG ASP A 126 -24.599 80.791 -3.787 1.00 40.67 C +ATOM 929 OD1 ASP A 126 -25.511 81.145 -4.563 1.00 45.34 O +ATOM 930 OD2 ASP A 126 -23.383 81.019 -3.995 1.00 39.12 O +ATOM 931 N THR A 127 -28.473 80.105 -2.794 1.00 44.80 N +ATOM 932 CA THR A 127 -29.623 79.259 -3.159 1.00 46.53 C +ATOM 933 C THR A 127 -29.557 78.866 -4.636 1.00 48.67 C +ATOM 934 O THR A 127 -30.181 77.887 -5.065 1.00 49.00 O +ATOM 935 CB THR A 127 -30.968 79.963 -2.935 1.00 44.88 C +ATOM 936 OG1 THR A 127 -30.919 81.269 -3.515 1.00 47.50 O +ATOM 937 CG2 THR A 127 -31.285 80.071 -1.475 1.00 43.07 C +ATOM 938 N TYR A 128 -28.827 79.661 -5.412 1.00 50.53 N +ATOM 939 CA TYR A 128 -28.663 79.408 -6.834 1.00 52.54 C +ATOM 940 C TYR A 128 -27.230 78.993 -7.151 1.00 53.69 C +ATOM 941 O TYR A 128 -26.278 79.721 -6.861 1.00 52.70 O +ATOM 942 CB TYR A 128 -29.033 80.641 -7.644 1.00 54.96 C +ATOM 943 CG TYR A 128 -28.759 80.458 -9.104 1.00 56.99 C +ATOM 944 CD1 TYR A 128 -29.601 79.686 -9.895 1.00 59.07 C +ATOM 945 CD2 TYR A 128 -27.621 81.004 -9.684 1.00 58.87 C +ATOM 946 CE1 TYR A 128 -29.312 79.453 -11.235 1.00 62.26 C +ATOM 947 CE2 TYR A 128 -27.318 80.781 -11.019 1.00 61.36 C +ATOM 948 CZ TYR A 128 -28.164 80.003 -11.793 1.00 62.16 C +ATOM 949 OH TYR A 128 -27.856 79.754 -13.117 1.00 64.94 O +ATOM 950 N PHE A 129 -27.099 77.866 -7.844 1.00 54.89 N +ATOM 951 CA PHE A 129 -25.795 77.309 -8.178 1.00 55.87 C +ATOM 952 C PHE A 129 -25.633 76.891 -9.633 1.00 58.04 C +ATOM 953 O PHE A 129 -24.654 76.216 -9.974 1.00 59.80 O +ATOM 954 CB PHE A 129 -25.538 76.097 -7.291 1.00 54.79 C +ATOM 955 CG PHE A 129 -26.609 75.047 -7.387 1.00 55.06 C +ATOM 956 CD1 PHE A 129 -27.862 75.254 -6.813 1.00 56.49 C +ATOM 957 CD2 PHE A 129 -26.366 73.850 -8.043 1.00 54.79 C +ATOM 958 CE1 PHE A 129 -28.858 74.280 -6.892 1.00 55.66 C +ATOM 959 CE2 PHE A 129 -27.351 72.869 -8.128 1.00 53.79 C +ATOM 960 CZ PHE A 129 -28.598 73.084 -7.551 1.00 54.36 C +ATOM 961 N GLY A 130 -26.591 77.272 -10.478 1.00 59.43 N +ATOM 962 CA GLY A 130 -26.539 76.930 -11.896 1.00 59.90 C +ATOM 963 C GLY A 130 -25.276 77.419 -12.587 1.00 60.69 C +ATOM 964 O GLY A 130 -24.915 78.594 -12.489 1.00 58.83 O +ATOM 965 N LYS A 131 -24.616 76.516 -13.309 1.00 62.66 N +ATOM 966 CA LYS A 131 -23.376 76.836 -14.001 1.00 62.42 C +ATOM 967 C LYS A 131 -23.470 77.765 -15.211 1.00 61.63 C +ATOM 968 O LYS A 131 -22.460 78.309 -15.646 1.00 60.56 O +ATOM 969 CB LYS A 131 -22.623 75.556 -14.329 1.00 63.25 C +ATOM 970 CG LYS A 131 -21.908 74.988 -13.118 1.00 68.60 C +ATOM 971 CD LYS A 131 -21.067 73.783 -13.494 1.00 75.39 C +ATOM 972 CE LYS A 131 -20.046 73.461 -12.415 1.00 78.11 C +ATOM 973 NZ LYS A 131 -19.078 74.583 -12.226 1.00 80.93 N +ATOM 974 N ALA A 132 -24.679 77.981 -15.727 1.00 62.26 N +ATOM 975 CA ALA A 132 -24.875 78.874 -16.865 1.00 61.05 C +ATOM 976 C ALA A 132 -24.477 80.304 -16.469 1.00 61.37 C +ATOM 977 O ALA A 132 -23.750 80.972 -17.201 1.00 60.75 O +ATOM 978 CB ALA A 132 -26.332 78.824 -17.342 1.00 56.97 C +ATOM 979 N TYR A 133 -24.886 80.736 -15.275 1.00 63.35 N +ATOM 980 CA TYR A 133 -24.578 82.087 -14.791 1.00 65.70 C +ATOM 981 C TYR A 133 -23.667 82.155 -13.553 1.00 64.25 C +ATOM 982 O TYR A 133 -23.085 83.207 -13.271 1.00 63.96 O +ATOM 983 CB TYR A 133 -25.867 82.870 -14.524 1.00 70.12 C +ATOM 984 CG TYR A 133 -26.859 82.826 -15.670 1.00 77.81 C +ATOM 985 CD1 TYR A 133 -26.773 83.725 -16.739 1.00 80.70 C +ATOM 986 CD2 TYR A 133 -27.886 81.878 -15.690 1.00 81.07 C +ATOM 987 CE1 TYR A 133 -27.697 83.679 -17.812 1.00 83.29 C +ATOM 988 CE2 TYR A 133 -28.808 81.821 -16.751 1.00 85.01 C +ATOM 989 CZ TYR A 133 -28.708 82.725 -17.809 1.00 84.58 C +ATOM 990 OH TYR A 133 -29.615 82.672 -18.848 1.00 84.31 O +ATOM 991 N ASN A 134 -23.562 81.052 -12.810 1.00 61.85 N +ATOM 992 CA ASN A 134 -22.710 80.980 -11.612 1.00 60.02 C +ATOM 993 C ASN A 134 -21.779 79.781 -11.765 1.00 58.40 C +ATOM 994 O ASN A 134 -21.960 78.758 -11.104 1.00 58.55 O +ATOM 995 CB ASN A 134 -23.551 80.766 -10.343 1.00 61.91 C +ATOM 996 CG ASN A 134 -24.191 82.043 -9.810 1.00 61.73 C +ATOM 997 OD1 ASN A 134 -24.622 82.085 -8.656 1.00 63.80 O +ATOM 998 ND2 ASN A 134 -24.269 83.076 -10.641 1.00 64.04 N +ATOM 999 N PRO A 135 -20.758 79.894 -12.625 1.00 57.83 N +ATOM 1000 CA PRO A 135 -19.834 78.780 -12.878 1.00 57.38 C +ATOM 1001 C PRO A 135 -18.936 78.355 -11.704 1.00 57.17 C +ATOM 1002 O PRO A 135 -18.485 77.206 -11.647 1.00 55.93 O +ATOM 1003 CB PRO A 135 -19.026 79.290 -14.069 1.00 56.37 C +ATOM 1004 CG PRO A 135 -18.975 80.763 -13.831 1.00 56.07 C +ATOM 1005 CD PRO A 135 -20.388 81.076 -13.421 1.00 56.45 C +ATOM 1006 N TRP A 136 -18.710 79.273 -10.765 1.00 56.45 N +ATOM 1007 CA TRP A 136 -17.865 79.031 -9.595 1.00 54.72 C +ATOM 1008 C TRP A 136 -18.489 78.135 -8.530 1.00 55.88 C +ATOM 1009 O TRP A 136 -17.782 77.400 -7.846 1.00 56.82 O +ATOM 1010 CB TRP A 136 -17.490 80.365 -8.963 1.00 54.31 C +ATOM 1011 CG TRP A 136 -18.685 81.221 -8.692 1.00 55.42 C +ATOM 1012 CD1 TRP A 136 -19.560 81.092 -7.659 1.00 56.19 C +ATOM 1013 CD2 TRP A 136 -19.162 82.311 -9.489 1.00 56.92 C +ATOM 1014 NE1 TRP A 136 -20.560 82.025 -7.760 1.00 58.81 N +ATOM 1015 CE2 TRP A 136 -20.341 82.792 -8.872 1.00 57.77 C +ATOM 1016 CE3 TRP A 136 -18.712 82.933 -10.660 1.00 57.87 C +ATOM 1017 CZ2 TRP A 136 -21.078 83.870 -9.393 1.00 57.91 C +ATOM 1018 CZ3 TRP A 136 -19.445 84.005 -11.177 1.00 57.47 C +ATOM 1019 CH2 TRP A 136 -20.617 84.460 -10.539 1.00 57.50 C +ATOM 1020 N ASP A 137 -19.810 78.225 -8.377 1.00 56.90 N +ATOM 1021 CA ASP A 137 -20.554 77.450 -7.383 1.00 56.89 C +ATOM 1022 C ASP A 137 -20.537 75.943 -7.623 1.00 56.11 C +ATOM 1023 O ASP A 137 -20.416 75.482 -8.758 1.00 55.69 O +ATOM 1024 CB ASP A 137 -22.020 77.927 -7.312 1.00 57.58 C +ATOM 1025 CG ASP A 137 -22.192 79.255 -6.561 1.00 60.10 C +ATOM 1026 OD1 ASP A 137 -21.405 79.558 -5.633 1.00 63.70 O +ATOM 1027 OD2 ASP A 137 -23.149 79.990 -6.884 1.00 60.18 O +ATOM 1028 N PRO A 138 -20.628 75.155 -6.538 1.00 56.31 N +ATOM 1029 CA PRO A 138 -20.682 73.692 -6.596 1.00 57.28 C +ATOM 1030 C PRO A 138 -22.062 73.217 -7.050 1.00 57.63 C +ATOM 1031 O PRO A 138 -22.957 74.028 -7.288 1.00 56.76 O +ATOM 1032 CB PRO A 138 -20.397 73.288 -5.151 1.00 56.64 C +ATOM 1033 CG PRO A 138 -20.991 74.404 -4.376 1.00 56.81 C +ATOM 1034 CD PRO A 138 -20.506 75.609 -5.143 1.00 56.74 C +ATOM 1035 N ASP A 139 -22.238 71.902 -7.121 1.00 59.42 N +ATOM 1036 CA ASP A 139 -23.496 71.314 -7.574 1.00 61.64 C +ATOM 1037 C ASP A 139 -24.643 71.220 -6.579 1.00 60.58 C +ATOM 1038 O ASP A 139 -25.415 70.256 -6.613 1.00 61.86 O +ATOM 1039 CB ASP A 139 -23.243 69.934 -8.177 1.00 66.47 C +ATOM 1040 CG ASP A 139 -22.548 70.008 -9.517 1.00 72.39 C +ATOM 1041 OD1 ASP A 139 -22.993 70.809 -10.376 1.00 74.70 O +ATOM 1042 OD2 ASP A 139 -21.555 69.267 -9.707 1.00 75.90 O +ATOM 1043 N PHE A 140 -24.790 72.227 -5.726 1.00 58.32 N +ATOM 1044 CA PHE A 140 -25.871 72.227 -4.744 1.00 56.42 C +ATOM 1045 C PHE A 140 -26.007 73.536 -3.977 1.00 55.42 C +ATOM 1046 O PHE A 140 -25.119 74.395 -4.032 1.00 54.11 O +ATOM 1047 CB PHE A 140 -25.700 71.070 -3.751 1.00 54.97 C +ATOM 1048 CG PHE A 140 -24.302 70.913 -3.237 1.00 53.57 C +ATOM 1049 CD1 PHE A 140 -23.612 71.991 -2.691 1.00 54.34 C +ATOM 1050 CD2 PHE A 140 -23.666 69.688 -3.314 1.00 53.18 C +ATOM 1051 CE1 PHE A 140 -22.305 71.848 -2.231 1.00 53.42 C +ATOM 1052 CE2 PHE A 140 -22.365 69.535 -2.858 1.00 53.32 C +ATOM 1053 CZ PHE A 140 -21.682 70.619 -2.315 1.00 52.13 C +ATOM 1054 N LYS A 141 -27.144 73.699 -3.298 1.00 53.70 N +ATOM 1055 CA LYS A 141 -27.365 74.884 -2.481 1.00 51.50 C +ATOM 1056 C LYS A 141 -26.313 74.759 -1.386 1.00 50.22 C +ATOM 1057 O LYS A 141 -26.117 73.680 -0.820 1.00 49.18 O +ATOM 1058 CB LYS A 141 -28.788 74.905 -1.918 1.00 50.99 C +ATOM 1059 CG LYS A 141 -29.842 75.266 -2.969 1.00 50.00 C +ATOM 1060 CD LYS A 141 -31.253 75.196 -2.423 1.00 47.71 C +ATOM 1061 CE LYS A 141 -32.281 75.294 -3.549 1.00 47.52 C +ATOM 1062 NZ LYS A 141 -32.463 76.676 -4.082 1.00 47.53 N +ATOM 1063 N HIS A 142 -25.612 75.852 -1.112 1.00 48.44 N +ATOM 1064 CA HIS A 142 -24.527 75.803 -0.146 1.00 46.28 C +ATOM 1065 C HIS A 142 -24.366 76.994 0.797 1.00 45.52 C +ATOM 1066 O HIS A 142 -24.993 78.045 0.640 1.00 45.40 O +ATOM 1067 CB HIS A 142 -23.215 75.631 -0.932 1.00 44.30 C +ATOM 1068 CG HIS A 142 -22.998 76.686 -1.984 1.00 42.32 C +ATOM 1069 ND1 HIS A 142 -23.619 76.646 -3.214 1.00 42.11 N +ATOM 1070 CD2 HIS A 142 -22.236 77.806 -1.984 1.00 43.51 C +ATOM 1071 CE1 HIS A 142 -23.248 77.697 -3.927 1.00 41.67 C +ATOM 1072 NE2 HIS A 142 -22.409 78.418 -3.206 1.00 39.95 N +ATOM 1073 N ILE A 143 -23.537 76.772 1.812 1.00 44.43 N +ATOM 1074 CA ILE A 143 -23.145 77.796 2.770 1.00 41.71 C +ATOM 1075 C ILE A 143 -21.675 77.928 2.397 1.00 41.25 C +ATOM 1076 O ILE A 143 -20.979 76.912 2.236 1.00 39.73 O +ATOM 1077 CB ILE A 143 -23.191 77.302 4.226 1.00 40.27 C +ATOM 1078 CG1 ILE A 143 -24.627 77.084 4.679 1.00 41.43 C +ATOM 1079 CG2 ILE A 143 -22.527 78.311 5.136 1.00 38.20 C +ATOM 1080 CD1 ILE A 143 -24.732 76.628 6.114 1.00 39.62 C +ATOM 1081 N GLY A 144 -21.201 79.151 2.219 1.00 40.23 N +ATOM 1082 CA GLY A 144 -19.809 79.308 1.861 1.00 38.65 C +ATOM 1083 C GLY A 144 -19.105 80.455 2.539 1.00 39.64 C +ATOM 1084 O GLY A 144 -19.716 81.464 2.908 1.00 39.76 O +ATOM 1085 N ILE A 145 -17.812 80.262 2.763 1.00 40.25 N +ATOM 1086 CA ILE A 145 -16.970 81.293 3.360 1.00 40.88 C +ATOM 1087 C ILE A 145 -16.291 81.958 2.161 1.00 39.11 C +ATOM 1088 O ILE A 145 -15.604 81.301 1.376 1.00 39.27 O +ATOM 1089 CB ILE A 145 -15.880 80.689 4.275 1.00 42.55 C +ATOM 1090 CG1 ILE A 145 -16.485 79.663 5.245 1.00 42.84 C +ATOM 1091 CG2 ILE A 145 -15.150 81.798 5.024 1.00 39.52 C +ATOM 1092 CD1 ILE A 145 -17.303 80.246 6.355 1.00 43.66 C +ATOM 1093 N ASP A 146 -16.530 83.248 1.991 1.00 37.58 N +ATOM 1094 CA ASP A 146 -15.959 83.972 0.869 1.00 38.96 C +ATOM 1095 C ASP A 146 -14.900 84.931 1.333 1.00 40.17 C +ATOM 1096 O ASP A 146 -15.136 85.741 2.229 1.00 41.40 O +ATOM 1097 CB ASP A 146 -17.043 84.747 0.120 1.00 36.30 C +ATOM 1098 CG ASP A 146 -18.122 83.849 -0.438 1.00 36.14 C +ATOM 1099 OD1 ASP A 146 -17.898 82.628 -0.574 1.00 34.60 O +ATOM 1100 OD2 ASP A 146 -19.206 84.375 -0.744 1.00 36.08 O +ATOM 1101 N VAL A 147 -13.734 84.853 0.705 1.00 42.33 N +ATOM 1102 CA VAL A 147 -12.630 85.731 1.064 1.00 42.28 C +ATOM 1103 C VAL A 147 -12.084 86.429 -0.164 1.00 43.17 C +ATOM 1104 O VAL A 147 -11.384 85.812 -0.972 1.00 45.42 O +ATOM 1105 CB VAL A 147 -11.479 84.956 1.715 1.00 41.41 C +ATOM 1106 CG1 VAL A 147 -10.444 85.935 2.220 1.00 42.03 C +ATOM 1107 CG2 VAL A 147 -11.989 84.077 2.853 1.00 42.40 C +ATOM 1108 N ASN A 148 -12.413 87.712 -0.298 1.00 43.87 N +ATOM 1109 CA ASN A 148 -11.973 88.532 -1.423 1.00 44.44 C +ATOM 1110 C ASN A 148 -12.467 88.068 -2.788 1.00 46.48 C +ATOM 1111 O ASN A 148 -12.133 88.679 -3.803 1.00 47.27 O +ATOM 1112 CB ASN A 148 -10.452 88.640 -1.436 1.00 44.46 C +ATOM 1113 CG ASN A 148 -9.945 89.696 -0.492 1.00 45.87 C +ATOM 1114 OD1 ASN A 148 -8.825 89.612 0.020 1.00 46.96 O +ATOM 1115 ND2 ASN A 148 -10.767 90.710 -0.262 1.00 46.63 N +ATOM 1116 N SER A 149 -13.288 87.021 -2.812 1.00 47.02 N +ATOM 1117 CA SER A 149 -13.812 86.478 -4.061 1.00 48.02 C +ATOM 1118 C SER A 149 -15.082 85.693 -3.827 1.00 50.32 C +ATOM 1119 O SER A 149 -15.194 84.964 -2.832 1.00 51.27 O +ATOM 1120 CB SER A 149 -12.787 85.550 -4.703 1.00 48.33 C +ATOM 1121 OG SER A 149 -13.358 84.825 -5.779 1.00 47.74 O +ATOM 1122 N ILE A 150 -16.002 85.793 -4.788 1.00 51.53 N +ATOM 1123 CA ILE A 150 -17.287 85.099 -4.732 1.00 51.44 C +ATOM 1124 C ILE A 150 -17.122 83.567 -4.847 1.00 51.97 C +ATOM 1125 O ILE A 150 -18.074 82.800 -4.621 1.00 52.04 O +ATOM 1126 CB ILE A 150 -18.238 85.641 -5.815 1.00 51.00 C +ATOM 1127 CG1 ILE A 150 -19.664 85.130 -5.581 1.00 51.87 C +ATOM 1128 CG2 ILE A 150 -17.731 85.266 -7.193 1.00 52.30 C +ATOM 1129 CD1 ILE A 150 -20.328 85.690 -4.343 1.00 50.23 C +ATOM 1130 N LYS A 151 -15.919 83.133 -5.230 1.00 51.56 N +ATOM 1131 CA LYS A 151 -15.610 81.713 -5.320 1.00 51.09 C +ATOM 1132 C LYS A 151 -15.159 81.331 -3.907 1.00 50.21 C +ATOM 1133 O LYS A 151 -14.015 81.583 -3.505 1.00 49.63 O +ATOM 1134 CB LYS A 151 -14.501 81.453 -6.347 1.00 53.15 C +ATOM 1135 CG LYS A 151 -14.213 79.971 -6.587 1.00 56.28 C +ATOM 1136 CD LYS A 151 -13.303 79.736 -7.793 1.00 59.41 C +ATOM 1137 CE LYS A 151 -12.925 78.257 -7.930 1.00 62.09 C +ATOM 1138 NZ LYS A 151 -14.117 77.349 -7.950 1.00 63.94 N +ATOM 1139 N SER A 152 -16.103 80.795 -3.135 1.00 48.99 N +ATOM 1140 CA SER A 152 -15.866 80.401 -1.748 1.00 47.81 C +ATOM 1141 C SER A 152 -14.597 79.583 -1.605 1.00 47.24 C +ATOM 1142 O SER A 152 -14.235 78.837 -2.508 1.00 47.48 O +ATOM 1143 CB SER A 152 -17.050 79.590 -1.219 1.00 46.05 C +ATOM 1144 OG SER A 152 -18.287 80.142 -1.636 1.00 44.07 O +ATOM 1145 N ILE A 153 -13.912 79.746 -0.480 1.00 46.44 N +ATOM 1146 CA ILE A 153 -12.683 79.003 -0.230 1.00 45.57 C +ATOM 1147 C ILE A 153 -13.023 77.661 0.396 1.00 45.26 C +ATOM 1148 O ILE A 153 -12.173 76.770 0.488 1.00 47.20 O +ATOM 1149 CB ILE A 153 -11.737 79.765 0.703 1.00 42.98 C +ATOM 1150 CG1 ILE A 153 -12.331 79.826 2.108 1.00 42.71 C +ATOM 1151 CG2 ILE A 153 -11.512 81.165 0.173 1.00 44.21 C +ATOM 1152 CD1 ILE A 153 -11.421 80.397 3.125 1.00 39.71 C +ATOM 1153 N LYS A 154 -14.260 77.549 0.871 1.00 44.99 N +ATOM 1154 CA LYS A 154 -14.759 76.319 1.480 1.00 46.52 C +ATOM 1155 C LYS A 154 -16.271 76.412 1.532 1.00 47.35 C +ATOM 1156 O LYS A 154 -16.824 77.469 1.854 1.00 49.52 O +ATOM 1157 CB LYS A 154 -14.198 76.118 2.890 1.00 44.84 C +ATOM 1158 CG LYS A 154 -14.408 74.696 3.433 1.00 46.93 C +ATOM 1159 CD LYS A 154 -13.603 74.441 4.719 1.00 47.73 C +ATOM 1160 CE LYS A 154 -13.836 73.040 5.270 1.00 46.20 C +ATOM 1161 NZ LYS A 154 -13.156 72.846 6.576 1.00 45.33 N +ATOM 1162 N THR A 155 -16.935 75.329 1.146 1.00 47.01 N +ATOM 1163 CA THR A 155 -18.393 75.280 1.146 1.00 47.06 C +ATOM 1164 C THR A 155 -18.865 73.992 1.792 1.00 47.71 C +ATOM 1165 O THR A 155 -18.074 73.098 2.084 1.00 48.80 O +ATOM 1166 CB THR A 155 -18.978 75.330 -0.291 1.00 46.83 C +ATOM 1167 OG1 THR A 155 -18.365 74.321 -1.100 1.00 44.29 O +ATOM 1168 CG2 THR A 155 -18.754 76.687 -0.925 1.00 47.13 C +ATOM 1169 N VAL A 156 -20.163 73.921 2.042 1.00 48.10 N +ATOM 1170 CA VAL A 156 -20.777 72.736 2.621 1.00 48.31 C +ATOM 1171 C VAL A 156 -22.208 72.764 2.121 1.00 49.28 C +ATOM 1172 O VAL A 156 -22.779 73.844 1.902 1.00 48.34 O +ATOM 1173 CB VAL A 156 -20.729 72.729 4.187 1.00 47.20 C +ATOM 1174 CG1 VAL A 156 -21.480 73.922 4.762 1.00 48.50 C +ATOM 1175 CG2 VAL A 156 -21.319 71.435 4.734 1.00 47.31 C +ATOM 1176 N LYS A 157 -22.759 71.581 1.866 1.00 50.33 N +ATOM 1177 CA LYS A 157 -24.126 71.486 1.383 1.00 50.90 C +ATOM 1178 C LYS A 157 -25.102 72.068 2.398 1.00 49.84 C +ATOM 1179 O LYS A 157 -25.044 71.749 3.592 1.00 48.51 O +ATOM 1180 CB LYS A 157 -24.503 70.043 1.087 1.00 52.37 C +ATOM 1181 CG LYS A 157 -25.884 69.913 0.490 1.00 57.17 C +ATOM 1182 CD LYS A 157 -26.302 68.463 0.363 1.00 61.75 C +ATOM 1183 CE LYS A 157 -27.711 68.363 -0.192 1.00 64.28 C +ATOM 1184 NZ LYS A 157 -28.194 66.960 -0.206 1.00 65.56 N +ATOM 1185 N TRP A 158 -25.965 72.950 1.908 1.00 47.34 N +ATOM 1186 CA TRP A 158 -26.974 73.600 2.724 1.00 45.62 C +ATOM 1187 C TRP A 158 -28.320 72.889 2.539 1.00 47.25 C +ATOM 1188 O TRP A 158 -28.883 72.884 1.437 1.00 48.37 O +ATOM 1189 CB TRP A 158 -27.087 75.077 2.324 1.00 42.64 C +ATOM 1190 CG TRP A 158 -28.136 75.838 3.075 1.00 39.27 C +ATOM 1191 CD1 TRP A 158 -28.746 75.470 4.243 1.00 40.00 C +ATOM 1192 CD2 TRP A 158 -28.699 77.099 2.716 1.00 37.70 C +ATOM 1193 NE1 TRP A 158 -29.648 76.421 4.631 1.00 37.16 N +ATOM 1194 CE2 TRP A 158 -29.638 77.437 3.711 1.00 38.70 C +ATOM 1195 CE3 TRP A 158 -28.499 77.978 1.652 1.00 39.04 C +ATOM 1196 CZ2 TRP A 158 -30.382 78.626 3.675 1.00 39.70 C +ATOM 1197 CZ3 TRP A 158 -29.238 79.161 1.613 1.00 40.41 C +ATOM 1198 CH2 TRP A 158 -30.166 79.472 2.621 1.00 39.09 C +ATOM 1199 N ASP A 159 -28.824 72.278 3.613 1.00 46.36 N +ATOM 1200 CA ASP A 159 -30.104 71.579 3.566 1.00 45.16 C +ATOM 1201 C ASP A 159 -31.238 72.569 3.792 1.00 44.96 C +ATOM 1202 O ASP A 159 -31.992 72.453 4.755 1.00 45.14 O +ATOM 1203 CB ASP A 159 -30.160 70.459 4.606 1.00 46.60 C +ATOM 1204 CG ASP A 159 -29.215 69.320 4.293 1.00 47.56 C +ATOM 1205 OD1 ASP A 159 -29.322 68.750 3.188 1.00 49.54 O +ATOM 1206 OD2 ASP A 159 -28.369 68.993 5.150 1.00 46.72 O +ATOM 1207 N TRP A 160 -31.358 73.526 2.874 1.00 44.39 N +ATOM 1208 CA TRP A 160 -32.380 74.567 2.912 1.00 43.14 C +ATOM 1209 C TRP A 160 -33.798 74.052 3.053 1.00 43.61 C +ATOM 1210 O TRP A 160 -34.201 73.114 2.366 1.00 44.63 O +ATOM 1211 CB TRP A 160 -32.296 75.408 1.642 1.00 45.66 C +ATOM 1212 CG TRP A 160 -33.428 76.382 1.455 1.00 48.64 C +ATOM 1213 CD1 TRP A 160 -33.739 77.444 2.246 1.00 50.02 C +ATOM 1214 CD2 TRP A 160 -34.357 76.414 0.361 1.00 51.02 C +ATOM 1215 NE1 TRP A 160 -34.793 78.148 1.714 1.00 50.74 N +ATOM 1216 CE2 TRP A 160 -35.190 77.533 0.558 1.00 51.74 C +ATOM 1217 CE3 TRP A 160 -34.559 75.605 -0.760 1.00 53.21 C +ATOM 1218 CZ2 TRP A 160 -36.210 77.870 -0.337 1.00 54.78 C +ATOM 1219 CZ3 TRP A 160 -35.574 75.940 -1.652 1.00 54.71 C +ATOM 1220 CH2 TRP A 160 -36.386 77.061 -1.431 1.00 55.91 C +ATOM 1221 N ARG A 161 -34.553 74.685 3.944 1.00 43.22 N +ATOM 1222 CA ARG A 161 -35.951 74.343 4.163 1.00 43.33 C +ATOM 1223 C ARG A 161 -36.754 75.571 3.741 1.00 42.75 C +ATOM 1224 O ARG A 161 -36.667 76.629 4.371 1.00 42.17 O +ATOM 1225 CB ARG A 161 -36.214 74.006 5.632 1.00 44.22 C +ATOM 1226 CG ARG A 161 -35.501 72.769 6.145 1.00 47.53 C +ATOM 1227 CD ARG A 161 -35.889 71.529 5.358 1.00 53.52 C +ATOM 1228 NE ARG A 161 -35.341 70.301 5.938 1.00 59.48 N +ATOM 1229 CZ ARG A 161 -34.600 69.407 5.279 1.00 62.38 C +ATOM 1230 NH1 ARG A 161 -34.300 69.591 4.000 1.00 63.72 N +ATOM 1231 NH2 ARG A 161 -34.162 68.315 5.898 1.00 64.28 N +ATOM 1232 N ASN A 162 -37.498 75.439 2.646 1.00 43.00 N +ATOM 1233 CA ASN A 162 -38.295 76.543 2.124 1.00 43.50 C +ATOM 1234 C ASN A 162 -39.261 77.112 3.153 1.00 43.91 C +ATOM 1235 O ASN A 162 -40.049 76.382 3.765 1.00 43.58 O +ATOM 1236 CB ASN A 162 -39.052 76.119 0.856 1.00 45.34 C +ATOM 1237 CG ASN A 162 -39.863 77.259 0.240 1.00 47.10 C +ATOM 1238 OD1 ASN A 162 -40.921 77.032 -0.343 1.00 52.58 O +ATOM 1239 ND2 ASN A 162 -39.375 78.484 0.378 1.00 45.35 N +ATOM 1240 N GLY A 163 -39.160 78.420 3.371 1.00 43.70 N +ATOM 1241 CA GLY A 163 -40.039 79.094 4.310 1.00 43.12 C +ATOM 1242 C GLY A 163 -39.750 78.893 5.783 1.00 41.71 C +ATOM 1243 O GLY A 163 -40.322 79.573 6.624 1.00 40.72 O +ATOM 1244 N GLU A 164 -38.881 77.952 6.108 1.00 42.73 N +ATOM 1245 CA GLU A 164 -38.547 77.719 7.497 1.00 42.48 C +ATOM 1246 C GLU A 164 -37.491 78.681 8.009 1.00 41.81 C +ATOM 1247 O GLU A 164 -36.636 79.160 7.248 1.00 43.92 O +ATOM 1248 CB GLU A 164 -38.108 76.275 7.720 1.00 45.90 C +ATOM 1249 CG GLU A 164 -39.247 75.274 7.650 1.00 49.31 C +ATOM 1250 CD GLU A 164 -40.424 75.659 8.528 1.00 54.26 C +ATOM 1251 OE1 GLU A 164 -40.229 76.320 9.586 1.00 58.26 O +ATOM 1252 OE2 GLU A 164 -41.555 75.293 8.148 1.00 56.07 O +ATOM 1253 N VAL A 165 -37.585 78.972 9.304 1.00 39.11 N +ATOM 1254 CA VAL A 165 -36.676 79.874 9.986 1.00 37.38 C +ATOM 1255 C VAL A 165 -35.393 79.167 10.381 1.00 39.04 C +ATOM 1256 O VAL A 165 -35.428 78.084 10.977 1.00 40.42 O +ATOM 1257 CB VAL A 165 -37.310 80.409 11.265 1.00 35.75 C +ATOM 1258 CG1 VAL A 165 -36.360 81.349 11.974 1.00 34.09 C +ATOM 1259 CG2 VAL A 165 -38.615 81.097 10.944 1.00 36.88 C +ATOM 1260 N ALA A 166 -34.266 79.798 10.063 1.00 38.21 N +ATOM 1261 CA ALA A 166 -32.957 79.258 10.389 1.00 36.96 C +ATOM 1262 C ALA A 166 -32.279 80.123 11.448 1.00 37.36 C +ATOM 1263 O ALA A 166 -32.385 81.349 11.430 1.00 38.63 O +ATOM 1264 CB ALA A 166 -32.089 79.185 9.136 1.00 35.11 C +ATOM 1265 N ASP A 167 -31.627 79.468 12.398 1.00 37.33 N +ATOM 1266 CA ASP A 167 -30.893 80.152 13.447 1.00 37.39 C +ATOM 1267 C ASP A 167 -29.420 79.977 13.121 1.00 37.37 C +ATOM 1268 O ASP A 167 -28.920 78.846 13.036 1.00 38.32 O +ATOM 1269 CB ASP A 167 -31.186 79.533 14.815 1.00 39.80 C +ATOM 1270 CG ASP A 167 -32.572 79.870 15.331 1.00 43.05 C +ATOM 1271 OD1 ASP A 167 -33.083 80.971 15.012 1.00 45.04 O +ATOM 1272 OD2 ASP A 167 -33.145 79.034 16.075 1.00 45.52 O +ATOM 1273 N VAL A 168 -28.732 81.090 12.897 1.00 36.10 N +ATOM 1274 CA VAL A 168 -27.320 81.026 12.581 1.00 33.66 C +ATOM 1275 C VAL A 168 -26.504 81.646 13.695 1.00 33.27 C +ATOM 1276 O VAL A 168 -26.898 82.637 14.316 1.00 34.33 O +ATOM 1277 CB VAL A 168 -26.967 81.748 11.258 1.00 33.97 C +ATOM 1278 CG1 VAL A 168 -25.588 81.333 10.806 1.00 33.29 C +ATOM 1279 CG2 VAL A 168 -27.980 81.434 10.183 1.00 33.12 C +ATOM 1280 N VAL A 169 -25.383 81.002 13.976 1.00 31.86 N +ATOM 1281 CA VAL A 169 -24.450 81.459 14.976 1.00 29.24 C +ATOM 1282 C VAL A 169 -23.104 81.370 14.289 1.00 30.29 C +ATOM 1283 O VAL A 169 -22.694 80.307 13.829 1.00 29.86 O +ATOM 1284 CB VAL A 169 -24.431 80.546 16.216 1.00 28.42 C +ATOM 1285 CG1 VAL A 169 -23.277 80.924 17.126 1.00 25.58 C +ATOM 1286 CG2 VAL A 169 -25.735 80.665 16.983 1.00 31.36 C +ATOM 1287 N ILE A 170 -22.451 82.512 14.156 1.00 30.03 N +ATOM 1288 CA ILE A 170 -21.144 82.565 13.535 1.00 29.18 C +ATOM 1289 C ILE A 170 -20.200 83.050 14.609 1.00 30.62 C +ATOM 1290 O ILE A 170 -20.518 83.988 15.334 1.00 32.01 O +ATOM 1291 CB ILE A 170 -21.106 83.578 12.396 1.00 27.99 C +ATOM 1292 CG1 ILE A 170 -22.035 83.156 11.269 1.00 25.70 C +ATOM 1293 CG2 ILE A 170 -19.703 83.707 11.868 1.00 31.04 C +ATOM 1294 CD1 ILE A 170 -22.230 84.247 10.258 1.00 24.68 C +ATOM 1295 N THR A 171 -19.050 82.401 14.726 1.00 32.08 N +ATOM 1296 CA THR A 171 -18.065 82.797 15.722 1.00 31.95 C +ATOM 1297 C THR A 171 -16.712 82.992 15.067 1.00 32.50 C +ATOM 1298 O THR A 171 -16.398 82.345 14.068 1.00 35.53 O +ATOM 1299 CB THR A 171 -17.886 81.722 16.810 1.00 31.22 C +ATOM 1300 OG1 THR A 171 -17.222 80.577 16.259 1.00 35.86 O +ATOM 1301 CG2 THR A 171 -19.220 81.290 17.352 1.00 33.95 C +ATOM 1302 N TYR A 172 -15.929 83.918 15.601 1.00 32.27 N +ATOM 1303 CA TYR A 172 -14.590 84.130 15.088 1.00 31.55 C +ATOM 1304 C TYR A 172 -13.645 84.196 16.251 1.00 31.66 C +ATOM 1305 O TYR A 172 -13.696 85.126 17.059 1.00 33.16 O +ATOM 1306 CB TYR A 172 -14.447 85.399 14.269 1.00 30.45 C +ATOM 1307 CG TYR A 172 -13.037 85.521 13.741 1.00 31.52 C +ATOM 1308 CD1 TYR A 172 -12.546 84.610 12.799 1.00 30.75 C +ATOM 1309 CD2 TYR A 172 -12.165 86.500 14.230 1.00 32.81 C +ATOM 1310 CE1 TYR A 172 -11.221 84.664 12.356 1.00 30.92 C +ATOM 1311 CE2 TYR A 172 -10.833 86.565 13.796 1.00 32.34 C +ATOM 1312 CZ TYR A 172 -10.370 85.642 12.857 1.00 32.84 C +ATOM 1313 OH TYR A 172 -9.066 85.704 12.415 1.00 32.67 O +ATOM 1314 N ARG A 173 -12.775 83.201 16.322 1.00 31.94 N +ATOM 1315 CA ARG A 173 -11.804 83.121 17.390 1.00 35.17 C +ATOM 1316 C ARG A 173 -10.423 83.559 16.895 1.00 36.29 C +ATOM 1317 O ARG A 173 -9.672 82.769 16.303 1.00 36.89 O +ATOM 1318 CB ARG A 173 -11.814 81.700 17.957 1.00 38.04 C +ATOM 1319 CG ARG A 173 -13.129 81.380 18.683 1.00 43.22 C +ATOM 1320 CD ARG A 173 -13.308 79.891 18.997 1.00 48.70 C +ATOM 1321 NE ARG A 173 -14.229 79.648 20.120 1.00 52.10 N +ATOM 1322 CZ ARG A 173 -15.479 79.183 20.017 1.00 56.02 C +ATOM 1323 NH1 ARG A 173 -16.025 78.896 18.827 1.00 55.91 N +ATOM 1324 NH2 ARG A 173 -16.171 78.947 21.128 1.00 57.08 N +ATOM 1325 N ALA A 174 -10.112 84.834 17.133 1.00 35.92 N +ATOM 1326 CA ALA A 174 -8.848 85.442 16.713 1.00 38.45 C +ATOM 1327 C ALA A 174 -7.577 84.630 17.013 1.00 39.84 C +ATOM 1328 O ALA A 174 -6.729 84.451 16.133 1.00 41.60 O +ATOM 1329 CB ALA A 174 -8.726 86.849 17.281 1.00 36.68 C +ATOM 1330 N PRO A 175 -7.427 84.122 18.251 1.00 40.47 N +ATOM 1331 CA PRO A 175 -6.233 83.338 18.577 1.00 39.64 C +ATOM 1332 C PRO A 175 -5.954 82.215 17.583 1.00 39.75 C +ATOM 1333 O PRO A 175 -4.822 82.053 17.123 1.00 40.17 O +ATOM 1334 CB PRO A 175 -6.565 82.785 19.959 1.00 37.63 C +ATOM 1335 CG PRO A 175 -7.327 83.894 20.564 1.00 38.45 C +ATOM 1336 CD PRO A 175 -8.275 84.277 19.447 1.00 40.77 C +ATOM 1337 N THR A 176 -6.994 81.478 17.209 1.00 38.81 N +ATOM 1338 CA THR A 176 -6.813 80.367 16.287 1.00 38.81 C +ATOM 1339 C THR A 176 -7.237 80.661 14.858 1.00 40.12 C +ATOM 1340 O THR A 176 -7.344 79.741 14.038 1.00 40.84 O +ATOM 1341 CB THR A 176 -7.542 79.115 16.784 1.00 37.89 C +ATOM 1342 OG1 THR A 176 -8.959 79.311 16.696 1.00 40.18 O +ATOM 1343 CG2 THR A 176 -7.175 78.848 18.222 1.00 35.64 C +ATOM 1344 N LYS A 177 -7.518 81.930 14.575 1.00 40.65 N +ATOM 1345 CA LYS A 177 -7.923 82.365 13.236 1.00 42.38 C +ATOM 1346 C LYS A 177 -9.009 81.504 12.583 1.00 41.99 C +ATOM 1347 O LYS A 177 -9.007 81.336 11.364 1.00 44.33 O +ATOM 1348 CB LYS A 177 -6.690 82.416 12.322 1.00 42.65 C +ATOM 1349 CG LYS A 177 -5.579 83.306 12.852 1.00 46.47 C +ATOM 1350 CD LYS A 177 -4.329 83.177 12.009 1.00 52.36 C +ATOM 1351 CE LYS A 177 -3.209 84.069 12.548 1.00 54.87 C +ATOM 1352 NZ LYS A 177 -1.944 83.953 11.743 1.00 58.13 N +ATOM 1353 N SER A 178 -9.934 80.964 13.376 1.00 40.97 N +ATOM 1354 CA SER A 178 -10.982 80.119 12.811 1.00 41.22 C +ATOM 1355 C SER A 178 -12.372 80.737 12.812 1.00 40.27 C +ATOM 1356 O SER A 178 -12.785 81.405 13.767 1.00 41.32 O +ATOM 1357 CB SER A 178 -11.026 78.755 13.502 1.00 42.85 C +ATOM 1358 OG SER A 178 -11.730 78.828 14.729 1.00 46.89 O +ATOM 1359 N LEU A 179 -13.096 80.467 11.732 1.00 38.44 N +ATOM 1360 CA LEU A 179 -14.446 80.965 11.542 1.00 35.78 C +ATOM 1361 C LEU A 179 -15.410 79.783 11.527 1.00 34.08 C +ATOM 1362 O LEU A 179 -15.214 78.820 10.788 1.00 34.24 O +ATOM 1363 CB LEU A 179 -14.528 81.721 10.218 1.00 33.37 C +ATOM 1364 CG LEU A 179 -15.779 82.568 10.017 1.00 32.36 C +ATOM 1365 CD1 LEU A 179 -15.935 83.534 11.185 1.00 33.30 C +ATOM 1366 CD2 LEU A 179 -15.654 83.339 8.732 1.00 30.28 C +ATOM 1367 N THR A 180 -16.445 79.851 12.351 1.00 32.60 N +ATOM 1368 CA THR A 180 -17.404 78.762 12.398 1.00 32.69 C +ATOM 1369 C THR A 180 -18.844 79.218 12.202 1.00 33.17 C +ATOM 1370 O THR A 180 -19.360 80.059 12.949 1.00 32.77 O +ATOM 1371 CB THR A 180 -17.295 77.980 13.715 1.00 31.66 C +ATOM 1372 OG1 THR A 180 -15.931 77.621 13.934 1.00 32.99 O +ATOM 1373 CG2 THR A 180 -18.130 76.709 13.660 1.00 28.24 C +ATOM 1374 N VAL A 181 -19.461 78.677 11.156 1.00 31.98 N +ATOM 1375 CA VAL A 181 -20.839 78.963 10.835 1.00 32.82 C +ATOM 1376 C VAL A 181 -21.650 77.804 11.385 1.00 33.94 C +ATOM 1377 O VAL A 181 -21.398 76.640 11.068 1.00 31.79 O +ATOM 1378 CB VAL A 181 -21.060 79.075 9.335 1.00 32.53 C +ATOM 1379 CG1 VAL A 181 -22.525 79.365 9.046 1.00 33.07 C +ATOM 1380 CG2 VAL A 181 -20.180 80.169 8.773 1.00 32.20 C +ATOM 1381 N CYX A 182 -22.648 78.147 12.184 1.00 36.13 N +ATOM 1382 CA CYX A 182 -23.486 77.167 12.824 1.00 36.81 C +ATOM 1383 C CYX A 182 -24.960 77.406 12.526 1.00 36.71 C +ATOM 1384 O CYX A 182 -25.616 78.197 13.208 1.00 39.98 O +ATOM 1385 CB CYX A 182 -23.246 77.279 14.308 1.00 39.99 C +ATOM 1386 SG CYX A 182 -23.593 75.730 15.150 1.00 51.92 S +ATOM 1387 N LEU A 183 -25.495 76.696 11.538 1.00 35.09 N +ATOM 1388 CA LEU A 183 -26.896 76.864 11.145 1.00 33.70 C +ATOM 1389 C LEU A 183 -27.798 75.717 11.571 1.00 33.67 C +ATOM 1390 O LEU A 183 -27.410 74.559 11.513 1.00 32.77 O +ATOM 1391 CB LEU A 183 -26.992 77.061 9.625 1.00 34.10 C +ATOM 1392 CG LEU A 183 -28.337 77.421 8.979 1.00 32.87 C +ATOM 1393 CD1 LEU A 183 -28.095 78.180 7.707 1.00 32.02 C +ATOM 1394 CD2 LEU A 183 -29.182 76.184 8.718 1.00 33.93 C +ATOM 1395 N SER A 184 -29.025 76.045 11.957 1.00 34.86 N +ATOM 1396 CA SER A 184 -29.989 75.030 12.372 1.00 37.90 C +ATOM 1397 C SER A 184 -31.441 75.485 12.206 1.00 39.48 C +ATOM 1398 O SER A 184 -31.763 76.659 12.387 1.00 39.55 O +ATOM 1399 CB SER A 184 -29.755 74.638 13.832 1.00 36.61 C +ATOM 1400 OG SER A 184 -29.968 75.739 14.695 1.00 36.10 O +ATOM 1401 N TYR A 185 -32.301 74.544 11.833 1.00 41.16 N +ATOM 1402 CA TYR A 185 -33.724 74.805 11.665 1.00 41.28 C +ATOM 1403 C TYR A 185 -34.433 74.179 12.857 1.00 42.52 C +ATOM 1404 O TYR A 185 -34.557 72.963 12.951 1.00 42.68 O +ATOM 1405 CB TYR A 185 -34.241 74.167 10.374 1.00 39.26 C +ATOM 1406 CG TYR A 185 -33.837 74.900 9.122 1.00 36.73 C +ATOM 1407 CD1 TYR A 185 -34.463 76.095 8.766 1.00 35.09 C +ATOM 1408 CD2 TYR A 185 -32.836 74.400 8.286 1.00 34.23 C +ATOM 1409 CE1 TYR A 185 -34.111 76.774 7.614 1.00 34.11 C +ATOM 1410 CE2 TYR A 185 -32.473 75.075 7.126 1.00 32.32 C +ATOM 1411 CZ TYR A 185 -33.120 76.265 6.797 1.00 34.28 C +ATOM 1412 OH TYR A 185 -32.796 76.959 5.653 1.00 35.24 O +ATOM 1413 N PRO A 186 -34.907 75.010 13.792 1.00 44.27 N +ATOM 1414 CA PRO A 186 -35.584 74.491 14.983 1.00 45.20 C +ATOM 1415 C PRO A 186 -36.830 73.652 14.691 1.00 46.06 C +ATOM 1416 O PRO A 186 -37.151 72.719 15.438 1.00 47.07 O +ATOM 1417 CB PRO A 186 -35.907 75.770 15.767 1.00 43.89 C +ATOM 1418 CG PRO A 186 -36.022 76.811 14.705 1.00 44.06 C +ATOM 1419 CD PRO A 186 -34.881 76.478 13.790 1.00 43.94 C +ATOM 1420 N SER A 187 -37.489 73.944 13.575 1.00 46.81 N +ATOM 1421 CA SER A 187 -38.699 73.234 13.196 1.00 48.90 C +ATOM 1422 C SER A 187 -38.529 71.724 13.021 1.00 49.74 C +ATOM 1423 O SER A 187 -39.344 70.951 13.520 1.00 51.59 O +ATOM 1424 CB SER A 187 -39.290 73.835 11.924 1.00 49.73 C +ATOM 1425 OG SER A 187 -38.489 73.529 10.796 1.00 53.36 O +ATOM 1426 N ASP A 188 -37.475 71.303 12.323 1.00 50.75 N +ATOM 1427 CA ASP A 188 -37.247 69.874 12.087 1.00 50.65 C +ATOM 1428 C ASP A 188 -35.864 69.331 12.453 1.00 49.72 C +ATOM 1429 O ASP A 188 -35.454 68.286 11.948 1.00 51.53 O +ATOM 1430 CB ASP A 188 -37.582 69.508 10.633 1.00 52.57 C +ATOM 1431 CG ASP A 188 -36.550 70.008 9.637 1.00 54.21 C +ATOM 1432 OD1 ASP A 188 -35.782 70.941 9.954 1.00 57.83 O +ATOM 1433 OD2 ASP A 188 -36.506 69.455 8.523 1.00 54.34 O +ATOM 1434 N GLY A 189 -35.143 70.052 13.304 1.00 48.95 N +ATOM 1435 CA GLY A 189 -33.828 69.610 13.737 1.00 47.20 C +ATOM 1436 C GLY A 189 -32.709 69.598 12.708 1.00 46.72 C +ATOM 1437 O GLY A 189 -31.567 69.267 13.049 1.00 50.12 O +ATOM 1438 N THR A 190 -33.019 69.940 11.460 1.00 43.73 N +ATOM 1439 CA THR A 190 -32.017 69.977 10.394 1.00 41.22 C +ATOM 1440 C THR A 190 -30.946 71.028 10.694 1.00 40.68 C +ATOM 1441 O THR A 190 -31.264 72.193 10.936 1.00 41.38 O +ATOM 1442 CB THR A 190 -32.665 70.326 9.039 1.00 39.82 C +ATOM 1443 OG1 THR A 190 -33.663 69.351 8.726 1.00 41.82 O +ATOM 1444 CG2 THR A 190 -31.628 70.349 7.937 1.00 38.09 C +ATOM 1445 N SER A 191 -29.678 70.628 10.653 1.00 39.12 N +ATOM 1446 CA SER A 191 -28.588 71.564 10.919 1.00 36.99 C +ATOM 1447 C SER A 191 -27.329 71.315 10.086 1.00 35.75 C +ATOM 1448 O SER A 191 -27.046 70.189 9.695 1.00 35.59 O +ATOM 1449 CB SER A 191 -28.256 71.583 12.416 1.00 37.33 C +ATOM 1450 OG SER A 191 -28.014 70.287 12.926 1.00 34.18 O +ATOM 1451 N ASN A 192 -26.598 72.390 9.793 1.00 36.46 N +ATOM 1452 CA ASN A 192 -25.360 72.338 9.000 1.00 37.44 C +ATOM 1453 C ASN A 192 -24.252 73.137 9.690 1.00 36.08 C +ATOM 1454 O ASN A 192 -24.526 74.072 10.446 1.00 35.73 O +ATOM 1455 CB ASN A 192 -25.588 72.924 7.595 1.00 37.54 C +ATOM 1456 CG ASN A 192 -26.666 72.199 6.825 1.00 36.42 C +ATOM 1457 OD1 ASN A 192 -26.688 70.970 6.773 1.00 38.42 O +ATOM 1458 ND2 ASN A 192 -27.571 72.958 6.222 1.00 35.02 N +ATOM 1459 N ILE A 193 -23.002 72.804 9.394 1.00 35.05 N +ATOM 1460 CA ILE A 193 -21.890 73.514 10.015 1.00 36.11 C +ATOM 1461 C ILE A 193 -20.644 73.549 9.143 1.00 36.97 C +ATOM 1462 O ILE A 193 -20.365 72.607 8.388 1.00 37.86 O +ATOM 1463 CB ILE A 193 -21.512 72.902 11.394 1.00 35.32 C +ATOM 1464 CG1 ILE A 193 -20.508 73.811 12.118 1.00 33.60 C +ATOM 1465 CG2 ILE A 193 -20.937 71.494 11.210 1.00 32.44 C +ATOM 1466 CD1 ILE A 193 -20.204 73.400 13.534 1.00 31.81 C +ATOM 1467 N ILE A 194 -19.881 74.629 9.289 1.00 36.34 N +ATOM 1468 CA ILE A 194 -18.660 74.811 8.531 1.00 35.46 C +ATOM 1469 C ILE A 194 -17.644 75.664 9.294 1.00 36.39 C +ATOM 1470 O ILE A 194 -18.005 76.610 9.999 1.00 37.37 O +ATOM 1471 CB ILE A 194 -18.966 75.421 7.147 1.00 35.52 C +ATOM 1472 CG1 ILE A 194 -17.691 75.528 6.329 1.00 39.55 C +ATOM 1473 CG2 ILE A 194 -19.623 76.777 7.281 1.00 37.83 C +ATOM 1474 CD1 ILE A 194 -16.976 74.201 6.163 1.00 45.62 C +ATOM 1475 N THR A 195 -16.375 75.278 9.197 1.00 36.63 N +ATOM 1476 CA THR A 195 -15.294 76.003 9.857 1.00 35.41 C +ATOM 1477 C THR A 195 -14.187 76.223 8.860 1.00 35.50 C +ATOM 1478 O THR A 195 -13.949 75.363 8.014 1.00 37.43 O +ATOM 1479 CB THR A 195 -14.693 75.199 10.992 1.00 35.08 C +ATOM 1480 OG1 THR A 195 -15.717 74.865 11.931 1.00 37.40 O +ATOM 1481 CG2 THR A 195 -13.599 76.006 11.682 1.00 35.17 C +ATOM 1482 N ALA A 196 -13.490 77.349 8.981 1.00 35.01 N +ATOM 1483 CA ALA A 196 -12.393 77.661 8.074 1.00 37.47 C +ATOM 1484 C ALA A 196 -11.425 78.628 8.734 1.00 39.75 C +ATOM 1485 O ALA A 196 -11.820 79.388 9.623 1.00 40.04 O +ATOM 1486 CB ALA A 196 -12.933 78.255 6.787 1.00 35.46 C +ATOM 1487 N SER A 197 -10.157 78.579 8.321 1.00 40.79 N +ATOM 1488 CA SER A 197 -9.138 79.467 8.874 1.00 42.61 C +ATOM 1489 C SER A 197 -9.004 80.723 8.045 1.00 43.24 C +ATOM 1490 O SER A 197 -8.904 80.658 6.820 1.00 47.17 O +ATOM 1491 CB SER A 197 -7.797 78.760 8.981 1.00 43.20 C +ATOM 1492 OG SER A 197 -7.863 77.776 10.002 1.00 49.18 O +ATOM 1493 N VAL A 198 -9.038 81.870 8.714 1.00 41.44 N +ATOM 1494 CA VAL A 198 -8.935 83.150 8.040 1.00 42.12 C +ATOM 1495 C VAL A 198 -8.245 84.156 8.939 1.00 44.22 C +ATOM 1496 O VAL A 198 -8.537 84.223 10.132 1.00 44.97 O +ATOM 1497 CB VAL A 198 -10.319 83.738 7.744 1.00 42.92 C +ATOM 1498 CG1 VAL A 198 -10.184 84.936 6.839 1.00 43.38 C +ATOM 1499 CG2 VAL A 198 -11.235 82.703 7.137 1.00 42.58 C +ATOM 1500 N ASP A 199 -7.338 84.941 8.371 1.00 45.81 N +ATOM 1501 CA ASP A 199 -6.660 85.969 9.150 1.00 47.12 C +ATOM 1502 C ASP A 199 -7.202 87.328 8.745 1.00 46.97 C +ATOM 1503 O ASP A 199 -6.798 87.895 7.720 1.00 47.79 O +ATOM 1504 CB ASP A 199 -5.146 85.942 8.941 1.00 51.17 C +ATOM 1505 CG ASP A 199 -4.402 86.928 9.866 1.00 54.65 C +ATOM 1506 OD1 ASP A 199 -5.052 87.732 10.582 1.00 55.22 O +ATOM 1507 OD2 ASP A 199 -3.153 86.892 9.883 1.00 57.81 O +ATOM 1508 N LEU A 200 -8.090 87.861 9.574 1.00 45.62 N +ATOM 1509 CA LEU A 200 -8.699 89.155 9.301 1.00 45.55 C +ATOM 1510 C LEU A 200 -7.674 90.244 9.021 1.00 44.80 C +ATOM 1511 O LEU A 200 -7.839 91.040 8.093 1.00 44.67 O +ATOM 1512 CB LEU A 200 -9.558 89.588 10.481 1.00 45.97 C +ATOM 1513 CG LEU A 200 -10.637 88.634 10.972 1.00 46.40 C +ATOM 1514 CD1 LEU A 200 -11.382 89.299 12.123 1.00 45.88 C +ATOM 1515 CD2 LEU A 200 -11.593 88.295 9.835 1.00 46.62 C +ATOM 1516 N LYS A 201 -6.621 90.272 9.832 1.00 45.68 N +ATOM 1517 CA LYS A 201 -5.568 91.273 9.703 1.00 46.78 C +ATOM 1518 C LYS A 201 -5.003 91.299 8.279 1.00 47.20 C +ATOM 1519 O LYS A 201 -4.766 92.373 7.701 1.00 45.32 O +ATOM 1520 CB LYS A 201 -4.450 90.983 10.705 1.00 48.04 C +ATOM 1521 CG LYS A 201 -3.449 92.122 10.835 1.00 52.56 C +ATOM 1522 CD LYS A 201 -2.156 91.689 11.550 1.00 54.66 C +ATOM 1523 CE LYS A 201 -2.392 91.338 13.018 1.00 56.28 C +ATOM 1524 NZ LYS A 201 -1.137 90.978 13.738 1.00 55.72 N +ATOM 1525 N ALA A 202 -4.854 90.107 7.702 1.00 46.53 N +ATOM 1526 CA ALA A 202 -4.315 89.957 6.357 1.00 45.59 C +ATOM 1527 C ALA A 202 -5.307 90.261 5.238 1.00 46.51 C +ATOM 1528 O ALA A 202 -4.922 90.282 4.065 1.00 47.75 O +ATOM 1529 CB ALA A 202 -3.753 88.552 6.181 1.00 43.33 C +ATOM 1530 N ILE A 203 -6.569 90.526 5.578 1.00 46.62 N +ATOM 1531 CA ILE A 203 -7.573 90.783 4.542 1.00 45.48 C +ATOM 1532 C ILE A 203 -8.359 92.100 4.617 1.00 45.23 C +ATOM 1533 O ILE A 203 -8.517 92.801 3.606 1.00 45.00 O +ATOM 1534 CB ILE A 203 -8.538 89.582 4.434 1.00 43.34 C +ATOM 1535 CG1 ILE A 203 -7.753 88.349 3.978 1.00 44.03 C +ATOM 1536 CG2 ILE A 203 -9.658 89.877 3.444 1.00 41.05 C +ATOM 1537 CD1 ILE A 203 -8.221 87.049 4.589 1.00 45.69 C +ATOM 1538 N LEU A 204 -8.862 92.430 5.799 1.00 43.15 N +ATOM 1539 CA LEU A 204 -9.641 93.649 5.963 1.00 41.42 C +ATOM 1540 C LEU A 204 -8.792 94.751 6.578 1.00 40.74 C +ATOM 1541 O LEU A 204 -7.735 94.486 7.154 1.00 40.75 O +ATOM 1542 CB LEU A 204 -10.846 93.372 6.869 1.00 41.52 C +ATOM 1543 CG LEU A 204 -11.715 92.152 6.549 1.00 41.01 C +ATOM 1544 CD1 LEU A 204 -12.622 91.869 7.722 1.00 42.88 C +ATOM 1545 CD2 LEU A 204 -12.522 92.367 5.288 1.00 40.65 C +ATOM 1546 N PRO A 205 -9.198 96.014 6.381 1.00 40.18 N +ATOM 1547 CA PRO A 205 -8.494 97.138 7.003 1.00 40.19 C +ATOM 1548 C PRO A 205 -8.929 97.201 8.476 1.00 41.71 C +ATOM 1549 O PRO A 205 -9.858 96.498 8.884 1.00 41.11 O +ATOM 1550 CB PRO A 205 -9.005 98.337 6.206 1.00 37.93 C +ATOM 1551 CG PRO A 205 -10.404 97.941 5.874 1.00 38.35 C +ATOM 1552 CD PRO A 205 -10.246 96.493 5.460 1.00 39.43 C +ATOM 1553 N GLU A 206 -8.270 98.035 9.272 1.00 42.61 N +ATOM 1554 CA GLU A 206 -8.611 98.148 10.689 1.00 43.00 C +ATOM 1555 C GLU A 206 -10.097 98.394 10.961 1.00 41.62 C +ATOM 1556 O GLU A 206 -10.693 97.753 11.829 1.00 41.12 O +ATOM 1557 CB GLU A 206 -7.808 99.264 11.332 1.00 47.38 C +ATOM 1558 CG GLU A 206 -6.315 99.055 11.326 1.00 53.34 C +ATOM 1559 CD GLU A 206 -5.591 100.257 11.910 1.00 58.78 C +ATOM 1560 OE1 GLU A 206 -5.670 100.473 13.150 1.00 59.07 O +ATOM 1561 OE2 GLU A 206 -4.963 101.000 11.116 1.00 60.98 O +ATOM 1562 N TRP A 207 -10.685 99.331 10.222 1.00 39.61 N +ATOM 1563 CA TRP A 207 -12.089 99.670 10.395 1.00 38.23 C +ATOM 1564 C TRP A 207 -13.009 99.101 9.329 1.00 38.07 C +ATOM 1565 O TRP A 207 -12.939 99.483 8.163 1.00 39.90 O +ATOM 1566 CB TRP A 207 -12.249 101.177 10.457 1.00 37.93 C +ATOM 1567 CG TRP A 207 -11.587 101.752 11.639 1.00 40.88 C +ATOM 1568 CD1 TRP A 207 -10.310 102.209 11.717 1.00 40.88 C +ATOM 1569 CD2 TRP A 207 -12.150 101.906 12.942 1.00 44.26 C +ATOM 1570 NE1 TRP A 207 -10.034 102.641 12.993 1.00 44.29 N +ATOM 1571 CE2 TRP A 207 -11.152 102.467 13.769 1.00 45.88 C +ATOM 1572 CE3 TRP A 207 -13.412 101.628 13.497 1.00 43.40 C +ATOM 1573 CZ2 TRP A 207 -11.367 102.753 15.123 1.00 46.63 C +ATOM 1574 CZ3 TRP A 207 -13.627 101.912 14.839 1.00 43.31 C +ATOM 1575 CH2 TRP A 207 -12.610 102.471 15.638 1.00 45.55 C +ATOM 1576 N VAL A 208 -13.892 98.204 9.748 1.00 36.54 N +ATOM 1577 CA VAL A 208 -14.846 97.590 8.848 1.00 34.27 C +ATOM 1578 C VAL A 208 -16.289 97.978 9.187 1.00 36.04 C +ATOM 1579 O VAL A 208 -16.564 98.711 10.141 1.00 35.69 O +ATOM 1580 CB VAL A 208 -14.731 96.060 8.889 1.00 32.80 C +ATOM 1581 CG1 VAL A 208 -13.390 95.626 8.361 1.00 34.55 C +ATOM 1582 CG2 VAL A 208 -14.926 95.554 10.304 1.00 31.30 C +ATOM 1583 N SER A 209 -17.201 97.504 8.354 1.00 36.17 N +ATOM 1584 CA SER A 209 -18.624 97.727 8.526 1.00 37.01 C +ATOM 1585 C SER A 209 -19.229 96.355 8.340 1.00 36.62 C +ATOM 1586 O SER A 209 -18.826 95.620 7.435 1.00 35.78 O +ATOM 1587 CB SER A 209 -19.164 98.675 7.451 1.00 39.53 C +ATOM 1588 OG SER A 209 -19.393 99.979 7.975 1.00 46.58 O +ATOM 1589 N VAL A 210 -20.142 95.975 9.231 1.00 37.12 N +ATOM 1590 CA VAL A 210 -20.785 94.665 9.125 1.00 36.03 C +ATOM 1591 C VAL A 210 -22.254 94.775 8.758 1.00 36.16 C +ATOM 1592 O VAL A 210 -22.907 95.790 9.025 1.00 35.65 O +ATOM 1593 CB VAL A 210 -20.670 93.833 10.430 1.00 35.31 C +ATOM 1594 CG1 VAL A 210 -19.228 93.488 10.712 1.00 34.66 C +ATOM 1595 CG2 VAL A 210 -21.268 94.587 11.597 1.00 34.51 C +ATOM 1596 N GLY A 211 -22.768 93.716 8.148 1.00 35.97 N +ATOM 1597 CA GLY A 211 -24.161 93.705 7.764 1.00 35.04 C +ATOM 1598 C GLY A 211 -24.514 92.513 6.914 1.00 35.19 C +ATOM 1599 O GLY A 211 -23.770 91.528 6.842 1.00 35.86 O +ATOM 1600 N PHE A 212 -25.672 92.609 6.269 1.00 35.53 N +ATOM 1601 CA PHE A 212 -26.166 91.557 5.397 1.00 35.96 C +ATOM 1602 C PHE A 212 -26.383 92.085 3.986 1.00 36.72 C +ATOM 1603 O PHE A 212 -26.436 93.294 3.754 1.00 36.91 O +ATOM 1604 CB PHE A 212 -27.500 91.026 5.911 1.00 35.67 C +ATOM 1605 CG PHE A 212 -27.474 90.574 7.341 1.00 35.84 C +ATOM 1606 CD1 PHE A 212 -27.120 89.269 7.671 1.00 33.71 C +ATOM 1607 CD2 PHE A 212 -27.832 91.447 8.356 1.00 34.90 C +ATOM 1608 CE1 PHE A 212 -27.131 88.844 8.978 1.00 31.53 C +ATOM 1609 CE2 PHE A 212 -27.844 91.027 9.665 1.00 35.01 C +ATOM 1610 CZ PHE A 212 -27.492 89.721 9.978 1.00 34.38 C +ATOM 1611 N SER A 213 -26.502 91.157 3.046 1.00 38.64 N +ATOM 1612 CA SER A 213 -26.753 91.480 1.649 1.00 39.81 C +ATOM 1613 C SER A 213 -27.342 90.264 0.935 1.00 41.24 C +ATOM 1614 O SER A 213 -27.290 89.134 1.431 1.00 41.47 O +ATOM 1615 CB SER A 213 -25.478 91.951 0.946 1.00 37.73 C +ATOM 1616 OG SER A 213 -24.551 90.895 0.777 1.00 37.40 O +ATOM 1617 N GLY A 214 -27.937 90.512 -0.221 1.00 44.07 N +ATOM 1618 CA GLY A 214 -28.528 89.435 -0.983 1.00 46.52 C +ATOM 1619 C GLY A 214 -29.023 89.943 -2.315 1.00 47.59 C +ATOM 1620 O GLY A 214 -28.912 91.135 -2.619 1.00 46.60 O +ATOM 1621 N GLY A 215 -29.583 89.036 -3.107 1.00 48.63 N +ATOM 1622 CA GLY A 215 -30.094 89.411 -4.408 1.00 48.92 C +ATOM 1623 C GLY A 215 -31.053 88.406 -5.005 1.00 50.41 C +ATOM 1624 O GLY A 215 -31.265 87.317 -4.461 1.00 49.44 O +ATOM 1625 N VAL A 216 -31.660 88.814 -6.118 1.00 53.22 N +ATOM 1626 CA VAL A 216 -32.616 88.014 -6.890 1.00 54.61 C +ATOM 1627 C VAL A 216 -32.359 88.422 -8.343 1.00 56.44 C +ATOM 1628 O VAL A 216 -32.774 89.501 -8.774 1.00 57.50 O +ATOM 1629 CB VAL A 216 -34.086 88.348 -6.503 1.00 52.61 C +ATOM 1630 CG1 VAL A 216 -35.047 87.604 -7.397 1.00 51.91 C +ATOM 1631 CG2 VAL A 216 -34.355 87.981 -5.058 1.00 51.68 C +ATOM 1632 N GLY A 217 -31.640 87.577 -9.080 1.00 58.64 N +ATOM 1633 CA GLY A 217 -31.297 87.888 -10.463 1.00 61.69 C +ATOM 1634 C GLY A 217 -32.303 87.496 -11.523 1.00 61.94 C +ATOM 1635 O GLY A 217 -32.058 87.684 -12.725 1.00 63.85 O +ATOM 1636 N ASN A 218 -33.446 86.985 -11.075 1.00 61.69 N +ATOM 1637 CA ASN A 218 -34.507 86.539 -11.969 1.00 61.18 C +ATOM 1638 C ASN A 218 -35.843 86.476 -11.233 1.00 56.87 C +ATOM 1639 O ASN A 218 -36.099 85.551 -10.463 1.00 55.21 O +ATOM 1640 CB ASN A 218 -34.145 85.160 -12.555 1.00 65.38 C +ATOM 1641 CG ASN A 218 -35.312 84.490 -13.268 1.00 67.57 C +ATOM 1642 OD1 ASN A 218 -35.543 83.292 -13.099 1.00 69.17 O +ATOM 1643 ND2 ASN A 218 -36.051 85.257 -14.063 1.00 69.66 N +ATOM 1644 N ALA A 219 -36.705 87.443 -11.536 1.00 52.43 N +ATOM 1645 CA ALA A 219 -38.026 87.555 -10.929 1.00 49.72 C +ATOM 1646 C ALA A 219 -38.880 86.302 -11.047 1.00 50.11 C +ATOM 1647 O ALA A 219 -39.843 86.136 -10.302 1.00 48.65 O +ATOM 1648 CB ALA A 219 -38.761 88.729 -11.532 1.00 47.81 C +ATOM 1649 N ALA A 220 -38.522 85.426 -11.981 1.00 53.16 N +ATOM 1650 CA ALA A 220 -39.261 84.194 -12.214 1.00 55.37 C +ATOM 1651 C ALA A 220 -39.082 83.215 -11.062 1.00 57.33 C +ATOM 1652 O ALA A 220 -40.044 82.585 -10.618 1.00 57.56 O +ATOM 1653 CB ALA A 220 -38.821 83.560 -13.525 1.00 55.70 C +ATOM 1654 N GLU A 221 -37.847 83.093 -10.584 1.00 58.14 N +ATOM 1655 CA GLU A 221 -37.537 82.197 -9.478 1.00 60.13 C +ATOM 1656 C GLU A 221 -37.345 82.955 -8.156 1.00 58.28 C +ATOM 1657 O GLU A 221 -36.351 82.777 -7.453 1.00 57.45 O +ATOM 1658 CB GLU A 221 -36.307 81.357 -9.811 1.00 64.81 C +ATOM 1659 CG GLU A 221 -36.531 80.331 -10.914 1.00 73.07 C +ATOM 1660 CD GLU A 221 -35.339 79.397 -11.088 1.00 79.48 C +ATOM 1661 OE1 GLU A 221 -34.319 79.842 -11.672 1.00 81.74 O +ATOM 1662 OE2 GLU A 221 -35.421 78.224 -10.634 1.00 82.20 O +ATOM 1663 N PHE A 222 -38.351 83.754 -7.811 1.00 55.94 N +ATOM 1664 CA PHE A 222 -38.374 84.581 -6.606 1.00 52.72 C +ATOM 1665 C PHE A 222 -38.392 83.864 -5.251 1.00 51.83 C +ATOM 1666 O PHE A 222 -39.034 82.824 -5.083 1.00 53.78 O +ATOM 1667 CB PHE A 222 -39.580 85.526 -6.682 1.00 51.49 C +ATOM 1668 CG PHE A 222 -39.782 86.374 -5.452 1.00 49.48 C +ATOM 1669 CD1 PHE A 222 -40.550 85.905 -4.396 1.00 50.04 C +ATOM 1670 CD2 PHE A 222 -39.205 87.643 -5.354 1.00 48.15 C +ATOM 1671 CE1 PHE A 222 -40.744 86.684 -3.264 1.00 51.35 C +ATOM 1672 CE2 PHE A 222 -39.394 88.432 -4.224 1.00 48.06 C +ATOM 1673 CZ PHE A 222 -40.160 87.952 -3.178 1.00 50.43 C +ATOM 1674 N GLU A 223 -37.731 84.493 -4.279 1.00 49.27 N +ATOM 1675 CA GLU A 223 -37.658 84.030 -2.900 1.00 46.21 C +ATOM 1676 C GLU A 223 -37.297 85.231 -2.034 1.00 45.31 C +ATOM 1677 O GLU A 223 -36.682 86.189 -2.507 1.00 43.90 O +ATOM 1678 CB GLU A 223 -36.602 82.939 -2.725 1.00 46.98 C +ATOM 1679 CG GLU A 223 -35.183 83.452 -2.699 1.00 45.49 C +ATOM 1680 CD GLU A 223 -34.139 82.356 -2.648 1.00 46.34 C +ATOM 1681 OE1 GLU A 223 -34.474 81.148 -2.725 1.00 45.10 O +ATOM 1682 OE2 GLU A 223 -32.955 82.721 -2.535 1.00 48.25 O +ATOM 1683 N THR A 224 -37.710 85.198 -0.773 1.00 45.56 N +ATOM 1684 CA THR A 224 -37.397 86.296 0.132 1.00 44.66 C +ATOM 1685 C THR A 224 -36.043 86.080 0.783 1.00 45.76 C +ATOM 1686 O THR A 224 -35.461 84.992 0.695 1.00 45.42 O +ATOM 1687 CB THR A 224 -38.454 86.464 1.233 1.00 42.96 C +ATOM 1688 OG1 THR A 224 -38.679 85.211 1.894 1.00 38.61 O +ATOM 1689 CG2 THR A 224 -39.747 86.994 0.642 1.00 42.39 C +ATOM 1690 N HIS A 225 -35.518 87.150 1.372 1.00 46.10 N +ATOM 1691 CA HIS A 225 -34.233 87.122 2.072 1.00 44.58 C +ATOM 1692 C HIS A 225 -34.453 88.023 3.268 1.00 44.63 C +ATOM 1693 O HIS A 225 -33.982 89.168 3.316 1.00 44.10 O +ATOM 1694 CB HIS A 225 -33.126 87.632 1.156 1.00 42.83 C +ATOM 1695 CG HIS A 225 -32.936 86.788 -0.066 1.00 42.24 C +ATOM 1696 ND1 HIS A 225 -32.232 85.610 -0.055 1.00 43.63 N +ATOM 1697 CD2 HIS A 225 -33.411 86.930 -1.332 1.00 40.49 C +ATOM 1698 CE1 HIS A 225 -32.273 85.053 -1.251 1.00 40.05 C +ATOM 1699 NE2 HIS A 225 -32.984 85.836 -2.042 1.00 41.46 N +ATOM 1700 N ASP A 226 -35.261 87.493 4.190 1.00 43.43 N +ATOM 1701 CA ASP A 226 -35.676 88.190 5.397 1.00 41.03 C +ATOM 1702 C ASP A 226 -34.921 87.778 6.637 1.00 37.86 C +ATOM 1703 O ASP A 226 -34.905 86.604 7.009 1.00 36.41 O +ATOM 1704 CB ASP A 226 -37.175 87.955 5.652 1.00 43.32 C +ATOM 1705 CG ASP A 226 -38.069 88.416 4.502 1.00 45.06 C +ATOM 1706 OD1 ASP A 226 -37.590 89.028 3.516 1.00 48.86 O +ATOM 1707 OD2 ASP A 226 -39.281 88.156 4.594 1.00 46.46 O +ATOM 1708 N VAL A 227 -34.286 88.755 7.269 1.00 35.25 N +ATOM 1709 CA VAL A 227 -33.576 88.514 8.513 1.00 33.81 C +ATOM 1710 C VAL A 227 -34.487 89.089 9.615 1.00 32.55 C +ATOM 1711 O VAL A 227 -34.974 90.223 9.523 1.00 26.83 O +ATOM 1712 CB VAL A 227 -32.136 89.096 8.494 1.00 31.52 C +ATOM 1713 CG1 VAL A 227 -32.023 90.153 7.454 1.00 36.06 C +ATOM 1714 CG2 VAL A 227 -31.743 89.640 9.850 1.00 32.52 C +ATOM 1715 N LEU A 228 -34.780 88.235 10.595 1.00 33.21 N +ATOM 1716 CA LEU A 228 -35.675 88.528 11.715 1.00 33.91 C +ATOM 1717 C LEU A 228 -35.091 89.163 12.967 1.00 34.70 C +ATOM 1718 O LEU A 228 -35.766 89.960 13.627 1.00 34.76 O +ATOM 1719 CB LEU A 228 -36.378 87.244 12.138 1.00 34.69 C +ATOM 1720 CG LEU A 228 -37.562 86.724 11.326 1.00 35.03 C +ATOM 1721 CD1 LEU A 228 -37.316 86.810 9.833 1.00 36.53 C +ATOM 1722 CD2 LEU A 228 -37.817 85.298 11.755 1.00 34.90 C +ATOM 1723 N SER A 229 -33.880 88.750 13.333 1.00 35.91 N +ATOM 1724 CA SER A 229 -33.202 89.256 14.526 1.00 35.13 C +ATOM 1725 C SER A 229 -31.685 89.233 14.324 1.00 35.29 C +ATOM 1726 O SER A 229 -31.166 88.463 13.500 1.00 34.85 O +ATOM 1727 CB SER A 229 -33.586 88.410 15.748 1.00 35.51 C +ATOM 1728 OG SER A 229 -33.202 87.050 15.572 1.00 39.14 O +ATOM 1729 N TRP A 230 -30.977 90.050 15.104 1.00 34.12 N +ATOM 1730 CA TRP A 230 -29.530 90.138 14.981 1.00 31.81 C +ATOM 1731 C TRP A 230 -28.792 90.551 16.245 1.00 31.24 C +ATOM 1732 O TRP A 230 -29.024 91.616 16.808 1.00 30.42 O +ATOM 1733 CB TRP A 230 -29.194 91.111 13.868 1.00 31.68 C +ATOM 1734 CG TRP A 230 -27.767 91.182 13.489 1.00 33.32 C +ATOM 1735 CD1 TRP A 230 -26.829 90.191 13.587 1.00 31.66 C +ATOM 1736 CD2 TRP A 230 -27.123 92.288 12.858 1.00 35.82 C +ATOM 1737 NE1 TRP A 230 -25.641 90.615 13.038 1.00 31.56 N +ATOM 1738 CE2 TRP A 230 -25.793 91.896 12.578 1.00 34.27 C +ATOM 1739 CE3 TRP A 230 -27.548 93.578 12.482 1.00 35.72 C +ATOM 1740 CZ2 TRP A 230 -24.884 92.747 11.944 1.00 34.95 C +ATOM 1741 CZ3 TRP A 230 -26.649 94.421 11.854 1.00 34.13 C +ATOM 1742 CH2 TRP A 230 -25.328 94.001 11.588 1.00 36.36 C +ATOM 1743 N TYR A 231 -27.861 89.704 16.644 1.00 30.69 N +ATOM 1744 CA TYR A 231 -27.041 89.946 17.803 1.00 29.97 C +ATOM 1745 C TYR A 231 -25.601 90.026 17.331 1.00 29.08 C +ATOM 1746 O TYR A 231 -25.144 89.182 16.563 1.00 26.87 O +ATOM 1747 CB TYR A 231 -27.179 88.796 18.797 1.00 34.61 C +ATOM 1748 CG TYR A 231 -26.220 88.914 19.958 1.00 40.55 C +ATOM 1749 CD1 TYR A 231 -26.490 89.788 21.006 1.00 42.75 C +ATOM 1750 CD2 TYR A 231 -25.010 88.202 19.980 1.00 40.62 C +ATOM 1751 CE1 TYR A 231 -25.592 89.964 22.041 1.00 45.09 C +ATOM 1752 CE2 TYR A 231 -24.105 88.370 21.012 1.00 42.71 C +ATOM 1753 CZ TYR A 231 -24.406 89.258 22.042 1.00 45.56 C +ATOM 1754 OH TYR A 231 -23.533 89.469 23.085 1.00 49.10 O +ATOM 1755 N PHE A 232 -24.880 91.032 17.800 1.00 28.86 N +ATOM 1756 CA PHE A 232 -23.484 91.173 17.423 1.00 30.71 C +ATOM 1757 C PHE A 232 -22.618 91.688 18.556 1.00 31.98 C +ATOM 1758 O PHE A 232 -22.965 92.645 19.245 1.00 32.40 O +ATOM 1759 CB PHE A 232 -23.322 92.085 16.212 1.00 29.06 C +ATOM 1760 CG PHE A 232 -21.928 92.128 15.686 1.00 28.34 C +ATOM 1761 CD1 PHE A 232 -21.503 91.199 14.749 1.00 31.56 C +ATOM 1762 CD2 PHE A 232 -21.018 93.056 16.166 1.00 29.30 C +ATOM 1763 CE1 PHE A 232 -20.181 91.193 14.297 1.00 33.47 C +ATOM 1764 CE2 PHE A 232 -19.691 93.061 15.721 1.00 30.27 C +ATOM 1765 CZ PHE A 232 -19.272 92.127 14.788 1.00 30.71 C +ATOM 1766 N THR A 233 -21.481 91.036 18.738 1.00 33.60 N +ATOM 1767 CA THR A 233 -20.539 91.430 19.764 1.00 34.90 C +ATOM 1768 C THR A 233 -19.138 91.214 19.227 1.00 35.62 C +ATOM 1769 O THR A 233 -18.847 90.187 18.608 1.00 34.17 O +ATOM 1770 CB THR A 233 -20.725 90.628 21.061 1.00 35.10 C +ATOM 1771 OG1 THR A 233 -19.913 91.202 22.088 1.00 38.53 O +ATOM 1772 CG2 THR A 233 -20.314 89.186 20.869 1.00 33.77 C +ATOM 1773 N SER A 234 -18.299 92.223 19.423 1.00 38.32 N +ATOM 1774 CA SER A 234 -16.913 92.198 18.979 1.00 40.42 C +ATOM 1775 C SER A 234 -16.038 92.630 20.136 1.00 43.36 C +ATOM 1776 O SER A 234 -16.483 93.381 21.011 1.00 42.35 O +ATOM 1777 CB SER A 234 -16.718 93.172 17.827 1.00 40.45 C +ATOM 1778 OG SER A 234 -15.549 93.953 18.010 1.00 43.39 O +ATOM 1779 N ASN A 235 -14.779 92.203 20.110 1.00 46.53 N +ATOM 1780 CA ASN A 235 -13.861 92.564 21.179 1.00 50.47 C +ATOM 1781 C ASN A 235 -12.405 92.369 20.794 1.00 50.79 C +ATOM 1782 O ASN A 235 -12.022 91.303 20.309 1.00 49.78 O +ATOM 1783 CB ASN A 235 -14.193 91.766 22.443 1.00 53.95 C +ATOM 1784 CG ASN A 235 -13.258 92.070 23.593 1.00 56.91 C +ATOM 1785 OD1 ASN A 235 -12.329 91.308 23.854 1.00 59.64 O +ATOM 1786 ND2 ASN A 235 -13.501 93.182 24.293 1.00 57.78 N +ATOM 1787 N LEU A 236 -11.607 93.411 21.037 1.00 52.30 N +ATOM 1788 CA LEU A 236 -10.169 93.426 20.747 1.00 53.95 C +ATOM 1789 C LEU A 236 -9.266 92.727 21.778 1.00 56.41 C +ATOM 1790 O LEU A 236 -9.007 93.274 22.863 1.00 57.54 O +ATOM 1791 CB LEU A 236 -9.700 94.865 20.568 1.00 51.24 C +ATOM 1792 CG LEU A 236 -9.772 95.361 19.128 1.00 51.10 C +ATOM 1793 CD1 LEU A 236 -9.483 96.849 19.079 1.00 51.86 C +ATOM 1794 CD2 LEU A 236 -8.782 94.587 18.275 1.00 48.37 C +ATOM 1795 N GLU A 237 -8.739 91.555 21.410 1.00 55.26 N +TER 1796 GLU A 237 +ATOM 1796 N SER B 238 -29.020 93.796 31.810 1.00 85.41 N +ATOM 1797 CA SER B 238 -28.280 92.536 31.500 1.00 85.75 C +ATOM 1798 C SER B 238 -29.090 91.266 31.832 1.00 85.29 C +ATOM 1799 O SER B 238 -30.218 91.343 32.336 1.00 85.77 O +ATOM 1800 CB SER B 238 -26.933 92.526 32.238 1.00 84.58 C +ATOM 1801 N ASP B 239 -28.499 90.103 31.543 1.00 83.43 N +ATOM 1802 CA ASP B 239 -29.127 88.798 31.776 1.00 79.24 C +ATOM 1803 C ASP B 239 -29.070 88.361 33.236 1.00 74.34 C +ATOM 1804 O ASP B 239 -28.328 88.928 34.033 1.00 74.79 O +ATOM 1805 CB ASP B 239 -28.449 87.730 30.908 1.00 83.08 C +ATOM 1806 CG ASP B 239 -28.438 88.094 29.432 1.00 87.20 C +ATOM 1807 OD1 ASP B 239 -27.478 88.766 28.993 1.00 90.87 O +ATOM 1808 OD2 ASP B 239 -29.386 87.714 28.711 1.00 88.05 O +ATOM 1809 N ASP B 240 -29.828 87.324 33.571 1.00 68.52 N +ATOM 1810 CA ASP B 240 -29.857 86.802 34.932 1.00 63.12 C +ATOM 1811 C ASP B 240 -28.490 86.350 35.429 1.00 58.96 C +ATOM 1812 O ASP B 240 -28.042 86.809 36.470 1.00 58.20 O +ATOM 1813 CB ASP B 240 -30.885 85.677 35.056 1.00 65.01 C +ATOM 1814 CG ASP B 240 -32.307 86.204 35.107 1.00 68.17 C +ATOM 1815 OD1 ASP B 240 -32.808 86.684 34.067 1.00 70.90 O +ATOM 1816 OD2 ASP B 240 -32.920 86.171 36.196 1.00 69.97 O +ATOM 1817 N LEU B 241 -27.829 85.463 34.687 1.00 54.84 N +ATOM 1818 CA LEU B 241 -26.500 84.980 35.067 1.00 49.05 C +ATOM 1819 C LEU B 241 -25.540 84.966 33.896 1.00 46.55 C +ATOM 1820 O LEU B 241 -25.925 84.738 32.757 1.00 47.39 O +ATOM 1821 CB LEU B 241 -26.554 83.572 35.662 1.00 47.93 C +ATOM 1822 CG LEU B 241 -25.195 83.081 36.183 1.00 45.79 C +ATOM 1823 CD1 LEU B 241 -24.763 83.908 37.368 1.00 46.26 C +ATOM 1824 CD2 LEU B 241 -25.251 81.630 36.570 1.00 46.90 C +ATOM 1825 N SER B 242 -24.267 85.142 34.202 1.00 45.54 N +ATOM 1826 CA SER B 242 -23.235 85.157 33.182 1.00 43.21 C +ATOM 1827 C SER B 242 -21.867 85.001 33.850 1.00 41.41 C +ATOM 1828 O SER B 242 -21.534 85.752 34.766 1.00 42.35 O +ATOM 1829 CB SER B 242 -23.316 86.479 32.411 1.00 42.98 C +ATOM 1830 OG SER B 242 -22.296 86.572 31.441 1.00 45.53 O +ATOM 1831 N PHE B 243 -21.115 83.982 33.452 1.00 38.76 N +ATOM 1832 CA PHE B 243 -19.786 83.780 34.010 1.00 37.25 C +ATOM 1833 C PHE B 243 -18.802 83.202 33.020 1.00 39.09 C +ATOM 1834 O PHE B 243 -19.130 82.321 32.215 1.00 38.38 O +ATOM 1835 CB PHE B 243 -19.809 82.951 35.296 1.00 33.40 C +ATOM 1836 CG PHE B 243 -20.267 81.530 35.121 1.00 32.54 C +ATOM 1837 CD1 PHE B 243 -19.438 80.576 34.539 1.00 33.54 C +ATOM 1838 CD2 PHE B 243 -21.520 81.127 35.579 1.00 31.92 C +ATOM 1839 CE1 PHE B 243 -19.848 79.231 34.418 1.00 30.87 C +ATOM 1840 CE2 PHE B 243 -21.936 79.796 35.466 1.00 29.49 C +ATOM 1841 CZ PHE B 243 -21.097 78.847 34.883 1.00 28.52 C +ATOM 1842 N ASN B 244 -17.582 83.717 33.092 1.00 42.03 N +ATOM 1843 CA ASN B 244 -16.507 83.285 32.216 1.00 42.47 C +ATOM 1844 C ASN B 244 -15.287 82.798 32.996 1.00 42.40 C +ATOM 1845 O ASN B 244 -14.892 83.389 34.006 1.00 41.65 O +ATOM 1846 CB ASN B 244 -16.109 84.434 31.293 1.00 42.19 C +ATOM 1847 CG ASN B 244 -15.110 84.013 30.249 1.00 44.90 C +ATOM 1848 OD1 ASN B 244 -15.424 83.211 29.364 1.00 47.47 O +ATOM 1849 ND2 ASN B 244 -13.891 84.542 30.347 1.00 44.28 N +ATOM 1850 N PHE B 245 -14.723 81.689 32.533 1.00 42.42 N +ATOM 1851 CA PHE B 245 -13.530 81.103 33.130 1.00 43.27 C +ATOM 1852 C PHE B 245 -12.514 80.896 31.996 1.00 44.29 C +ATOM 1853 O PHE B 245 -12.648 79.950 31.216 1.00 44.23 O +ATOM 1854 CB PHE B 245 -13.868 79.757 33.776 1.00 42.00 C +ATOM 1855 CG PHE B 245 -14.720 79.862 35.008 1.00 43.08 C +ATOM 1856 CD1 PHE B 245 -14.522 80.888 35.930 1.00 45.74 C +ATOM 1857 CD2 PHE B 245 -15.697 78.902 35.276 1.00 43.58 C +ATOM 1858 CE1 PHE B 245 -15.288 80.956 37.109 1.00 45.53 C +ATOM 1859 CE2 PHE B 245 -16.470 78.960 36.455 1.00 42.54 C +ATOM 1860 CZ PHE B 245 -16.261 79.987 37.368 1.00 42.24 C +ATOM 1861 N ASP B 246 -11.542 81.804 31.870 1.00 46.08 N +ATOM 1862 CA ASP B 246 -10.511 81.710 30.822 1.00 48.67 C +ATOM 1863 C ASP B 246 -9.620 80.505 31.074 1.00 48.62 C +ATOM 1864 O ASP B 246 -9.151 79.849 30.140 1.00 48.42 O +ATOM 1865 CB ASP B 246 -9.646 82.970 30.802 1.00 53.68 C +ATOM 1866 CG ASP B 246 -10.431 84.207 30.419 1.00 61.00 C +ATOM 1867 OD1 ASP B 246 -10.947 84.243 29.272 1.00 60.90 O +ATOM 1868 OD2 ASP B 246 -10.532 85.135 31.267 1.00 64.43 O +ATOM 1869 N LYS B 247 -9.385 80.263 32.360 1.00 49.65 N +ATOM 1870 CA LYS B 247 -8.580 79.163 32.882 1.00 49.83 C +ATOM 1871 C LYS B 247 -9.137 78.843 34.268 1.00 47.87 C +ATOM 1872 O LYS B 247 -9.861 79.648 34.873 1.00 46.59 O +ATOM 1873 CB LYS B 247 -7.093 79.562 32.989 1.00 52.79 C +ATOM 1874 CG LYS B 247 -6.811 81.003 33.520 1.00 61.82 C +ATOM 1875 CD LYS B 247 -6.950 81.182 35.059 1.00 67.25 C +ATOM 1876 CE LYS B 247 -7.019 82.674 35.505 1.00 70.17 C +ATOM 1877 NZ LYS B 247 -8.338 83.370 35.227 1.00 70.78 N +ATOM 1878 N PHE B 248 -8.837 77.651 34.755 1.00 45.83 N +ATOM 1879 CA PHE B 248 -9.293 77.268 36.073 1.00 46.61 C +ATOM 1880 C PHE B 248 -8.092 77.334 37.000 1.00 48.73 C +ATOM 1881 O PHE B 248 -6.952 77.327 36.540 1.00 49.32 O +ATOM 1882 CB PHE B 248 -9.854 75.851 36.051 1.00 45.43 C +ATOM 1883 CG PHE B 248 -11.011 75.671 35.116 1.00 45.76 C +ATOM 1884 CD1 PHE B 248 -12.319 75.902 35.546 1.00 44.96 C +ATOM 1885 CD2 PHE B 248 -10.800 75.248 33.808 1.00 45.87 C +ATOM 1886 CE1 PHE B 248 -13.404 75.711 34.685 1.00 44.01 C +ATOM 1887 CE2 PHE B 248 -11.881 75.051 32.934 1.00 46.75 C +ATOM 1888 CZ PHE B 248 -13.186 75.283 33.376 1.00 45.36 C +ATOM 1889 N VAL B 249 -8.345 77.474 38.294 1.00 50.75 N +ATOM 1890 CA VAL B 249 -7.266 77.513 39.274 1.00 53.34 C +ATOM 1891 C VAL B 249 -7.426 76.276 40.171 1.00 55.53 C +ATOM 1892 O VAL B 249 -8.532 75.738 40.293 1.00 52.47 O +ATOM 1893 CB VAL B 249 -7.305 78.809 40.136 1.00 52.95 C +ATOM 1894 CG1 VAL B 249 -7.348 80.042 39.249 1.00 53.60 C +ATOM 1895 CG2 VAL B 249 -8.490 78.789 41.089 1.00 55.05 C +ATOM 1896 N PRO B 250 -6.311 75.768 40.750 1.00 59.50 N +ATOM 1897 CA PRO B 250 -6.419 74.595 41.632 1.00 61.37 C +ATOM 1898 C PRO B 250 -7.268 74.898 42.866 1.00 62.81 C +ATOM 1899 O PRO B 250 -7.069 75.922 43.537 1.00 61.23 O +ATOM 1900 CB PRO B 250 -4.955 74.284 41.974 1.00 60.48 C +ATOM 1901 CG PRO B 250 -4.270 75.614 41.833 1.00 60.89 C +ATOM 1902 CD PRO B 250 -4.903 76.172 40.587 1.00 59.58 C +ATOM 1903 N ASN B 251 -8.239 74.015 43.120 1.00 65.61 N +ATOM 1904 CA ASN B 251 -9.175 74.141 44.244 1.00 68.83 C +ATOM 1905 C ASN B 251 -9.937 75.462 44.145 1.00 67.52 C +ATOM 1906 O ASN B 251 -9.834 76.331 45.021 1.00 69.79 O +ATOM 1907 CB ASN B 251 -8.441 74.051 45.585 1.00 74.26 C +ATOM 1908 CG ASN B 251 -7.647 72.767 45.728 1.00 80.28 C +ATOM 1909 OD1 ASN B 251 -6.410 72.787 45.776 1.00 83.49 O +ATOM 1910 ND2 ASN B 251 -8.351 71.634 45.781 1.00 82.51 N +ATOM 1911 N GLN B 252 -10.657 75.617 43.037 1.00 62.31 N +ATOM 1912 CA GLN B 252 -11.443 76.806 42.765 1.00 55.13 C +ATOM 1913 C GLN B 252 -12.626 76.765 43.716 1.00 53.23 C +ATOM 1914 O GLN B 252 -13.265 75.725 43.857 1.00 53.64 O +ATOM 1915 CB GLN B 252 -11.907 76.749 41.318 1.00 53.04 C +ATOM 1916 CG GLN B 252 -12.218 78.082 40.698 1.00 51.93 C +ATOM 1917 CD GLN B 252 -12.014 78.059 39.206 1.00 51.70 C +ATOM 1918 OE1 GLN B 252 -11.751 79.090 38.584 1.00 54.81 O +ATOM 1919 NE2 GLN B 252 -12.091 76.869 38.623 1.00 51.66 N +ATOM 1920 N LYS B 253 -12.898 77.879 44.389 1.00 50.66 N +ATOM 1921 CA LYS B 253 -13.992 77.930 45.348 1.00 48.44 C +ATOM 1922 C LYS B 253 -15.404 77.985 44.793 1.00 46.19 C +ATOM 1923 O LYS B 253 -16.354 77.666 45.514 1.00 46.69 O +ATOM 1924 CB LYS B 253 -13.805 79.082 46.320 1.00 50.80 C +ATOM 1925 CG LYS B 253 -13.418 78.653 47.708 1.00 54.00 C +ATOM 1926 CD LYS B 253 -11.995 78.126 47.738 1.00 58.65 C +ATOM 1927 CE LYS B 253 -11.536 77.867 49.180 1.00 61.11 C +ATOM 1928 NZ LYS B 253 -11.598 79.090 50.038 1.00 59.28 N +ATOM 1929 N ASN B 254 -15.564 78.417 43.545 1.00 42.96 N +ATOM 1930 CA ASN B 254 -16.907 78.489 42.970 1.00 40.14 C +ATOM 1931 C ASN B 254 -17.253 77.312 42.089 1.00 37.16 C +ATOM 1932 O ASN B 254 -18.152 77.377 41.256 1.00 37.61 O +ATOM 1933 CB ASN B 254 -17.156 79.816 42.240 1.00 39.34 C +ATOM 1934 CG ASN B 254 -16.123 80.112 41.197 1.00 38.07 C +ATOM 1935 OD1 ASN B 254 -15.336 79.240 40.809 1.00 38.17 O +ATOM 1936 ND2 ASN B 254 -16.101 81.356 40.736 1.00 36.42 N +ATOM 1937 N ILE B 255 -16.532 76.225 42.282 1.00 35.77 N +ATOM 1938 CA ILE B 255 -16.794 75.018 41.526 1.00 33.84 C +ATOM 1939 C ILE B 255 -16.845 73.880 42.514 1.00 33.88 C +ATOM 1940 O ILE B 255 -16.035 73.802 43.435 1.00 34.15 O +ATOM 1941 CB ILE B 255 -15.716 74.756 40.466 1.00 31.66 C +ATOM 1942 CG1 ILE B 255 -15.912 75.717 39.302 1.00 31.21 C +ATOM 1943 CG2 ILE B 255 -15.794 73.327 39.973 1.00 32.07 C +ATOM 1944 CD1 ILE B 255 -15.005 75.453 38.162 1.00 32.42 C +ATOM 1945 N ILE B 256 -17.852 73.039 42.361 1.00 34.86 N +ATOM 1946 CA ILE B 256 -18.022 71.900 43.239 1.00 37.96 C +ATOM 1947 C ILE B 256 -17.424 70.664 42.564 1.00 40.30 C +ATOM 1948 O ILE B 256 -17.832 70.276 41.463 1.00 42.86 O +ATOM 1949 CB ILE B 256 -19.513 71.676 43.566 1.00 38.48 C +ATOM 1950 CG1 ILE B 256 -20.071 72.885 44.319 1.00 37.32 C +ATOM 1951 CG2 ILE B 256 -19.692 70.417 44.400 1.00 37.69 C +ATOM 1952 CD1 ILE B 256 -21.567 72.817 44.537 1.00 38.74 C +ATOM 1953 N PHE B 257 -16.418 70.078 43.205 1.00 40.15 N +ATOM 1954 CA PHE B 257 -15.766 68.896 42.664 1.00 39.80 C +ATOM 1955 C PHE B 257 -16.348 67.638 43.269 1.00 41.63 C +ATOM 1956 O PHE B 257 -16.436 67.517 44.492 1.00 44.77 O +ATOM 1957 CB PHE B 257 -14.268 68.947 42.940 1.00 37.77 C +ATOM 1958 CG PHE B 257 -13.580 70.111 42.303 1.00 38.21 C +ATOM 1959 CD1 PHE B 257 -13.147 70.035 40.984 1.00 39.26 C +ATOM 1960 CD2 PHE B 257 -13.379 71.295 43.012 1.00 36.79 C +ATOM 1961 CE1 PHE B 257 -12.523 71.126 40.370 1.00 38.50 C +ATOM 1962 CE2 PHE B 257 -12.755 72.393 42.412 1.00 37.90 C +ATOM 1963 CZ PHE B 257 -12.325 72.309 41.086 1.00 38.14 C +ATOM 1964 N GLN B 258 -16.760 66.714 42.407 1.00 42.99 N +ATOM 1965 CA GLN B 258 -17.325 65.431 42.824 1.00 44.83 C +ATOM 1966 C GLN B 258 -16.550 64.327 42.104 1.00 47.77 C +ATOM 1967 O GLN B 258 -16.308 64.427 40.898 1.00 49.55 O +ATOM 1968 CB GLN B 258 -18.798 65.332 42.424 1.00 44.46 C +ATOM 1969 CG GLN B 258 -19.691 66.452 42.932 1.00 45.09 C +ATOM 1970 CD GLN B 258 -21.133 66.308 42.462 1.00 44.68 C +ATOM 1971 OE1 GLN B 258 -21.402 65.951 41.308 1.00 43.20 O +ATOM 1972 NE2 GLN B 258 -22.068 66.585 43.359 1.00 42.97 N +ATOM 1973 N GLY B 259 -16.193 63.267 42.829 1.00 49.32 N +ATOM 1974 CA GLY B 259 -15.446 62.169 42.233 1.00 49.90 C +ATOM 1975 C GLY B 259 -13.978 62.525 42.070 1.00 52.18 C +ATOM 1976 O GLY B 259 -13.413 63.244 42.898 1.00 52.88 O +ATOM 1977 N ASP B 260 -13.369 62.061 40.980 1.00 52.37 N +ATOM 1978 CA ASP B 260 -11.959 62.323 40.706 1.00 53.46 C +ATOM 1979 C ASP B 260 -11.689 63.668 40.033 1.00 53.07 C +ATOM 1980 O ASP B 260 -10.540 63.994 39.709 1.00 53.68 O +ATOM 1981 CB ASP B 260 -11.384 61.192 39.855 1.00 58.50 C +ATOM 1982 CG ASP B 260 -11.390 59.852 40.581 1.00 63.71 C +ATOM 1983 OD1 ASP B 260 -10.442 59.611 41.363 1.00 65.26 O +ATOM 1984 OD2 ASP B 260 -12.336 59.047 40.374 1.00 66.47 O +ATOM 1985 N ALA B 261 -12.746 64.445 39.818 1.00 52.16 N +ATOM 1986 CA ALA B 261 -12.621 65.750 39.182 1.00 52.28 C +ATOM 1987 C ALA B 261 -11.672 66.661 39.963 1.00 52.96 C +ATOM 1988 O ALA B 261 -11.736 66.748 41.193 1.00 54.33 O +ATOM 1989 CB ALA B 261 -13.980 66.387 39.050 1.00 51.81 C +ATOM 1990 N SER B 262 -10.784 67.333 39.241 1.00 52.30 N +ATOM 1991 CA SER B 262 -9.808 68.222 39.859 1.00 51.34 C +ATOM 1992 C SER B 262 -9.230 69.148 38.807 1.00 52.19 C +ATOM 1993 O SER B 262 -9.489 68.989 37.607 1.00 52.45 O +ATOM 1994 CB SER B 262 -8.675 67.401 40.463 1.00 51.66 C +ATOM 1995 OG SER B 262 -8.136 66.522 39.485 1.00 54.77 O +ATOM 1996 N VAL B 263 -8.415 70.095 39.254 1.00 51.96 N +ATOM 1997 CA VAL B 263 -7.791 71.048 38.341 1.00 52.56 C +ATOM 1998 C VAL B 263 -6.272 71.080 38.539 1.00 52.39 C +ATOM 1999 O VAL B 263 -5.778 71.396 39.621 1.00 53.20 O +ATOM 2000 CB VAL B 263 -8.448 72.458 38.467 1.00 50.47 C +ATOM 2001 CG1 VAL B 263 -8.764 72.757 39.908 1.00 53.73 C +ATOM 2002 CG2 VAL B 263 -7.548 73.532 37.888 1.00 48.83 C +ATOM 2003 N SER B 264 -5.544 70.700 37.490 1.00 53.09 N +ATOM 2004 CA SER B 264 -4.087 70.660 37.521 1.00 54.70 C +ATOM 2005 C SER B 264 -3.473 72.051 37.674 1.00 56.04 C +ATOM 2006 O SER B 264 -4.135 73.055 37.418 1.00 56.31 O +ATOM 2007 CB SER B 264 -3.550 69.976 36.256 1.00 54.39 C +ATOM 2008 OG SER B 264 -3.700 70.799 35.116 1.00 50.11 O +ATOM 2009 N THR B 265 -2.203 72.098 38.081 1.00 59.29 N +ATOM 2010 CA THR B 265 -1.477 73.364 38.289 1.00 60.73 C +ATOM 2011 C THR B 265 -1.204 74.164 37.013 1.00 60.15 C +ATOM 2012 O THR B 265 -0.681 75.280 37.074 1.00 59.08 O +ATOM 2013 CB THR B 265 -0.142 73.158 39.070 1.00 60.72 C +ATOM 2014 OG1 THR B 265 0.591 72.064 38.496 1.00 58.90 O +ATOM 2015 CG2 THR B 265 -0.424 72.891 40.561 1.00 58.85 C +ATOM 2016 N THR B 266 -1.539 73.579 35.864 1.00 58.68 N +ATOM 2017 CA THR B 266 -1.377 74.254 34.582 1.00 57.49 C +ATOM 2018 C THR B 266 -2.672 75.029 34.281 1.00 54.90 C +ATOM 2019 O THR B 266 -2.771 75.739 33.279 1.00 55.36 O +ATOM 2020 CB THR B 266 -1.085 73.246 33.451 1.00 59.44 C +ATOM 2021 OG1 THR B 266 -2.031 72.170 33.523 1.00 62.18 O +ATOM 2022 CG2 THR B 266 0.338 72.680 33.573 1.00 59.64 C +ATOM 2023 N GLY B 267 -3.665 74.861 35.156 1.00 51.52 N +ATOM 2024 CA GLY B 267 -4.931 75.553 35.016 1.00 47.45 C +ATOM 2025 C GLY B 267 -6.040 74.864 34.242 1.00 46.44 C +ATOM 2026 O GLY B 267 -6.996 75.522 33.833 1.00 47.78 O +ATOM 2027 N VAL B 268 -5.933 73.554 34.042 1.00 44.57 N +ATOM 2028 CA VAL B 268 -6.957 72.814 33.307 1.00 42.40 C +ATOM 2029 C VAL B 268 -7.797 71.898 34.196 1.00 40.15 C +ATOM 2030 O VAL B 268 -7.282 71.229 35.088 1.00 39.15 O +ATOM 2031 CB VAL B 268 -6.348 72.023 32.091 1.00 42.68 C +ATOM 2032 CG1 VAL B 268 -5.015 71.427 32.450 1.00 45.34 C +ATOM 2033 CG2 VAL B 268 -7.283 70.901 31.638 1.00 44.59 C +ATOM 2034 N LEU B 269 -9.104 71.899 33.948 1.00 39.86 N +ATOM 2035 CA LEU B 269 -10.040 71.078 34.699 1.00 38.02 C +ATOM 2036 C LEU B 269 -10.081 69.675 34.132 1.00 38.69 C +ATOM 2037 O LEU B 269 -10.610 69.448 33.044 1.00 40.00 O +ATOM 2038 CB LEU B 269 -11.436 71.689 34.646 1.00 36.47 C +ATOM 2039 CG LEU B 269 -12.550 70.803 35.198 1.00 37.72 C +ATOM 2040 CD1 LEU B 269 -12.364 70.584 36.683 1.00 40.08 C +ATOM 2041 CD2 LEU B 269 -13.886 71.453 34.928 1.00 40.12 C +ATOM 2042 N GLN B 270 -9.499 68.736 34.865 1.00 39.99 N +ATOM 2043 CA GLN B 270 -9.482 67.344 34.439 1.00 42.78 C +ATOM 2044 C GLN B 270 -10.644 66.634 35.131 1.00 44.43 C +ATOM 2045 O GLN B 270 -10.530 66.232 36.302 1.00 44.06 O +ATOM 2046 CB GLN B 270 -8.159 66.694 34.841 1.00 43.91 C +ATOM 2047 CG GLN B 270 -6.939 67.558 34.563 1.00 46.91 C +ATOM 2048 CD GLN B 270 -5.629 66.905 34.988 1.00 48.07 C +ATOM 2049 OE1 GLN B 270 -4.577 67.187 34.414 1.00 50.35 O +ATOM 2050 NE2 GLN B 270 -5.687 66.031 35.995 1.00 46.39 N +ATOM 2051 N VAL B 271 -11.770 66.499 34.428 1.00 46.15 N +ATOM 2052 CA VAL B 271 -12.936 65.845 35.026 1.00 49.66 C +ATOM 2053 C VAL B 271 -12.630 64.375 35.285 1.00 52.04 C +ATOM 2054 O VAL B 271 -13.253 63.730 36.131 1.00 52.06 O +ATOM 2055 CB VAL B 271 -14.209 65.975 34.144 1.00 48.35 C +ATOM 2056 CG1 VAL B 271 -14.400 67.416 33.711 1.00 49.07 C +ATOM 2057 CG2 VAL B 271 -14.132 65.071 32.945 1.00 48.64 C +ATOM 2058 N THR B 272 -11.638 63.872 34.560 1.00 55.29 N +ATOM 2059 CA THR B 272 -11.202 62.493 34.672 1.00 58.22 C +ATOM 2060 C THR B 272 -9.784 62.461 35.241 1.00 62.42 C +ATOM 2061 O THR B 272 -8.938 63.285 34.864 1.00 64.45 O +ATOM 2062 CB THR B 272 -11.298 61.804 33.289 1.00 56.78 C +ATOM 2063 OG1 THR B 272 -12.419 60.911 33.297 1.00 52.98 O +ATOM 2064 CG2 THR B 272 -9.999 61.064 32.901 1.00 55.63 C +ATOM 2065 N LYS B 273 -9.542 61.525 36.158 1.00 65.36 N +ATOM 2066 CA LYS B 273 -8.238 61.383 36.800 1.00 68.65 C +ATOM 2067 C LYS B 273 -7.114 61.088 35.809 1.00 70.27 C +ATOM 2068 O LYS B 273 -7.190 60.142 35.016 1.00 70.58 O +ATOM 2069 CB LYS B 273 -8.282 60.289 37.868 1.00 69.75 C +ATOM 2070 CG LYS B 273 -7.036 60.239 38.735 1.00 72.37 C +ATOM 2071 CD LYS B 273 -7.161 59.204 39.849 1.00 75.38 C +ATOM 2072 CE LYS B 273 -6.051 59.364 40.897 1.00 76.71 C +ATOM 2073 NZ LYS B 273 -6.077 60.708 41.558 1.00 77.24 N +ATOM 2074 N VAL B 274 -6.077 61.916 35.856 1.00 70.76 N +ATOM 2075 CA VAL B 274 -4.934 61.750 34.974 1.00 72.71 C +ATOM 2076 C VAL B 274 -3.740 61.316 35.827 1.00 75.24 C +ATOM 2077 O VAL B 274 -3.077 62.151 36.449 1.00 74.76 O +ATOM 2078 CB VAL B 274 -4.611 63.074 34.246 1.00 72.08 C +ATOM 2079 CG1 VAL B 274 -3.538 62.851 33.206 1.00 72.28 C +ATOM 2080 CG2 VAL B 274 -5.864 63.639 33.594 1.00 71.33 C +ATOM 2081 N SER B 275 -3.483 60.007 35.878 1.00 78.72 N +ATOM 2082 CA SER B 275 -2.373 59.482 36.677 1.00 82.31 C +ATOM 2083 C SER B 275 -1.594 58.306 36.094 1.00 85.21 C +ATOM 2084 O SER B 275 -2.051 57.629 35.166 1.00 86.68 O +ATOM 2085 CB SER B 275 -2.856 59.110 38.077 1.00 81.19 C +ATOM 2086 OG SER B 275 -3.136 60.277 38.823 1.00 82.86 O +ATOM 2087 N LYS B 276 -0.400 58.094 36.648 1.00 86.96 N +ATOM 2088 CA LYS B 276 0.487 57.008 36.240 1.00 86.79 C +ATOM 2089 C LYS B 276 0.762 56.136 37.472 1.00 86.98 C +ATOM 2090 O LYS B 276 1.292 56.612 38.480 1.00 86.28 O +ATOM 2091 CB LYS B 276 1.796 57.564 35.660 1.00 84.92 C +ATOM 2092 N PRO B 277 0.339 54.863 37.427 1.00 86.99 N +ATOM 2093 CA PRO B 277 -0.368 54.266 36.287 1.00 86.70 C +ATOM 2094 C PRO B 277 -1.823 54.733 36.152 1.00 85.92 C +ATOM 2095 O PRO B 277 -2.394 55.322 37.077 1.00 86.26 O +ATOM 2096 CB PRO B 277 -0.269 52.768 36.573 1.00 86.28 C +ATOM 2097 CG PRO B 277 -0.309 52.723 38.060 1.00 87.27 C +ATOM 2098 CD PRO B 277 0.610 53.850 38.464 1.00 86.48 C +ATOM 2099 N THR B 278 -2.395 54.493 34.977 1.00 84.92 N +ATOM 2100 CA THR B 278 -3.774 54.870 34.674 1.00 83.33 C +ATOM 2101 C THR B 278 -4.783 54.046 35.497 1.00 83.40 C +ATOM 2102 O THR B 278 -4.680 52.819 35.569 1.00 83.79 O +ATOM 2103 CB THR B 278 -4.047 54.717 33.153 1.00 82.50 C +ATOM 2104 OG1 THR B 278 -3.958 53.337 32.775 1.00 81.65 O +ATOM 2105 CG2 THR B 278 -3.012 55.507 32.352 1.00 79.60 C +ATOM 2106 N THR B 279 -5.747 54.725 36.120 1.00 82.56 N +ATOM 2107 CA THR B 279 -6.758 54.060 36.950 1.00 80.54 C +ATOM 2108 C THR B 279 -8.217 54.324 36.516 1.00 78.76 C +ATOM 2109 O THR B 279 -8.514 55.356 35.916 1.00 78.60 O +ATOM 2110 CB THR B 279 -6.570 54.459 38.445 1.00 79.93 C +ATOM 2111 OG1 THR B 279 -7.563 53.811 39.248 1.00 81.14 O +ATOM 2112 CG2 THR B 279 -6.676 55.974 38.627 1.00 77.26 C +ATOM 2113 N THR B 280 -9.109 53.373 36.811 1.00 76.64 N +ATOM 2114 CA THR B 280 -10.542 53.477 36.493 1.00 73.58 C +ATOM 2115 C THR B 280 -11.057 54.745 37.218 1.00 70.39 C +ATOM 2116 O THR B 280 -10.712 54.974 38.384 1.00 70.04 O +ATOM 2117 CB THR B 280 -11.307 52.142 36.918 1.00 75.64 C +ATOM 2118 OG1 THR B 280 -12.516 51.995 36.161 1.00 76.66 O +ATOM 2119 CG2 THR B 280 -11.641 52.107 38.423 1.00 76.92 C +ATOM 2120 N SER B 281 -11.847 55.577 36.537 1.00 65.75 N +ATOM 2121 CA SER B 281 -12.294 56.836 37.147 1.00 61.68 C +ATOM 2122 C SER B 281 -13.638 57.452 36.716 1.00 59.13 C +ATOM 2123 O SER B 281 -14.137 57.189 35.625 1.00 59.35 O +ATOM 2124 CB SER B 281 -11.180 57.871 36.941 1.00 60.69 C +ATOM 2125 OG SER B 281 -11.566 59.168 37.341 1.00 59.59 O +ATOM 2126 N ILE B 282 -14.199 58.283 37.597 1.00 55.99 N +ATOM 2127 CA ILE B 282 -15.459 59.010 37.367 1.00 52.22 C +ATOM 2128 C ILE B 282 -15.402 60.363 38.090 1.00 50.43 C +ATOM 2129 O ILE B 282 -15.036 60.433 39.268 1.00 50.90 O +ATOM 2130 CB ILE B 282 -16.698 58.242 37.888 1.00 51.13 C +ATOM 2131 CG1 ILE B 282 -16.900 56.951 37.093 1.00 52.81 C +ATOM 2132 CG2 ILE B 282 -17.943 59.113 37.767 1.00 47.44 C +ATOM 2133 CD1 ILE B 282 -18.020 56.077 37.610 1.00 55.14 C +ATOM 2134 N GLY B 283 -15.781 61.429 37.392 1.00 46.83 N +ATOM 2135 CA GLY B 283 -15.754 62.750 37.995 1.00 43.70 C +ATOM 2136 C GLY B 283 -16.756 63.727 37.409 1.00 41.96 C +ATOM 2137 O GLY B 283 -17.200 63.572 36.272 1.00 39.97 O +ATOM 2138 N ARG B 284 -17.139 64.720 38.212 1.00 40.49 N +ATOM 2139 CA ARG B 284 -18.086 65.755 37.799 1.00 38.12 C +ATOM 2140 C ARG B 284 -17.714 67.090 38.455 1.00 37.70 C +ATOM 2141 O ARG B 284 -17.305 67.127 39.616 1.00 38.63 O +ATOM 2142 CB ARG B 284 -19.516 65.393 38.216 1.00 37.97 C +ATOM 2143 CG ARG B 284 -19.952 63.971 37.915 1.00 38.29 C +ATOM 2144 CD ARG B 284 -21.471 63.846 37.900 1.00 39.23 C +ATOM 2145 NE ARG B 284 -22.104 64.426 39.086 1.00 38.46 N +ATOM 2146 CZ ARG B 284 -23.416 64.413 39.321 1.00 38.74 C +ATOM 2147 NH1 ARG B 284 -24.253 63.849 38.454 1.00 38.38 N +ATOM 2148 NH2 ARG B 284 -23.892 64.964 40.430 1.00 36.36 N +ATOM 2149 N ALA B 285 -17.839 68.182 37.709 1.00 36.30 N +ATOM 2150 CA ALA B 285 -17.545 69.512 38.238 1.00 35.95 C +ATOM 2151 C ALA B 285 -18.749 70.405 37.939 1.00 35.53 C +ATOM 2152 O ALA B 285 -19.222 70.451 36.799 1.00 35.77 O +ATOM 2153 CB ALA B 285 -16.287 70.073 37.599 1.00 31.63 C +ATOM 2154 N LEU B 286 -19.270 71.073 38.967 1.00 34.12 N +ATOM 2155 CA LEU B 286 -20.432 71.941 38.799 1.00 34.02 C +ATOM 2156 C LEU B 286 -20.185 73.336 39.323 1.00 34.50 C +ATOM 2157 O LEU B 286 -19.408 73.530 40.259 1.00 36.34 O +ATOM 2158 CB LEU B 286 -21.635 71.385 39.554 1.00 33.79 C +ATOM 2159 CG LEU B 286 -21.637 69.916 39.959 1.00 36.67 C +ATOM 2160 CD1 LEU B 286 -22.764 69.653 40.918 1.00 37.44 C +ATOM 2161 CD2 LEU B 286 -21.768 69.043 38.742 1.00 39.16 C +ATOM 2162 N TYR B 287 -20.853 74.310 38.719 1.00 32.81 N +ATOM 2163 CA TYR B 287 -20.738 75.683 39.173 1.00 33.52 C +ATOM 2164 C TYR B 287 -21.460 75.694 40.527 1.00 35.11 C +ATOM 2165 O TYR B 287 -22.579 75.167 40.646 1.00 37.22 O +ATOM 2166 CB TYR B 287 -21.412 76.623 38.176 1.00 32.02 C +ATOM 2167 CG TYR B 287 -21.430 78.064 38.616 1.00 32.37 C +ATOM 2168 CD1 TYR B 287 -20.249 78.781 38.768 1.00 32.45 C +ATOM 2169 CD2 TYR B 287 -22.632 78.699 38.932 1.00 33.69 C +ATOM 2170 CE1 TYR B 287 -20.265 80.089 39.231 1.00 33.99 C +ATOM 2171 CE2 TYR B 287 -22.656 80.008 39.396 1.00 33.83 C +ATOM 2172 CZ TYR B 287 -21.470 80.692 39.548 1.00 33.27 C +ATOM 2173 OH TYR B 287 -21.484 81.960 40.061 1.00 36.14 O +ATOM 2174 N ALA B 288 -20.810 76.273 41.536 1.00 34.91 N +ATOM 2175 CA ALA B 288 -21.340 76.324 42.901 1.00 37.61 C +ATOM 2176 C ALA B 288 -22.782 76.801 43.131 1.00 40.67 C +ATOM 2177 O ALA B 288 -23.505 76.204 43.940 1.00 44.37 O +ATOM 2178 CB ALA B 288 -20.385 77.087 43.796 1.00 37.14 C +ATOM 2179 N ALA B 289 -23.194 77.879 42.464 1.00 41.17 N +ATOM 2180 CA ALA B 289 -24.559 78.400 42.619 1.00 40.79 C +ATOM 2181 C ALA B 289 -25.551 77.701 41.685 1.00 41.90 C +ATOM 2182 O ALA B 289 -25.228 77.374 40.541 1.00 44.59 O +ATOM 2183 CB ALA B 289 -24.588 79.911 42.372 1.00 39.21 C +ATOM 2184 N PRO B 290 -26.754 77.394 42.188 1.00 41.26 N +ATOM 2185 CA PRO B 290 -27.774 76.772 41.343 1.00 40.71 C +ATOM 2186 C PRO B 290 -28.304 77.831 40.399 1.00 39.35 C +ATOM 2187 O PRO B 290 -28.124 79.026 40.641 1.00 38.76 O +ATOM 2188 CB PRO B 290 -28.853 76.379 42.350 1.00 39.99 C +ATOM 2189 CG PRO B 290 -28.087 76.176 43.605 1.00 42.16 C +ATOM 2190 CD PRO B 290 -27.160 77.359 43.597 1.00 42.13 C +ATOM 2191 N ILE B 291 -28.937 77.398 39.316 1.00 39.35 N +ATOM 2192 CA ILE B 291 -29.516 78.329 38.347 1.00 39.88 C +ATOM 2193 C ILE B 291 -31.027 78.117 38.275 1.00 39.19 C +ATOM 2194 O ILE B 291 -31.497 76.978 38.324 1.00 38.74 O +ATOM 2195 CB ILE B 291 -28.937 78.124 36.907 1.00 40.53 C +ATOM 2196 CG1 ILE B 291 -27.500 78.631 36.802 1.00 40.37 C +ATOM 2197 CG2 ILE B 291 -29.762 78.869 35.889 1.00 40.95 C +ATOM 2198 CD1 ILE B 291 -26.464 77.626 37.208 1.00 46.12 C +ATOM 2199 N GLN B 292 -31.789 79.209 38.221 1.00 39.53 N +ATOM 2200 CA GLN B 292 -33.238 79.091 38.083 1.00 41.52 C +ATOM 2201 C GLN B 292 -33.456 78.936 36.595 1.00 40.12 C +ATOM 2202 O GLN B 292 -33.327 79.900 35.842 1.00 39.56 O +ATOM 2203 CB GLN B 292 -33.966 80.337 38.575 1.00 45.23 C +ATOM 2204 CG GLN B 292 -35.438 80.353 38.198 1.00 51.83 C +ATOM 2205 CD GLN B 292 -36.312 81.091 39.202 1.00 56.37 C +ATOM 2206 OE1 GLN B 292 -37.404 80.626 39.552 1.00 58.37 O +ATOM 2207 NE2 GLN B 292 -35.842 82.244 39.670 1.00 59.50 N +ATOM 2208 N ILE B 293 -33.754 77.717 36.166 1.00 39.72 N +ATOM 2209 CA ILE B 293 -33.935 77.448 34.752 1.00 38.42 C +ATOM 2210 C ILE B 293 -35.329 77.768 34.205 1.00 39.56 C +ATOM 2211 O ILE B 293 -35.482 77.985 33.010 1.00 38.81 O +ATOM 2212 CB ILE B 293 -33.469 76.017 34.414 1.00 38.67 C +ATOM 2213 CG1 ILE B 293 -32.874 75.987 33.011 1.00 37.74 C +ATOM 2214 CG2 ILE B 293 -34.583 75.016 34.607 1.00 37.22 C +ATOM 2215 CD1 ILE B 293 -31.580 76.762 32.901 1.00 37.63 C +ATOM 2216 N TRP B 294 -36.335 77.779 35.079 1.00 41.20 N +ATOM 2217 CA TRP B 294 -37.711 78.130 34.710 1.00 44.33 C +ATOM 2218 C TRP B 294 -38.453 78.585 35.966 1.00 47.60 C +ATOM 2219 O TRP B 294 -38.038 78.260 37.077 1.00 47.94 O +ATOM 2220 CB TRP B 294 -38.449 76.995 33.978 1.00 46.47 C +ATOM 2221 CG TRP B 294 -38.712 75.728 34.771 1.00 50.36 C +ATOM 2222 CD1 TRP B 294 -37.840 74.706 34.999 1.00 51.22 C +ATOM 2223 CD2 TRP B 294 -39.937 75.367 35.421 1.00 51.61 C +ATOM 2224 NE1 TRP B 294 -38.438 73.728 35.754 1.00 51.17 N +ATOM 2225 CE2 TRP B 294 -39.722 74.105 36.034 1.00 51.82 C +ATOM 2226 CE3 TRP B 294 -41.185 75.972 35.563 1.00 53.05 C +ATOM 2227 CZ2 TRP B 294 -40.714 73.452 36.768 1.00 52.24 C +ATOM 2228 CZ3 TRP B 294 -42.172 75.320 36.295 1.00 54.09 C +ATOM 2229 CH2 TRP B 294 -41.926 74.073 36.891 1.00 53.16 C +ATOM 2230 N ASP B 295 -39.523 79.360 35.794 1.00 51.10 N +ATOM 2231 CA ASP B 295 -40.286 79.896 36.925 1.00 54.96 C +ATOM 2232 C ASP B 295 -41.713 79.358 37.011 1.00 56.52 C +ATOM 2233 O ASP B 295 -42.522 79.639 36.136 1.00 56.55 O +ATOM 2234 CB ASP B 295 -40.324 81.426 36.815 1.00 57.88 C +ATOM 2235 CG ASP B 295 -40.739 82.112 38.113 1.00 62.41 C +ATOM 2236 OD1 ASP B 295 -40.960 81.422 39.138 1.00 66.29 O +ATOM 2237 OD2 ASP B 295 -40.823 83.360 38.110 1.00 62.14 O +ATOM 2238 N SER B 296 -42.031 78.639 38.091 1.00 58.95 N +ATOM 2239 CA SER B 296 -43.372 78.067 38.282 1.00 60.11 C +ATOM 2240 C SER B 296 -44.423 79.164 38.417 1.00 60.91 C +ATOM 2241 O SER B 296 -45.556 79.019 37.961 1.00 61.15 O +ATOM 2242 CB SER B 296 -43.415 77.141 39.508 1.00 59.73 C +ATOM 2243 OG SER B 296 -43.116 77.837 40.707 1.00 58.44 O +ATOM 2244 N ILE B 297 -44.017 80.280 39.005 1.00 62.14 N +ATOM 2245 CA ILE B 297 -44.897 81.424 39.210 1.00 62.25 C +ATOM 2246 C ILE B 297 -45.336 82.068 37.894 1.00 61.17 C +ATOM 2247 O ILE B 297 -46.509 82.380 37.726 1.00 61.99 O +ATOM 2248 CB ILE B 297 -44.203 82.493 40.094 1.00 63.00 C +ATOM 2249 CG1 ILE B 297 -43.821 81.886 41.449 1.00 64.71 C +ATOM 2250 CG2 ILE B 297 -45.106 83.688 40.293 1.00 61.95 C +ATOM 2251 CD1 ILE B 297 -42.957 82.787 42.325 1.00 66.41 C +ATOM 2252 N THR B 298 -44.409 82.210 36.947 1.00 60.49 N +ATOM 2253 CA THR B 298 -44.704 82.852 35.661 1.00 58.91 C +ATOM 2254 C THR B 298 -44.751 81.980 34.409 1.00 58.56 C +ATOM 2255 O THR B 298 -45.161 82.451 33.345 1.00 57.31 O +ATOM 2256 CB THR B 298 -43.709 83.985 35.375 1.00 59.30 C +ATOM 2257 OG1 THR B 298 -42.380 83.451 35.325 1.00 61.52 O +ATOM 2258 CG2 THR B 298 -43.780 85.049 36.458 1.00 59.53 C +ATOM 2259 N GLY B 299 -44.286 80.738 34.514 1.00 59.25 N +ATOM 2260 CA GLY B 299 -44.287 79.842 33.364 1.00 59.43 C +ATOM 2261 C GLY B 299 -43.161 80.070 32.360 1.00 58.79 C +ATOM 2262 O GLY B 299 -43.009 79.280 31.427 1.00 59.46 O +ATOM 2263 N LYS B 300 -42.386 81.143 32.550 1.00 57.59 N +ATOM 2264 CA LYS B 300 -41.261 81.499 31.678 1.00 55.62 C +ATOM 2265 C LYS B 300 -40.122 80.484 31.746 1.00 52.38 C +ATOM 2266 O LYS B 300 -39.775 80.001 32.820 1.00 51.53 O +ATOM 2267 CB LYS B 300 -40.682 82.863 32.074 1.00 59.11 C +ATOM 2268 CG LYS B 300 -41.612 84.055 31.916 1.00 64.39 C +ATOM 2269 CD LYS B 300 -41.139 85.257 32.780 1.00 68.45 C +ATOM 2270 CE LYS B 300 -39.779 85.837 32.347 1.00 68.64 C +ATOM 2271 NZ LYS B 300 -39.358 87.005 33.190 1.00 65.83 N +ATOM 2272 N VAL B 301 -39.527 80.183 30.598 1.00 48.37 N +ATOM 2273 CA VAL B 301 -38.411 79.258 30.546 1.00 45.91 C +ATOM 2274 C VAL B 301 -37.177 80.050 30.132 1.00 43.09 C +ATOM 2275 O VAL B 301 -37.248 80.935 29.284 1.00 45.33 O +ATOM 2276 CB VAL B 301 -38.666 78.114 29.553 1.00 47.73 C +ATOM 2277 CG1 VAL B 301 -37.481 77.161 29.533 1.00 48.06 C +ATOM 2278 CG2 VAL B 301 -39.931 77.365 29.935 1.00 47.52 C +ATOM 2279 N ALA B 302 -36.052 79.754 30.761 1.00 39.80 N +ATOM 2280 CA ALA B 302 -34.810 80.446 30.463 1.00 37.55 C +ATOM 2281 C ALA B 302 -34.139 79.968 29.183 1.00 36.09 C +ATOM 2282 O ALA B 302 -34.290 78.821 28.779 1.00 37.24 O +ATOM 2283 CB ALA B 302 -33.849 80.291 31.624 1.00 36.89 C +ATOM 2284 N SER B 303 -33.452 80.875 28.509 1.00 34.41 N +ATOM 2285 CA SER B 303 -32.706 80.518 27.311 1.00 34.39 C +ATOM 2286 C SER B 303 -31.261 80.641 27.759 1.00 35.54 C +ATOM 2287 O SER B 303 -30.898 81.613 28.424 1.00 38.70 O +ATOM 2288 CB SER B 303 -32.961 81.498 26.165 1.00 29.68 C +ATOM 2289 OG SER B 303 -34.285 81.408 25.704 1.00 30.86 O +ATOM 2290 N PHE B 304 -30.443 79.644 27.475 1.00 34.55 N +ATOM 2291 CA PHE B 304 -29.053 79.743 27.879 1.00 32.86 C +ATOM 2292 C PHE B 304 -28.129 79.478 26.710 1.00 33.30 C +ATOM 2293 O PHE B 304 -28.570 79.129 25.610 1.00 33.50 O +ATOM 2294 CB PHE B 304 -28.736 78.817 29.064 1.00 33.96 C +ATOM 2295 CG PHE B 304 -28.794 77.358 28.736 1.00 35.26 C +ATOM 2296 CD1 PHE B 304 -27.673 76.704 28.227 1.00 35.60 C +ATOM 2297 CD2 PHE B 304 -29.975 76.640 28.904 1.00 33.79 C +ATOM 2298 CE1 PHE B 304 -27.732 75.356 27.891 1.00 35.49 C +ATOM 2299 CE2 PHE B 304 -30.041 75.293 28.571 1.00 33.95 C +ATOM 2300 CZ PHE B 304 -28.917 74.649 28.062 1.00 34.87 C +ATOM 2301 N ALA B 305 -26.845 79.704 26.952 1.00 33.51 N +ATOM 2302 CA ALA B 305 -25.803 79.499 25.953 1.00 32.83 C +ATOM 2303 C ALA B 305 -24.524 79.249 26.719 1.00 32.17 C +ATOM 2304 O ALA B 305 -24.254 79.906 27.730 1.00 33.63 O +ATOM 2305 CB ALA B 305 -25.645 80.728 25.073 1.00 28.01 C +ATOM 2306 N THR B 306 -23.775 78.249 26.280 1.00 30.82 N +ATOM 2307 CA THR B 306 -22.524 77.925 26.924 1.00 28.35 C +ATOM 2308 C THR B 306 -21.495 77.637 25.877 1.00 29.13 C +ATOM 2309 O THR B 306 -21.794 77.114 24.805 1.00 29.97 O +ATOM 2310 CB THR B 306 -22.631 76.721 27.879 1.00 27.14 C +ATOM 2311 OG1 THR B 306 -21.403 76.599 28.609 1.00 27.77 O +ATOM 2312 CG2 THR B 306 -22.883 75.440 27.119 1.00 22.63 C +ATOM 2313 N SER B 307 -20.276 78.031 26.181 1.00 30.52 N +ATOM 2314 CA SER B 307 -19.187 77.816 25.274 1.00 32.12 C +ATOM 2315 C SER B 307 -18.045 77.286 26.096 1.00 33.67 C +ATOM 2316 O SER B 307 -17.832 77.721 27.228 1.00 33.50 O +ATOM 2317 CB SER B 307 -18.780 79.124 24.624 1.00 32.41 C +ATOM 2318 OG SER B 307 -17.737 78.889 23.701 1.00 38.61 O +ATOM 2319 N PHE B 308 -17.332 76.318 25.538 1.00 34.63 N +ATOM 2320 CA PHE B 308 -16.190 75.742 26.216 1.00 34.75 C +ATOM 2321 C PHE B 308 -15.288 75.035 25.231 1.00 36.14 C +ATOM 2322 O PHE B 308 -15.685 74.762 24.090 1.00 36.52 O +ATOM 2323 CB PHE B 308 -16.626 74.795 27.347 1.00 36.70 C +ATOM 2324 CG PHE B 308 -17.510 73.649 26.906 1.00 38.36 C +ATOM 2325 CD1 PHE B 308 -16.958 72.446 26.460 1.00 38.58 C +ATOM 2326 CD2 PHE B 308 -18.896 73.757 26.972 1.00 40.05 C +ATOM 2327 CE1 PHE B 308 -17.769 71.372 26.086 1.00 35.61 C +ATOM 2328 CE2 PHE B 308 -19.719 72.678 26.598 1.00 38.81 C +ATOM 2329 CZ PHE B 308 -19.145 71.488 26.155 1.00 36.55 C +ATOM 2330 N SER B 309 -14.060 74.777 25.671 1.00 36.90 N +ATOM 2331 CA SER B 309 -13.059 74.097 24.849 1.00 35.64 C +ATOM 2332 C SER B 309 -12.507 72.918 25.630 1.00 35.60 C +ATOM 2333 O SER B 309 -12.183 73.045 26.813 1.00 36.35 O +ATOM 2334 CB SER B 309 -11.927 75.057 24.498 1.00 34.21 C +ATOM 2335 OG SER B 309 -12.435 76.233 23.892 1.00 36.66 O +ATOM 2336 N PHE B 310 -12.424 71.764 24.985 1.00 34.35 N +ATOM 2337 CA PHE B 310 -11.915 70.596 25.674 1.00 34.52 C +ATOM 2338 C PHE B 310 -10.977 69.801 24.808 1.00 35.56 C +ATOM 2339 O PHE B 310 -10.859 70.045 23.606 1.00 34.78 O +ATOM 2340 CB PHE B 310 -13.056 69.702 26.183 1.00 33.69 C +ATOM 2341 CG PHE B 310 -13.818 69.000 25.101 1.00 32.76 C +ATOM 2342 CD1 PHE B 310 -14.879 69.627 24.465 1.00 34.32 C +ATOM 2343 CD2 PHE B 310 -13.500 67.695 24.745 1.00 32.83 C +ATOM 2344 CE1 PHE B 310 -15.626 68.953 23.495 1.00 36.75 C +ATOM 2345 CE2 PHE B 310 -14.236 67.009 23.778 1.00 34.72 C +ATOM 2346 CZ PHE B 310 -15.300 67.638 23.150 1.00 36.00 C +ATOM 2347 N VAL B 311 -10.300 68.856 25.451 1.00 37.83 N +ATOM 2348 CA VAL B 311 -9.337 67.975 24.807 1.00 38.72 C +ATOM 2349 C VAL B 311 -9.529 66.568 25.339 1.00 41.26 C +ATOM 2350 O VAL B 311 -9.755 66.375 26.545 1.00 42.99 O +ATOM 2351 CB VAL B 311 -7.883 68.352 25.176 1.00 36.14 C +ATOM 2352 CG1 VAL B 311 -6.913 67.454 24.421 1.00 35.36 C +ATOM 2353 CG2 VAL B 311 -7.613 69.819 24.903 1.00 35.92 C +ATOM 2354 N VAL B 312 -9.444 65.592 24.444 1.00 42.63 N +ATOM 2355 CA VAL B 312 -9.543 64.191 24.832 1.00 44.89 C +ATOM 2356 C VAL B 312 -8.350 63.510 24.177 1.00 47.33 C +ATOM 2357 O VAL B 312 -8.313 63.345 22.951 1.00 47.73 O +ATOM 2358 CB VAL B 312 -10.873 63.539 24.383 1.00 44.22 C +ATOM 2359 CG1 VAL B 312 -10.784 62.026 24.492 1.00 44.39 C +ATOM 2360 CG2 VAL B 312 -12.014 64.031 25.259 1.00 42.43 C +ATOM 2361 N LYS B 313 -7.342 63.201 24.995 1.00 50.01 N +ATOM 2362 CA LYS B 313 -6.123 62.560 24.517 1.00 52.37 C +ATOM 2363 C LYS B 313 -5.996 61.108 24.961 1.00 54.71 C +ATOM 2364 O LYS B 313 -6.002 60.818 26.159 1.00 55.44 O +ATOM 2365 CB LYS B 313 -4.897 63.343 24.975 1.00 51.45 C +ATOM 2366 CG LYS B 313 -3.593 62.751 24.475 1.00 53.78 C +ATOM 2367 CD LYS B 313 -2.416 63.639 24.836 1.00 56.50 C +ATOM 2368 CE LYS B 313 -1.104 63.078 24.289 1.00 59.12 C +ATOM 2369 NZ LYS B 313 0.066 63.987 24.535 1.00 59.59 N +ATOM 2370 N ALA B 314 -5.879 60.209 23.984 1.00 56.61 N +ATOM 2371 CA ALA B 314 -5.736 58.776 24.233 1.00 58.23 C +ATOM 2372 C ALA B 314 -4.300 58.359 23.952 1.00 60.74 C +ATOM 2373 O ALA B 314 -3.665 58.872 23.022 1.00 62.04 O +ATOM 2374 CB ALA B 314 -6.693 57.983 23.348 1.00 54.58 C +ATOM 2375 N ASP B 315 -3.772 57.466 24.786 1.00 63.08 N +ATOM 2376 CA ASP B 315 -2.409 56.971 24.606 1.00 66.79 C +ATOM 2377 C ASP B 315 -2.410 56.107 23.355 1.00 68.22 C +ATOM 2378 O ASP B 315 -1.529 56.232 22.497 1.00 68.17 O +ATOM 2379 CB ASP B 315 -1.970 56.152 25.818 1.00 67.49 C +ATOM 2380 CG ASP B 315 -1.973 56.962 27.097 1.00 68.34 C +ATOM 2381 OD1 ASP B 315 -1.559 58.143 27.065 1.00 68.66 O +ATOM 2382 OD2 ASP B 315 -2.394 56.416 28.136 1.00 68.51 O +ATOM 2383 N LYS B 316 -3.418 55.237 23.260 1.00 69.34 N +ATOM 2384 CA LYS B 316 -3.594 54.369 22.099 1.00 70.26 C +ATOM 2385 C LYS B 316 -4.315 55.174 21.024 1.00 69.60 C +ATOM 2386 O LYS B 316 -4.338 56.406 21.055 1.00 69.54 O +ATOM 2387 CB LYS B 316 -4.439 53.133 22.446 1.00 71.61 C +ATOM 2388 CG LYS B 316 -3.654 51.911 22.913 1.00 73.69 C +ATOM 2389 CD LYS B 316 -3.009 52.137 24.272 1.00 78.12 C +ATOM 2390 CE LYS B 316 -2.401 50.850 24.828 1.00 78.93 C +ATOM 2391 NZ LYS B 316 -1.675 51.077 26.114 1.00 78.78 N +ATOM 2392 N SER B 317 -4.909 54.467 20.074 1.00 68.90 N +ATOM 2393 CA SER B 317 -5.642 55.106 18.995 1.00 67.93 C +ATOM 2394 C SER B 317 -7.099 55.286 19.417 1.00 67.00 C +ATOM 2395 O SER B 317 -7.796 56.153 18.905 1.00 66.91 O +ATOM 2396 CB SER B 317 -5.554 54.253 17.721 1.00 67.87 C +ATOM 2397 OG SER B 317 -6.103 52.958 17.928 1.00 67.99 O +ATOM 2398 N ASP B 318 -7.547 54.453 20.349 1.00 66.90 N +ATOM 2399 CA ASP B 318 -8.916 54.510 20.842 1.00 66.29 C +ATOM 2400 C ASP B 318 -8.909 54.832 22.334 1.00 64.78 C +ATOM 2401 O ASP B 318 -7.882 54.679 23.006 1.00 66.05 O +ATOM 2402 CB ASP B 318 -9.626 53.178 20.582 1.00 68.38 C +ATOM 2403 CG ASP B 318 -10.964 53.360 19.886 1.00 71.82 C +ATOM 2404 OD1 ASP B 318 -10.969 53.528 18.648 1.00 72.22 O +ATOM 2405 OD2 ASP B 318 -12.009 53.341 20.574 1.00 74.09 O +ATOM 2406 N GLY B 319 -10.049 55.290 22.844 1.00 62.45 N +ATOM 2407 CA GLY B 319 -10.141 55.635 24.254 1.00 58.53 C +ATOM 2408 C GLY B 319 -11.539 55.542 24.838 1.00 55.94 C +ATOM 2409 O GLY B 319 -12.519 55.350 24.115 1.00 56.62 O +ATOM 2410 N VAL B 320 -11.628 55.671 26.158 1.00 52.67 N +ATOM 2411 CA VAL B 320 -12.904 55.602 26.866 1.00 51.90 C +ATOM 2412 C VAL B 320 -12.919 56.606 28.032 1.00 51.86 C +ATOM 2413 O VAL B 320 -11.860 56.984 28.532 1.00 51.60 O +ATOM 2414 CB VAL B 320 -13.167 54.170 27.413 1.00 51.99 C +ATOM 2415 CG1 VAL B 320 -13.154 53.142 26.282 1.00 48.91 C +ATOM 2416 CG2 VAL B 320 -12.150 53.814 28.498 1.00 51.69 C +ATOM 2417 N ASP B 321 -14.102 57.033 28.487 1.00 51.94 N +ATOM 2418 CA ASP B 321 -15.409 56.619 27.952 1.00 51.94 C +ATOM 2419 C ASP B 321 -16.168 57.763 27.298 1.00 51.28 C +ATOM 2420 O ASP B 321 -17.098 57.532 26.509 1.00 50.73 O +ATOM 2421 CB ASP B 321 -16.299 56.085 29.073 1.00 53.82 C +ATOM 2422 CG ASP B 321 -16.226 54.597 29.213 1.00 57.06 C +ATOM 2423 OD1 ASP B 321 -16.823 53.898 28.368 1.00 58.94 O +ATOM 2424 OD2 ASP B 321 -15.585 54.125 30.172 1.00 58.78 O +ATOM 2425 N GLY B 322 -15.818 58.985 27.694 1.00 49.20 N +ATOM 2426 CA GLY B 322 -16.478 60.153 27.162 1.00 46.76 C +ATOM 2427 C GLY B 322 -16.607 61.299 28.149 1.00 46.98 C +ATOM 2428 O GLY B 322 -16.312 61.180 29.349 1.00 47.60 O +ATOM 2429 N LEU B 323 -17.098 62.415 27.624 1.00 45.57 N +ATOM 2430 CA LEU B 323 -17.289 63.648 28.376 1.00 41.52 C +ATOM 2431 C LEU B 323 -18.749 64.086 28.245 1.00 38.28 C +ATOM 2432 O LEU B 323 -19.422 63.733 27.284 1.00 37.53 O +ATOM 2433 CB LEU B 323 -16.392 64.713 27.764 1.00 42.33 C +ATOM 2434 CG LEU B 323 -16.395 66.061 28.452 1.00 44.14 C +ATOM 2435 CD1 LEU B 323 -15.688 65.898 29.783 1.00 46.10 C +ATOM 2436 CD2 LEU B 323 -15.694 67.095 27.580 1.00 44.24 C +ATOM 2437 N ALA B 324 -19.233 64.878 29.189 1.00 35.53 N +ATOM 2438 CA ALA B 324 -20.611 65.333 29.116 1.00 35.29 C +ATOM 2439 C ALA B 324 -20.873 66.661 29.797 1.00 37.02 C +ATOM 2440 O ALA B 324 -20.330 66.955 30.868 1.00 38.68 O +ATOM 2441 CB ALA B 324 -21.548 64.287 29.690 1.00 31.35 C +ATOM 2442 N PHE B 325 -21.655 67.497 29.130 1.00 37.40 N +ATOM 2443 CA PHE B 325 -22.045 68.759 29.728 1.00 36.79 C +ATOM 2444 C PHE B 325 -23.467 68.478 30.184 1.00 35.94 C +ATOM 2445 O PHE B 325 -24.258 67.909 29.419 1.00 36.02 O +ATOM 2446 CB PHE B 325 -22.039 69.890 28.717 1.00 36.64 C +ATOM 2447 CG PHE B 325 -22.704 71.121 29.224 1.00 36.16 C +ATOM 2448 CD1 PHE B 325 -22.063 71.942 30.144 1.00 35.68 C +ATOM 2449 CD2 PHE B 325 -24.001 71.430 28.827 1.00 35.54 C +ATOM 2450 CE1 PHE B 325 -22.712 73.060 30.670 1.00 37.33 C +ATOM 2451 CE2 PHE B 325 -24.658 72.538 29.343 1.00 34.31 C +ATOM 2452 CZ PHE B 325 -24.016 73.358 30.266 1.00 35.59 C +ATOM 2453 N PHE B 326 -23.825 68.917 31.387 1.00 34.39 N +ATOM 2454 CA PHE B 326 -25.162 68.596 31.861 1.00 34.92 C +ATOM 2455 C PHE B 326 -25.847 69.568 32.800 1.00 35.59 C +ATOM 2456 O PHE B 326 -25.212 70.396 33.471 1.00 34.00 O +ATOM 2457 CB PHE B 326 -25.120 67.234 32.565 1.00 35.19 C +ATOM 2458 CG PHE B 326 -24.398 67.266 33.891 1.00 35.00 C +ATOM 2459 CD1 PHE B 326 -23.008 67.186 33.954 1.00 34.36 C +ATOM 2460 CD2 PHE B 326 -25.109 67.444 35.076 1.00 36.71 C +ATOM 2461 CE1 PHE B 326 -22.347 67.293 35.177 1.00 35.27 C +ATOM 2462 CE2 PHE B 326 -24.456 67.553 36.299 1.00 35.61 C +ATOM 2463 CZ PHE B 326 -23.074 67.477 36.347 1.00 35.50 C +ATOM 2464 N LEU B 327 -27.166 69.390 32.867 1.00 36.16 N +ATOM 2465 CA LEU B 327 -28.042 70.143 33.753 1.00 35.82 C +ATOM 2466 C LEU B 327 -28.726 69.088 34.611 1.00 35.94 C +ATOM 2467 O LEU B 327 -29.324 68.147 34.090 1.00 36.19 O +ATOM 2468 CB LEU B 327 -29.102 70.920 32.982 1.00 34.01 C +ATOM 2469 CG LEU B 327 -28.566 72.115 32.219 1.00 34.81 C +ATOM 2470 CD1 LEU B 327 -28.233 71.692 30.800 1.00 36.43 C +ATOM 2471 CD2 LEU B 327 -29.609 73.208 32.228 1.00 34.49 C +ATOM 2472 N ALA B 328 -28.596 69.226 35.923 1.00 36.19 N +ATOM 2473 CA ALA B 328 -29.191 68.290 36.863 1.00 35.05 C +ATOM 2474 C ALA B 328 -29.814 69.089 37.992 1.00 35.42 C +ATOM 2475 O ALA B 328 -29.587 70.292 38.103 1.00 34.78 O +ATOM 2476 CB ALA B 328 -28.128 67.364 37.400 1.00 35.33 C +ATOM 2477 N PRO B 329 -30.645 68.446 38.824 1.00 36.80 N +ATOM 2478 CA PRO B 329 -31.273 69.161 39.939 1.00 38.28 C +ATOM 2479 C PRO B 329 -30.200 69.809 40.796 1.00 40.16 C +ATOM 2480 O PRO B 329 -29.083 69.299 40.864 1.00 42.62 O +ATOM 2481 CB PRO B 329 -31.994 68.048 40.683 1.00 35.48 C +ATOM 2482 CG PRO B 329 -32.422 67.156 39.566 1.00 36.33 C +ATOM 2483 CD PRO B 329 -31.161 67.070 38.735 1.00 37.39 C +ATOM 2484 N ALA B 330 -30.527 70.953 41.390 1.00 42.29 N +ATOM 2485 CA ALA B 330 -29.601 71.706 42.233 1.00 43.60 C +ATOM 2486 C ALA B 330 -28.856 70.831 43.226 1.00 46.05 C +ATOM 2487 O ALA B 330 -29.458 70.098 44.008 1.00 44.36 O +ATOM 2488 CB ALA B 330 -30.338 72.811 42.959 1.00 43.30 C +ATOM 2489 N ASN B 331 -27.530 70.890 43.145 1.00 51.19 N +ATOM 2490 CA ASN B 331 -26.635 70.121 44.012 1.00 55.64 C +ATOM 2491 C ASN B 331 -26.841 68.607 43.939 1.00 56.36 C +ATOM 2492 O ASN B 331 -26.904 67.924 44.957 1.00 56.60 O +ATOM 2493 CB ASN B 331 -26.724 70.627 45.457 1.00 59.57 C +ATOM 2494 CG ASN B 331 -26.403 72.120 45.573 1.00 64.55 C +ATOM 2495 OD1 ASN B 331 -25.665 72.686 44.753 1.00 67.43 O +ATOM 2496 ND2 ASN B 331 -26.972 72.765 46.583 1.00 64.93 N +ATOM 2497 N SER B 332 -26.940 68.099 42.715 1.00 57.19 N +ATOM 2498 CA SER B 332 -27.116 66.675 42.465 1.00 58.51 C +ATOM 2499 C SER B 332 -25.841 65.930 42.875 1.00 59.02 C +ATOM 2500 O SER B 332 -24.726 66.431 42.701 1.00 58.07 O +ATOM 2501 CB SER B 332 -27.405 66.445 40.968 1.00 58.25 C +ATOM 2502 OG SER B 332 -27.248 65.087 40.577 1.00 60.02 O +ATOM 2503 N GLN B 333 -26.018 64.748 43.453 1.00 59.35 N +ATOM 2504 CA GLN B 333 -24.895 63.921 43.860 1.00 59.66 C +ATOM 2505 C GLN B 333 -24.695 62.841 42.810 1.00 58.11 C +ATOM 2506 O GLN B 333 -25.611 62.539 42.052 1.00 58.84 O +ATOM 2507 CB GLN B 333 -25.192 63.270 45.209 1.00 63.58 C +ATOM 2508 CG GLN B 333 -25.364 64.258 46.343 1.00 68.90 C +ATOM 2509 CD GLN B 333 -24.106 65.077 46.601 1.00 72.55 C +ATOM 2510 OE1 GLN B 333 -23.103 64.951 45.892 1.00 74.16 O +ATOM 2511 NE2 GLN B 333 -24.155 65.922 47.623 1.00 75.13 N +ATOM 2512 N ILE B 334 -23.499 62.269 42.743 1.00 56.81 N +ATOM 2513 CA ILE B 334 -23.254 61.206 41.781 1.00 55.87 C +ATOM 2514 C ILE B 334 -24.121 60.006 42.157 1.00 58.70 C +ATOM 2515 O ILE B 334 -23.963 59.431 43.235 1.00 59.92 O +ATOM 2516 CB ILE B 334 -21.781 60.779 41.764 1.00 53.12 C +ATOM 2517 CG1 ILE B 334 -20.911 61.937 41.279 1.00 52.35 C +ATOM 2518 CG2 ILE B 334 -21.599 59.566 40.870 1.00 51.24 C +ATOM 2519 CD1 ILE B 334 -19.445 61.594 41.142 1.00 49.57 C +ATOM 2520 N PRO B 335 -25.065 59.630 41.280 1.00 60.59 N +ATOM 2521 CA PRO B 335 -25.984 58.505 41.494 1.00 61.07 C +ATOM 2522 C PRO B 335 -25.247 57.276 41.992 1.00 62.10 C +ATOM 2523 O PRO B 335 -24.187 56.922 41.470 1.00 62.00 O +ATOM 2524 CB PRO B 335 -26.556 58.266 40.101 1.00 60.91 C +ATOM 2525 CG PRO B 335 -26.613 59.637 39.537 1.00 62.85 C +ATOM 2526 CD PRO B 335 -25.276 60.222 39.946 1.00 62.51 C +ATOM 2527 N SER B 336 -25.803 56.649 43.023 1.00 63.78 N +ATOM 2528 CA SER B 336 -25.212 55.451 43.609 1.00 64.54 C +ATOM 2529 C SER B 336 -25.110 54.334 42.575 1.00 63.70 C +ATOM 2530 O SER B 336 -26.050 54.106 41.789 1.00 63.69 O +ATOM 2531 CB SER B 336 -26.049 54.976 44.797 1.00 65.53 C +ATOM 2532 OG SER B 336 -25.504 53.791 45.346 1.00 69.28 O +ATOM 2533 N GLY B 337 -23.961 53.658 42.574 1.00 61.30 N +ATOM 2534 CA GLY B 337 -23.735 52.570 41.638 1.00 59.93 C +ATOM 2535 C GLY B 337 -23.748 53.012 40.186 1.00 59.28 C +ATOM 2536 O GLY B 337 -24.442 52.432 39.343 1.00 57.13 O +ATOM 2537 N SER B 338 -23.006 54.074 39.900 1.00 60.29 N +ATOM 2538 CA SER B 338 -22.920 54.589 38.541 1.00 61.21 C +ATOM 2539 C SER B 338 -21.738 53.911 37.853 1.00 61.84 C +ATOM 2540 O SER B 338 -21.109 53.022 38.423 1.00 63.30 O +ATOM 2541 CB SER B 338 -22.733 56.108 38.556 1.00 60.07 C +ATOM 2542 OG SER B 338 -23.135 56.679 37.321 1.00 58.41 O +ATOM 2543 N SER B 339 -21.453 54.306 36.620 1.00 61.32 N +ATOM 2544 CA SER B 339 -20.342 53.719 35.884 1.00 61.95 C +ATOM 2545 C SER B 339 -19.862 54.696 34.827 1.00 61.89 C +ATOM 2546 O SER B 339 -20.603 55.598 34.431 1.00 62.51 O +ATOM 2547 CB SER B 339 -20.767 52.410 35.221 1.00 61.90 C +ATOM 2548 OG SER B 339 -21.774 52.641 34.251 1.00 60.16 O +ATOM 2549 N ALA B 340 -18.629 54.499 34.367 1.00 60.55 N +ATOM 2550 CA ALA B 340 -18.025 55.358 33.358 1.00 58.90 C +ATOM 2551 C ALA B 340 -18.913 55.553 32.125 1.00 57.83 C +ATOM 2552 O ALA B 340 -19.000 56.657 31.589 1.00 58.81 O +ATOM 2553 CB ALA B 340 -16.697 54.804 32.958 1.00 58.70 C +ATOM 2554 N GLY B 341 -19.584 54.490 31.693 1.00 54.81 N +ATOM 2555 CA GLY B 341 -20.454 54.600 30.537 1.00 52.43 C +ATOM 2556 C GLY B 341 -21.693 55.458 30.755 1.00 51.18 C +ATOM 2557 O GLY B 341 -22.389 55.798 29.793 1.00 52.82 O +ATOM 2558 N MET B 342 -21.994 55.779 32.013 1.00 49.80 N +ATOM 2559 CA MET B 342 -23.160 56.600 32.352 1.00 48.30 C +ATOM 2560 C MET B 342 -22.710 57.989 32.832 1.00 46.84 C +ATOM 2561 O MET B 342 -23.486 58.757 33.411 1.00 46.90 O +ATOM 2562 CB MET B 342 -24.037 55.876 33.387 1.00 48.76 C +ATOM 2563 CG MET B 342 -24.469 54.478 32.921 1.00 50.29 C +ATOM 2564 SD MET B 342 -25.566 53.550 34.037 1.00 52.32 S +ATOM 2565 CE MET B 342 -24.454 53.300 35.501 1.00 56.48 C +ATOM 2566 N PHE B 343 -21.438 58.282 32.568 1.00 44.12 N +ATOM 2567 CA PHE B 343 -20.777 59.544 32.892 1.00 43.28 C +ATOM 2568 C PHE B 343 -21.073 60.126 34.259 1.00 43.17 C +ATOM 2569 O PHE B 343 -20.979 61.338 34.454 1.00 43.04 O +ATOM 2570 CB PHE B 343 -21.079 60.581 31.810 1.00 43.02 C +ATOM 2571 CG PHE B 343 -20.924 60.054 30.411 1.00 43.48 C +ATOM 2572 CD1 PHE B 343 -19.658 59.773 29.892 1.00 44.33 C +ATOM 2573 CD2 PHE B 343 -22.045 59.818 29.619 1.00 42.94 C +ATOM 2574 CE1 PHE B 343 -19.509 59.263 28.603 1.00 44.76 C +ATOM 2575 CE2 PHE B 343 -21.912 59.310 28.331 1.00 44.79 C +ATOM 2576 CZ PHE B 343 -20.642 59.030 27.819 1.00 45.92 C +ATOM 2577 N GLY B 344 -21.414 59.252 35.205 1.00 44.49 N +ATOM 2578 CA GLY B 344 -21.720 59.679 36.563 1.00 45.38 C +ATOM 2579 C GLY B 344 -23.031 60.431 36.674 1.00 46.22 C +ATOM 2580 O GLY B 344 -23.246 61.186 37.629 1.00 45.31 O +ATOM 2581 N LEU B 345 -23.915 60.210 35.703 1.00 46.86 N +ATOM 2582 CA LEU B 345 -25.206 60.885 35.678 1.00 48.45 C +ATOM 2583 C LEU B 345 -26.375 59.923 35.862 1.00 50.13 C +ATOM 2584 O LEU B 345 -27.451 60.334 36.301 1.00 51.16 O +ATOM 2585 CB LEU B 345 -25.374 61.662 34.359 1.00 45.65 C +ATOM 2586 CG LEU B 345 -24.238 62.591 33.903 1.00 42.71 C +ATOM 2587 CD1 LEU B 345 -24.548 63.131 32.530 1.00 38.88 C +ATOM 2588 CD2 LEU B 345 -24.028 63.735 34.889 1.00 41.85 C +ATOM 2589 N PHE B 346 -26.164 58.646 35.550 1.00 52.23 N +ATOM 2590 CA PHE B 346 -27.238 57.663 35.673 1.00 55.57 C +ATOM 2591 C PHE B 346 -26.924 56.427 36.519 1.00 58.30 C +ATOM 2592 O PHE B 346 -25.799 55.922 36.521 1.00 57.67 O +ATOM 2593 CB PHE B 346 -27.717 57.230 34.285 1.00 53.91 C +ATOM 2594 CG PHE B 346 -28.194 58.368 33.429 1.00 53.57 C +ATOM 2595 CD1 PHE B 346 -29.468 58.902 33.602 1.00 54.15 C +ATOM 2596 CD2 PHE B 346 -27.362 58.919 32.457 1.00 52.32 C +ATOM 2597 CE1 PHE B 346 -29.905 59.974 32.821 1.00 53.22 C +ATOM 2598 CE2 PHE B 346 -27.788 59.986 31.674 1.00 51.29 C +ATOM 2599 CZ PHE B 346 -29.062 60.513 31.855 1.00 52.68 C +ATOM 2600 N SER B 347 -27.948 55.954 37.230 1.00 62.76 N +ATOM 2601 CA SER B 347 -27.873 54.774 38.099 1.00 64.32 C +ATOM 2602 C SER B 347 -28.099 53.499 37.255 1.00 65.65 C +ATOM 2603 O SER B 347 -27.596 52.434 37.605 1.00 65.20 O +ATOM 2604 CB SER B 347 -28.947 54.889 39.206 1.00 65.54 C +ATOM 2605 OG SER B 347 -28.497 54.428 40.470 1.00 63.70 O +ATOM 2606 N SER B 348 -28.841 53.626 36.147 1.00 66.29 N +ATOM 2607 CA SER B 348 -29.153 52.511 35.233 1.00 68.45 C +ATOM 2608 C SER B 348 -29.427 52.994 33.798 1.00 69.08 C +ATOM 2609 O SER B 348 -29.362 54.186 33.513 1.00 70.67 O +ATOM 2610 CB SER B 348 -30.375 51.727 35.724 1.00 68.87 C +ATOM 2611 OG SER B 348 -31.582 52.385 35.362 1.00 68.41 O +ATOM 2612 N SER B 349 -29.806 52.073 32.913 1.00 70.78 N +ATOM 2613 CA SER B 349 -30.069 52.419 31.511 1.00 73.22 C +ATOM 2614 C SER B 349 -31.532 52.694 31.147 1.00 75.75 C +ATOM 2615 O SER B 349 -31.903 52.652 29.967 1.00 75.07 O +ATOM 2616 CB SER B 349 -29.511 51.335 30.582 1.00 72.47 C +ATOM 2617 OG SER B 349 -30.209 50.112 30.748 1.00 71.98 O +ATOM 2618 N ASP B 350 -32.350 52.993 32.154 1.00 79.01 N +ATOM 2619 CA ASP B 350 -33.767 53.275 31.939 1.00 82.13 C +ATOM 2620 C ASP B 350 -34.024 54.727 31.586 1.00 82.30 C +ATOM 2621 O ASP B 350 -33.128 55.564 31.679 1.00 83.56 O +ATOM 2622 CB ASP B 350 -34.578 52.933 33.190 1.00 86.39 C +ATOM 2623 CG ASP B 350 -34.532 51.460 33.530 1.00 92.12 C +ATOM 2624 OD1 ASP B 350 -34.686 50.624 32.607 1.00 94.21 O +ATOM 2625 OD2 ASP B 350 -34.343 51.139 34.725 1.00 95.43 O +ATOM 2626 N SER B 351 -35.266 55.013 31.205 1.00 82.07 N +ATOM 2627 CA SER B 351 -35.694 56.362 30.851 1.00 82.49 C +ATOM 2628 C SER B 351 -36.673 56.901 31.911 1.00 82.43 C +ATOM 2629 O SER B 351 -37.817 57.243 31.607 1.00 83.46 O +ATOM 2630 CB SER B 351 -36.345 56.357 29.462 1.00 82.74 C +ATOM 2631 OG SER B 351 -36.703 57.668 29.056 1.00 82.92 O +ATOM 2632 N LYS B 352 -36.203 56.983 33.156 1.00 81.95 N +ATOM 2633 CA LYS B 352 -37.014 57.462 34.276 1.00 81.28 C +ATOM 2634 C LYS B 352 -37.058 58.983 34.370 1.00 79.34 C +ATOM 2635 O LYS B 352 -36.026 59.634 34.532 1.00 79.88 O +ATOM 2636 CB LYS B 352 -36.492 56.874 35.593 1.00 83.80 C +ATOM 2637 CG LYS B 352 -36.495 55.350 35.615 1.00 87.97 C +ATOM 2638 CD LYS B 352 -35.908 54.773 36.900 1.00 91.11 C +ATOM 2639 CE LYS B 352 -35.945 53.245 36.856 1.00 92.56 C +ATOM 2640 NZ LYS B 352 -35.436 52.596 38.098 1.00 93.23 N +ATOM 2641 N SER B 353 -38.263 59.540 34.304 1.00 76.64 N +ATOM 2642 CA SER B 353 -38.450 60.988 34.380 1.00 73.72 C +ATOM 2643 C SER B 353 -37.954 61.562 35.700 1.00 70.57 C +ATOM 2644 O SER B 353 -37.825 62.777 35.846 1.00 70.27 O +ATOM 2645 CB SER B 353 -39.926 61.345 34.200 1.00 74.30 C +ATOM 2646 OG SER B 353 -40.701 60.889 35.294 1.00 73.49 O +ATOM 2647 N SER B 354 -37.682 60.675 36.652 1.00 68.30 N +ATOM 2648 CA SER B 354 -37.205 61.054 37.974 1.00 67.42 C +ATOM 2649 C SER B 354 -35.753 61.504 37.967 1.00 66.09 C +ATOM 2650 O SER B 354 -35.340 62.273 38.835 1.00 66.12 O +ATOM 2651 CB SER B 354 -37.375 59.890 38.954 1.00 67.24 C +ATOM 2652 OG SER B 354 -36.655 58.742 38.527 1.00 68.73 O +ATOM 2653 N ASN B 355 -34.986 61.018 36.994 1.00 64.77 N +ATOM 2654 CA ASN B 355 -33.574 61.374 36.870 1.00 63.78 C +ATOM 2655 C ASN B 355 -33.406 62.883 36.749 1.00 62.48 C +ATOM 2656 O ASN B 355 -32.446 63.456 37.274 1.00 64.08 O +ATOM 2657 CB ASN B 355 -32.955 60.693 35.649 1.00 63.95 C +ATOM 2658 CG ASN B 355 -33.047 59.188 35.718 1.00 63.42 C +ATOM 2659 OD1 ASN B 355 -33.434 58.534 34.750 1.00 61.77 O +ATOM 2660 ND2 ASN B 355 -32.700 58.627 36.872 1.00 64.42 N +ATOM 2661 N GLN B 356 -34.364 63.511 36.068 1.00 59.44 N +ATOM 2662 CA GLN B 356 -34.380 64.949 35.843 1.00 55.59 C +ATOM 2663 C GLN B 356 -33.022 65.434 35.388 1.00 55.46 C +ATOM 2664 O GLN B 356 -32.408 66.305 36.016 1.00 56.46 O +ATOM 2665 CB GLN B 356 -34.796 65.674 37.105 1.00 53.46 C +ATOM 2666 CG GLN B 356 -36.152 65.289 37.588 1.00 51.63 C +ATOM 2667 CD GLN B 356 -36.585 66.148 38.733 1.00 52.59 C +ATOM 2668 OE1 GLN B 356 -37.489 66.968 38.594 1.00 53.91 O +ATOM 2669 NE2 GLN B 356 -35.922 65.995 39.872 1.00 51.18 N +ATOM 2670 N ILE B 357 -32.549 64.844 34.298 1.00 52.85 N +ATOM 2671 CA ILE B 357 -31.253 65.190 33.746 1.00 49.51 C +ATOM 2672 C ILE B 357 -31.296 65.365 32.247 1.00 48.37 C +ATOM 2673 O ILE B 357 -31.937 64.601 31.532 1.00 50.82 O +ATOM 2674 CB ILE B 357 -30.192 64.125 34.114 1.00 48.41 C +ATOM 2675 CG1 ILE B 357 -29.728 64.349 35.548 1.00 49.27 C +ATOM 2676 CG2 ILE B 357 -29.008 64.172 33.161 1.00 45.29 C +ATOM 2677 CD1 ILE B 357 -28.717 63.351 36.015 1.00 53.61 C +ATOM 2678 N ILE B 358 -30.670 66.440 31.794 1.00 46.80 N +ATOM 2679 CA ILE B 358 -30.551 66.739 30.379 1.00 44.39 C +ATOM 2680 C ILE B 358 -29.052 66.933 30.216 1.00 41.72 C +ATOM 2681 O ILE B 358 -28.426 67.693 30.974 1.00 41.39 O +ATOM 2682 CB ILE B 358 -31.309 68.022 29.989 1.00 46.37 C +ATOM 2683 CG1 ILE B 358 -32.816 67.777 30.080 1.00 48.54 C +ATOM 2684 CG2 ILE B 358 -30.930 68.459 28.585 1.00 43.61 C +ATOM 2685 CD1 ILE B 358 -33.653 69.001 29.797 1.00 51.82 C +ATOM 2686 N ALA B 359 -28.461 66.204 29.277 1.00 37.62 N +ATOM 2687 CA ALA B 359 -27.028 66.316 29.079 1.00 35.04 C +ATOM 2688 C ALA B 359 -26.611 66.126 27.657 1.00 33.13 C +ATOM 2689 O ALA B 359 -27.316 65.507 26.871 1.00 34.31 O +ATOM 2690 CB ALA B 359 -26.309 65.321 29.943 1.00 35.67 C +ATOM 2691 N VAL B 360 -25.456 66.684 27.335 1.00 31.88 N +ATOM 2692 CA VAL B 360 -24.885 66.570 26.008 1.00 31.26 C +ATOM 2693 C VAL B 360 -23.637 65.714 26.200 1.00 33.00 C +ATOM 2694 O VAL B 360 -22.683 66.115 26.875 1.00 32.86 O +ATOM 2695 CB VAL B 360 -24.509 67.952 25.425 1.00 29.62 C +ATOM 2696 CG1 VAL B 360 -23.987 67.801 24.016 1.00 27.86 C +ATOM 2697 CG2 VAL B 360 -25.707 68.869 25.430 1.00 26.63 C +ATOM 2698 N GLU B 361 -23.676 64.512 25.645 1.00 34.12 N +ATOM 2699 CA GLU B 361 -22.569 63.589 25.775 1.00 35.34 C +ATOM 2700 C GLU B 361 -21.652 63.568 24.578 1.00 37.53 C +ATOM 2701 O GLU B 361 -22.080 63.752 23.438 1.00 38.92 O +ATOM 2702 CB GLU B 361 -23.078 62.167 26.034 1.00 36.66 C +ATOM 2703 CG GLU B 361 -23.931 61.579 24.911 1.00 39.20 C +ATOM 2704 CD GLU B 361 -24.233 60.096 25.104 1.00 43.38 C +ATOM 2705 OE1 GLU B 361 -24.485 59.658 26.247 1.00 43.05 O +ATOM 2706 OE2 GLU B 361 -24.221 59.354 24.102 1.00 47.08 O +ATOM 2707 N PHE B 362 -20.376 63.337 24.871 1.00 40.14 N +ATOM 2708 CA PHE B 362 -19.304 63.223 23.885 1.00 39.55 C +ATOM 2709 C PHE B 362 -18.720 61.844 24.146 1.00 39.27 C +ATOM 2710 O PHE B 362 -17.681 61.703 24.788 1.00 39.07 O +ATOM 2711 CB PHE B 362 -18.268 64.316 24.115 1.00 39.07 C +ATOM 2712 CG PHE B 362 -18.816 65.689 23.921 1.00 43.37 C +ATOM 2713 CD1 PHE B 362 -18.852 66.258 22.649 1.00 45.04 C +ATOM 2714 CD2 PHE B 362 -19.337 66.403 24.996 1.00 43.07 C +ATOM 2715 CE1 PHE B 362 -19.400 67.519 22.454 1.00 44.44 C +ATOM 2716 CE2 PHE B 362 -19.887 67.665 24.811 1.00 42.24 C +ATOM 2717 CZ PHE B 362 -19.919 68.224 23.541 1.00 43.74 C +ATOM 2718 N ASP B 363 -19.483 60.838 23.717 1.00 40.58 N +ATOM 2719 CA ASP B 363 -19.201 59.406 23.870 1.00 41.84 C +ATOM 2720 C ASP B 363 -18.045 58.924 22.997 1.00 44.03 C +ATOM 2721 O ASP B 363 -18.127 59.006 21.771 1.00 46.51 O +ATOM 2722 CB ASP B 363 -20.464 58.645 23.461 1.00 40.86 C +ATOM 2723 CG ASP B 363 -20.846 57.575 24.428 1.00 39.77 C +ATOM 2724 OD1 ASP B 363 -19.945 56.866 24.922 1.00 41.74 O +ATOM 2725 OD2 ASP B 363 -22.062 57.439 24.672 1.00 39.36 O +ATOM 2726 N THR B 364 -16.980 58.411 23.615 1.00 45.87 N +ATOM 2727 CA THR B 364 -15.825 57.895 22.862 1.00 47.33 C +ATOM 2728 C THR B 364 -15.896 56.372 22.753 1.00 50.28 C +ATOM 2729 O THR B 364 -15.270 55.764 21.872 1.00 52.09 O +ATOM 2730 CB THR B 364 -14.484 58.248 23.524 1.00 45.61 C +ATOM 2731 OG1 THR B 364 -14.554 57.948 24.919 1.00 45.94 O +ATOM 2732 CG2 THR B 364 -14.153 59.700 23.337 1.00 44.59 C +ATOM 2733 N TYR B 365 -16.629 55.761 23.681 1.00 51.37 N +ATOM 2734 CA TYR B 365 -16.796 54.321 23.693 1.00 52.92 C +ATOM 2735 C TYR B 365 -18.228 53.939 23.332 1.00 53.99 C +ATOM 2736 O TYR B 365 -19.191 54.373 23.980 1.00 52.77 O +ATOM 2737 CB TYR B 365 -16.434 53.758 25.055 1.00 55.72 C +ATOM 2738 CG TYR B 365 -16.714 52.286 25.152 1.00 58.54 C +ATOM 2739 CD1 TYR B 365 -15.865 51.359 24.555 1.00 59.20 C +ATOM 2740 CD2 TYR B 365 -17.871 51.820 25.781 1.00 59.69 C +ATOM 2741 CE1 TYR B 365 -16.164 50.000 24.576 1.00 61.59 C +ATOM 2742 CE2 TYR B 365 -18.183 50.465 25.808 1.00 60.47 C +ATOM 2743 CZ TYR B 365 -17.328 49.558 25.203 1.00 61.52 C +ATOM 2744 OH TYR B 365 -17.645 48.214 25.203 1.00 63.17 O +ATOM 2745 N PHE B 366 -18.347 53.047 22.353 1.00 55.22 N +ATOM 2746 CA PHE B 366 -19.648 52.611 21.863 1.00 56.89 C +ATOM 2747 C PHE B 366 -19.808 51.095 21.732 1.00 58.64 C +ATOM 2748 O PHE B 366 -20.786 50.630 21.127 1.00 60.68 O +ATOM 2749 CB PHE B 366 -19.892 53.248 20.504 1.00 55.60 C +ATOM 2750 CG PHE B 366 -18.815 52.951 19.505 1.00 55.45 C +ATOM 2751 CD1 PHE B 366 -17.558 53.554 19.614 1.00 55.40 C +ATOM 2752 CD2 PHE B 366 -19.057 52.078 18.447 1.00 54.31 C +ATOM 2753 CE1 PHE B 366 -16.558 53.295 18.683 1.00 54.83 C +ATOM 2754 CE2 PHE B 366 -18.069 51.810 17.510 1.00 53.48 C +ATOM 2755 CZ PHE B 366 -16.815 52.421 17.624 1.00 54.45 C +ATOM 2756 N GLY B 367 -18.850 50.339 22.269 1.00 59.17 N +ATOM 2757 CA GLY B 367 -18.903 48.883 22.204 1.00 60.33 C +ATOM 2758 C GLY B 367 -20.175 48.303 22.798 1.00 62.01 C +ATOM 2759 O GLY B 367 -20.552 48.638 23.924 1.00 61.74 O +ATOM 2760 N LYS B 368 -20.824 47.412 22.048 1.00 63.18 N +ATOM 2761 CA LYS B 368 -22.074 46.796 22.481 1.00 63.97 C +ATOM 2762 C LYS B 368 -22.000 45.782 23.627 1.00 63.67 C +ATOM 2763 O LYS B 368 -23.021 45.447 24.241 1.00 62.92 O +ATOM 2764 CB LYS B 368 -22.826 46.231 21.277 1.00 65.59 C +ATOM 2765 CG LYS B 368 -23.538 47.316 20.474 1.00 71.15 C +ATOM 2766 CD LYS B 368 -24.373 46.723 19.353 1.00 75.82 C +ATOM 2767 CE LYS B 368 -25.383 47.733 18.825 1.00 78.66 C +ATOM 2768 NZ LYS B 368 -26.368 48.140 19.878 1.00 80.65 N +ATOM 2769 N ALA B 369 -20.795 45.314 23.938 1.00 63.37 N +ATOM 2770 CA ALA B 369 -20.618 44.371 25.035 1.00 62.83 C +ATOM 2771 C ALA B 369 -21.044 45.039 26.362 1.00 64.17 C +ATOM 2772 O ALA B 369 -21.798 44.456 27.145 1.00 64.15 O +ATOM 2773 CB ALA B 369 -19.161 43.902 25.101 1.00 57.98 C +ATOM 2774 N TYR B 370 -20.627 46.291 26.571 1.00 65.73 N +ATOM 2775 CA TYR B 370 -20.948 47.022 27.803 1.00 66.33 C +ATOM 2776 C TYR B 370 -21.850 48.250 27.623 1.00 64.96 C +ATOM 2777 O TYR B 370 -22.432 48.730 28.594 1.00 65.31 O +ATOM 2778 CB TYR B 370 -19.661 47.430 28.531 1.00 70.72 C +ATOM 2779 CG TYR B 370 -18.672 46.296 28.714 1.00 77.64 C +ATOM 2780 CD1 TYR B 370 -18.773 45.414 29.796 1.00 79.55 C +ATOM 2781 CD2 TYR B 370 -17.635 46.100 27.797 1.00 80.90 C +ATOM 2782 CE1 TYR B 370 -17.859 44.357 29.958 1.00 83.23 C +ATOM 2783 CE2 TYR B 370 -16.720 45.051 27.944 1.00 85.10 C +ATOM 2784 CZ TYR B 370 -16.833 44.183 29.026 1.00 85.45 C +ATOM 2785 OH TYR B 370 -15.915 43.156 29.163 1.00 86.57 O +ATOM 2786 N ASN B 371 -21.939 48.773 26.400 1.00 62.67 N +ATOM 2787 CA ASN B 371 -22.782 49.937 26.090 1.00 59.74 C +ATOM 2788 C ASN B 371 -23.702 49.562 24.936 1.00 57.53 C +ATOM 2789 O ASN B 371 -23.507 50.010 23.810 1.00 57.26 O +ATOM 2790 CB ASN B 371 -21.929 51.135 25.645 1.00 62.35 C +ATOM 2791 CG ASN B 371 -21.303 51.895 26.800 1.00 62.16 C +ATOM 2792 OD1 ASN B 371 -20.871 53.037 26.627 1.00 64.86 O +ATOM 2793 ND2 ASN B 371 -21.237 51.274 27.971 1.00 64.04 N +ATOM 2794 N PRO B 372 -24.729 48.742 25.202 1.00 56.99 N +ATOM 2795 CA PRO B 372 -25.648 48.289 24.146 1.00 57.10 C +ATOM 2796 C PRO B 372 -26.542 49.361 23.500 1.00 57.68 C +ATOM 2797 O PRO B 372 -26.983 49.199 22.360 1.00 57.24 O +ATOM 2798 CB PRO B 372 -26.470 47.215 24.861 1.00 56.13 C +ATOM 2799 CG PRO B 372 -26.526 47.730 26.265 1.00 56.07 C +ATOM 2800 CD PRO B 372 -25.109 48.187 26.510 1.00 55.90 C +ATOM 2801 N TRP B 373 -26.780 50.457 24.221 1.00 57.08 N +ATOM 2802 CA TRP B 373 -27.622 51.560 23.754 1.00 56.02 C +ATOM 2803 C TRP B 373 -26.979 52.437 22.676 1.00 56.16 C +ATOM 2804 O TRP B 373 -27.679 52.964 21.818 1.00 56.81 O +ATOM 2805 CB TRP B 373 -28.016 52.432 24.941 1.00 55.17 C +ATOM 2806 CG TRP B 373 -26.820 52.862 25.742 1.00 56.79 C +ATOM 2807 CD1 TRP B 373 -25.932 53.851 25.424 1.00 57.17 C +ATOM 2808 CD2 TRP B 373 -26.346 52.283 26.971 1.00 56.75 C +ATOM 2809 NE1 TRP B 373 -24.934 53.918 26.364 1.00 58.68 N +ATOM 2810 CE2 TRP B 373 -25.168 52.968 27.324 1.00 57.61 C +ATOM 2811 CE3 TRP B 373 -26.814 51.257 27.800 1.00 56.63 C +ATOM 2812 CZ2 TRP B 373 -24.438 52.655 28.483 1.00 58.47 C +ATOM 2813 CZ3 TRP B 373 -26.088 50.948 28.952 1.00 56.38 C +ATOM 2814 CH2 TRP B 373 -24.915 51.647 29.280 1.00 57.52 C +ATOM 2815 N ASP B 374 -25.657 52.604 22.747 1.00 56.29 N +ATOM 2816 CA ASP B 374 -24.900 53.429 21.799 1.00 56.54 C +ATOM 2817 C ASP B 374 -24.912 52.906 20.360 1.00 55.75 C +ATOM 2818 O ASP B 374 -25.043 51.707 20.113 1.00 55.38 O +ATOM 2819 CB ASP B 374 -23.432 53.584 22.260 1.00 57.25 C +ATOM 2820 CG ASP B 374 -23.259 54.566 23.413 1.00 59.90 C +ATOM 2821 OD1 ASP B 374 -24.058 55.528 23.532 1.00 63.87 O +ATOM 2822 OD2 ASP B 374 -22.292 54.388 24.188 1.00 60.06 O +ATOM 2823 N PRO B 375 -24.798 53.819 19.389 1.00 56.07 N +ATOM 2824 CA PRO B 375 -24.729 53.483 17.967 1.00 57.15 C +ATOM 2825 C PRO B 375 -23.343 52.945 17.598 1.00 58.48 C +ATOM 2826 O PRO B 375 -22.443 52.873 18.441 1.00 57.39 O +ATOM 2827 CB PRO B 375 -25.001 54.825 17.296 1.00 57.64 C +ATOM 2828 CG PRO B 375 -24.403 55.798 18.253 1.00 56.37 C +ATOM 2829 CD PRO B 375 -24.908 55.276 19.569 1.00 56.48 C +ATOM 2830 N ASP B 376 -23.162 52.619 16.321 1.00 60.50 N +ATOM 2831 CA ASP B 376 -21.901 52.061 15.843 1.00 62.41 C +ATOM 2832 C ASP B 376 -20.747 53.014 15.578 1.00 61.46 C +ATOM 2833 O ASP B 376 -19.968 52.785 14.649 1.00 62.50 O +ATOM 2834 CB ASP B 376 -22.149 51.209 14.602 1.00 66.53 C +ATOM 2835 CG ASP B 376 -22.861 49.923 14.926 1.00 72.11 C +ATOM 2836 OD1 ASP B 376 -22.434 49.230 15.884 1.00 73.90 O +ATOM 2837 OD2 ASP B 376 -23.852 49.613 14.228 1.00 75.59 O +ATOM 2838 N PHE B 377 -20.597 54.046 16.406 1.00 59.65 N +ATOM 2839 CA PHE B 377 -19.502 55.013 16.224 1.00 57.05 C +ATOM 2840 C PHE B 377 -19.378 56.014 17.357 1.00 55.01 C +ATOM 2841 O PHE B 377 -20.280 56.139 18.192 1.00 54.71 O +ATOM 2842 CB PHE B 377 -19.663 55.778 14.901 1.00 56.20 C +ATOM 2843 CG PHE B 377 -21.070 56.253 14.637 1.00 55.20 C +ATOM 2844 CD1 PHE B 377 -21.768 57.002 15.584 1.00 54.70 C +ATOM 2845 CD2 PHE B 377 -21.704 55.929 13.447 1.00 54.45 C +ATOM 2846 CE1 PHE B 377 -23.074 57.413 15.348 1.00 54.13 C +ATOM 2847 CE2 PHE B 377 -23.014 56.338 13.203 1.00 54.88 C +ATOM 2848 CZ PHE B 377 -23.699 57.080 14.154 1.00 53.57 C +ATOM 2849 N LYS B 378 -18.240 56.702 17.400 1.00 52.44 N +ATOM 2850 CA LYS B 378 -18.043 57.726 18.414 1.00 51.53 C +ATOM 2851 C LYS B 378 -19.099 58.780 18.073 1.00 51.16 C +ATOM 2852 O LYS B 378 -19.292 59.132 16.899 1.00 51.28 O +ATOM 2853 CB LYS B 378 -16.620 58.289 18.353 1.00 51.07 C +ATOM 2854 CG LYS B 378 -15.572 57.324 18.895 1.00 49.32 C +ATOM 2855 CD LYS B 378 -14.159 57.862 18.749 1.00 47.48 C +ATOM 2856 CE LYS B 378 -13.125 56.782 19.065 1.00 48.11 C +ATOM 2857 NZ LYS B 378 -12.961 56.518 20.520 1.00 47.70 N +ATOM 2858 N HIS B 379 -19.806 59.258 19.091 1.00 49.62 N +ATOM 2859 CA HIS B 379 -20.883 60.202 18.853 1.00 46.57 C +ATOM 2860 C HIS B 379 -21.049 61.354 19.834 1.00 45.19 C +ATOM 2861 O HIS B 379 -20.404 61.411 20.880 1.00 43.99 O +ATOM 2862 CB HIS B 379 -22.186 59.410 18.824 1.00 44.66 C +ATOM 2863 CG HIS B 379 -22.407 58.578 20.057 1.00 43.94 C +ATOM 2864 ND1 HIS B 379 -21.789 57.372 20.252 1.00 44.47 N +ATOM 2865 CD2 HIS B 379 -23.181 58.796 21.148 1.00 45.86 C +ATOM 2866 CE1 HIS B 379 -22.174 56.867 21.420 1.00 44.67 C +ATOM 2867 NE2 HIS B 379 -23.015 57.712 21.980 1.00 41.75 N +ATOM 2868 N ILE B 380 -21.883 62.306 19.421 1.00 44.32 N +ATOM 2869 CA ILE B 380 -22.267 63.451 20.239 1.00 41.98 C +ATOM 2870 C ILE B 380 -23.730 63.119 20.427 1.00 41.42 C +ATOM 2871 O ILE B 380 -24.408 62.765 19.457 1.00 40.32 O +ATOM 2872 CB ILE B 380 -22.205 64.792 19.482 1.00 40.95 C +ATOM 2873 CG1 ILE B 380 -20.762 65.192 19.209 1.00 40.98 C +ATOM 2874 CG2 ILE B 380 -22.882 65.887 20.294 1.00 39.34 C +ATOM 2875 CD1 ILE B 380 -20.643 66.509 18.475 1.00 40.77 C +ATOM 2876 N GLY B 381 -24.217 63.191 21.657 1.00 41.36 N +ATOM 2877 CA GLY B 381 -25.613 62.866 21.868 1.00 40.92 C +ATOM 2878 C GLY B 381 -26.331 63.746 22.857 1.00 41.14 C +ATOM 2879 O GLY B 381 -25.724 64.296 23.781 1.00 41.01 O +ATOM 2880 N ILE B 382 -27.621 63.934 22.603 1.00 40.73 N +ATOM 2881 CA ILE B 382 -28.478 64.708 23.490 1.00 41.91 C +ATOM 2882 C ILE B 382 -29.168 63.654 24.372 1.00 42.49 C +ATOM 2883 O ILE B 382 -29.870 62.767 23.860 1.00 41.67 O +ATOM 2884 CB ILE B 382 -29.558 65.483 22.714 1.00 42.20 C +ATOM 2885 CG1 ILE B 382 -28.936 66.242 21.533 1.00 43.29 C +ATOM 2886 CG2 ILE B 382 -30.292 66.427 23.652 1.00 39.84 C +ATOM 2887 CD1 ILE B 382 -28.107 67.445 21.908 1.00 44.23 C +ATOM 2888 N ASP B 383 -28.928 63.721 25.680 1.00 40.21 N +ATOM 2889 CA ASP B 383 -29.513 62.766 26.607 1.00 39.09 C +ATOM 2890 C ASP B 383 -30.574 63.410 27.454 1.00 40.18 C +ATOM 2891 O ASP B 383 -30.328 64.438 28.093 1.00 41.10 O +ATOM 2892 CB ASP B 383 -28.437 62.187 27.517 1.00 37.12 C +ATOM 2893 CG ASP B 383 -27.356 61.474 26.753 1.00 36.28 C +ATOM 2894 OD1 ASP B 383 -27.577 61.101 25.583 1.00 38.04 O +ATOM 2895 OD2 ASP B 383 -26.270 61.288 27.327 1.00 35.67 O +ATOM 2896 N VAL B 384 -31.749 62.790 27.477 1.00 41.65 N +ATOM 2897 CA VAL B 384 -32.857 63.314 28.264 1.00 42.31 C +ATOM 2898 C VAL B 384 -33.420 62.235 29.163 1.00 43.33 C +ATOM 2899 O VAL B 384 -34.108 61.325 28.697 1.00 45.21 O +ATOM 2900 CB VAL B 384 -33.993 63.827 27.381 1.00 42.04 C +ATOM 2901 CG1 VAL B 384 -35.035 64.501 28.242 1.00 40.83 C +ATOM 2902 CG2 VAL B 384 -33.464 64.783 26.318 1.00 41.16 C +ATOM 2903 N ASN B 385 -33.113 62.345 30.452 1.00 43.89 N +ATOM 2904 CA ASN B 385 -33.561 61.394 31.459 1.00 44.15 C +ATOM 2905 C ASN B 385 -33.065 59.966 31.262 1.00 44.89 C +ATOM 2906 O ASN B 385 -33.404 59.085 32.044 1.00 46.21 O +ATOM 2907 CB ASN B 385 -35.087 61.411 31.559 1.00 44.71 C +ATOM 2908 CG ASN B 385 -35.593 62.553 32.398 1.00 46.00 C +ATOM 2909 OD1 ASN B 385 -36.711 63.036 32.215 1.00 46.43 O +ATOM 2910 ND2 ASN B 385 -34.772 62.989 33.345 1.00 47.31 N +ATOM 2911 N SER B 386 -32.230 59.747 30.251 1.00 45.83 N +ATOM 2912 CA SER B 386 -31.708 58.417 29.953 1.00 47.92 C +ATOM 2913 C SER B 386 -30.426 58.492 29.156 1.00 48.95 C +ATOM 2914 O SER B 386 -30.293 59.328 28.261 1.00 50.07 O +ATOM 2915 CB SER B 386 -32.735 57.612 29.146 1.00 49.25 C +ATOM 2916 OG SER B 386 -32.176 56.406 28.638 1.00 50.06 O +ATOM 2917 N ILE B 387 -29.519 57.563 29.441 1.00 50.53 N +ATOM 2918 CA ILE B 387 -28.226 57.485 28.765 1.00 52.04 C +ATOM 2919 C ILE B 387 -28.381 57.077 27.288 1.00 52.76 C +ATOM 2920 O ILE B 387 -27.424 57.147 26.495 1.00 53.57 O +ATOM 2921 CB ILE B 387 -27.277 56.514 29.508 1.00 52.39 C +ATOM 2922 CG1 ILE B 387 -25.839 56.641 28.989 1.00 51.80 C +ATOM 2923 CG2 ILE B 387 -27.790 55.092 29.384 1.00 53.94 C +ATOM 2924 CD1 ILE B 387 -25.171 57.963 29.313 1.00 50.39 C +ATOM 2925 N LYS B 388 -29.578 56.612 26.935 1.00 52.91 N +ATOM 2926 CA LYS B 388 -29.873 56.258 25.553 1.00 52.08 C +ATOM 2927 C LYS B 388 -30.314 57.582 24.908 1.00 50.49 C +ATOM 2928 O LYS B 388 -31.459 58.027 25.080 1.00 49.47 O +ATOM 2929 CB LYS B 388 -30.984 55.203 25.486 1.00 53.35 C +ATOM 2930 CG LYS B 388 -31.245 54.690 24.072 1.00 57.56 C +ATOM 2931 CD LYS B 388 -32.162 53.467 24.054 1.00 59.63 C +ATOM 2932 CE LYS B 388 -32.525 53.050 22.625 1.00 60.97 C +ATOM 2933 NZ LYS B 388 -31.321 52.846 21.766 1.00 62.84 N +ATOM 2934 N SER B 389 -29.363 58.243 24.247 1.00 47.97 N +ATOM 2935 CA SER B 389 -29.593 59.528 23.595 1.00 46.39 C +ATOM 2936 C SER B 389 -30.854 59.510 22.748 1.00 47.20 C +ATOM 2937 O SER B 389 -31.218 58.480 22.185 1.00 48.08 O +ATOM 2938 CB SER B 389 -28.404 59.894 22.711 1.00 44.77 C +ATOM 2939 OG SER B 389 -27.173 59.605 23.348 1.00 44.69 O +ATOM 2940 N ILE B 390 -31.540 60.646 22.687 1.00 46.42 N +ATOM 2941 CA ILE B 390 -32.761 60.746 21.893 1.00 45.82 C +ATOM 2942 C ILE B 390 -32.399 61.109 20.453 1.00 46.64 C +ATOM 2943 O ILE B 390 -33.242 61.031 19.549 1.00 47.49 O +ATOM 2944 CB ILE B 390 -33.718 61.808 22.452 1.00 43.17 C +ATOM 2945 CG1 ILE B 390 -33.115 63.200 22.260 1.00 42.90 C +ATOM 2946 CG2 ILE B 390 -33.980 61.539 23.917 1.00 43.99 C +ATOM 2947 CD1 ILE B 390 -34.045 64.312 22.608 1.00 41.28 C +ATOM 2948 N LYS B 391 -31.156 61.547 20.262 1.00 44.85 N +ATOM 2949 CA LYS B 391 -30.648 61.911 18.950 1.00 45.28 C +ATOM 2950 C LYS B 391 -29.144 61.976 19.052 1.00 45.21 C +ATOM 2951 O LYS B 391 -28.603 62.490 20.028 1.00 47.22 O +ATOM 2952 CB LYS B 391 -31.207 63.264 18.483 1.00 44.80 C +ATOM 2953 CG LYS B 391 -30.983 63.537 16.990 1.00 46.16 C +ATOM 2954 CD LYS B 391 -31.787 64.731 16.493 1.00 46.81 C +ATOM 2955 CE LYS B 391 -31.533 65.004 15.015 1.00 46.25 C +ATOM 2956 NZ LYS B 391 -32.200 66.262 14.569 1.00 47.06 N +ATOM 2957 N THR B 392 -28.471 61.401 18.066 1.00 45.64 N +ATOM 2958 CA THR B 392 -27.015 61.395 18.034 1.00 47.30 C +ATOM 2959 C THR B 392 -26.533 61.785 16.650 1.00 48.27 C +ATOM 2960 O THR B 392 -27.321 61.902 15.710 1.00 49.82 O +ATOM 2961 CB THR B 392 -26.426 59.992 18.358 1.00 47.69 C +ATOM 2962 OG1 THR B 392 -27.037 59.000 17.524 1.00 46.73 O +ATOM 2963 CG2 THR B 392 -26.653 59.631 19.803 1.00 49.42 C +ATOM 2964 N VAL B 393 -25.229 62.000 16.540 1.00 48.91 N +ATOM 2965 CA VAL B 393 -24.597 62.346 15.275 1.00 48.60 C +ATOM 2966 C VAL B 393 -23.158 61.869 15.416 1.00 49.64 C +ATOM 2967 O VAL B 393 -22.584 61.886 16.520 1.00 48.23 O +ATOM 2968 CB VAL B 393 -24.648 63.871 14.976 1.00 47.18 C +ATOM 2969 CG1 VAL B 393 -23.903 64.657 16.047 1.00 48.82 C +ATOM 2970 CG2 VAL B 393 -24.051 64.162 13.608 1.00 48.56 C +ATOM 2971 N LYS B 394 -22.602 61.377 14.315 1.00 50.69 N +ATOM 2972 CA LYS B 394 -21.237 60.886 14.326 1.00 51.65 C +ATOM 2973 C LYS B 394 -20.269 61.990 14.714 1.00 50.18 C +ATOM 2974 O LYS B 394 -20.316 63.105 14.176 1.00 49.32 O +ATOM 2975 CB LYS B 394 -20.848 60.320 12.962 1.00 54.47 C +ATOM 2976 CG LYS B 394 -19.466 59.705 12.955 1.00 58.01 C +ATOM 2977 CD LYS B 394 -19.046 59.306 11.564 1.00 61.80 C +ATOM 2978 CE LYS B 394 -17.635 58.747 11.584 1.00 65.37 C +ATOM 2979 NZ LYS B 394 -17.127 58.470 10.210 1.00 67.50 N +ATOM 2980 N TRP B 395 -19.408 61.668 15.670 1.00 47.67 N +ATOM 2981 CA TRP B 395 -18.403 62.599 16.153 1.00 46.77 C +ATOM 2982 C TRP B 395 -17.059 62.280 15.505 1.00 47.53 C +ATOM 2983 O TRP B 395 -16.505 61.192 15.708 1.00 49.32 O +ATOM 2984 CB TRP B 395 -18.297 62.499 17.682 1.00 45.12 C +ATOM 2985 CG TRP B 395 -17.254 63.387 18.297 1.00 40.70 C +ATOM 2986 CD1 TRP B 395 -16.631 64.457 17.718 1.00 39.87 C +ATOM 2987 CD2 TRP B 395 -16.705 63.270 19.611 1.00 39.92 C +ATOM 2988 NE1 TRP B 395 -15.723 65.010 18.584 1.00 37.33 N +ATOM 2989 CE2 TRP B 395 -15.748 64.303 19.758 1.00 38.90 C +ATOM 2990 CE3 TRP B 395 -16.927 62.392 20.678 1.00 40.07 C +ATOM 2991 CZ2 TRP B 395 -15.012 64.485 20.932 1.00 37.90 C +ATOM 2992 CZ3 TRP B 395 -16.195 62.572 21.845 1.00 39.71 C +ATOM 2993 CH2 TRP B 395 -15.247 63.615 21.961 1.00 39.36 C +ATOM 2994 N ASP B 396 -16.550 63.220 14.710 1.00 47.18 N +ATOM 2995 CA ASP B 396 -15.259 63.045 14.046 1.00 46.87 C +ATOM 2996 C ASP B 396 -14.122 63.446 14.982 1.00 45.85 C +ATOM 2997 O ASP B 396 -13.358 64.368 14.689 1.00 46.08 O +ATOM 2998 CB ASP B 396 -15.193 63.857 12.746 1.00 48.56 C +ATOM 2999 CG ASP B 396 -16.129 63.318 11.666 1.00 50.06 C +ATOM 3000 OD1 ASP B 396 -16.016 62.121 11.312 1.00 50.15 O +ATOM 3001 OD2 ASP B 396 -16.968 64.097 11.160 1.00 49.05 O +ATOM 3002 N TRP B 397 -14.019 62.727 16.099 1.00 44.69 N +ATOM 3003 CA TRP B 397 -13.006 62.958 17.122 1.00 44.08 C +ATOM 3004 C TRP B 397 -11.583 62.996 16.607 1.00 43.99 C +ATOM 3005 O TRP B 397 -11.181 62.141 15.826 1.00 46.13 O +ATOM 3006 CB TRP B 397 -13.102 61.870 18.181 1.00 47.13 C +ATOM 3007 CG TRP B 397 -11.978 61.876 19.185 1.00 51.50 C +ATOM 3008 CD1 TRP B 397 -11.670 62.866 20.088 1.00 52.29 C +ATOM 3009 CD2 TRP B 397 -11.055 60.812 19.438 1.00 53.79 C +ATOM 3010 NE1 TRP B 397 -10.619 62.474 20.889 1.00 52.12 N +ATOM 3011 CE2 TRP B 397 -10.224 61.220 20.509 1.00 53.28 C +ATOM 3012 CE3 TRP B 397 -10.855 59.552 18.858 1.00 54.90 C +ATOM 3013 CZ2 TRP B 397 -9.213 60.406 21.020 1.00 54.45 C +ATOM 3014 CZ3 TRP B 397 -9.849 58.742 19.369 1.00 56.17 C +ATOM 3015 CH2 TRP B 397 -9.039 59.174 20.439 1.00 57.07 C +ATOM 3016 N ARG B 398 -10.831 63.993 17.058 1.00 43.49 N +ATOM 3017 CA ARG B 398 -9.427 64.142 16.694 1.00 44.52 C +ATOM 3018 C ARG B 398 -8.634 63.968 17.986 1.00 44.79 C +ATOM 3019 O ARG B 398 -8.715 64.800 18.903 1.00 44.19 O +ATOM 3020 CB ARG B 398 -9.152 65.519 16.090 1.00 45.06 C +ATOM 3021 CG ARG B 398 -9.866 65.783 14.780 1.00 48.71 C +ATOM 3022 CD ARG B 398 -9.476 64.776 13.720 1.00 53.61 C +ATOM 3023 NE ARG B 398 -10.003 65.127 12.400 1.00 59.54 N +ATOM 3024 CZ ARG B 398 -10.739 64.315 11.638 1.00 63.59 C +ATOM 3025 NH1 ARG B 398 -11.045 63.091 12.062 1.00 65.52 N +ATOM 3026 NH2 ARG B 398 -11.165 64.720 10.442 1.00 64.19 N +ATOM 3027 N ASN B 399 -7.913 62.854 18.077 1.00 44.97 N +ATOM 3028 CA ASN B 399 -7.125 62.557 19.265 1.00 45.37 C +ATOM 3029 C ASN B 399 -6.155 63.677 19.633 1.00 44.64 C +ATOM 3030 O ASN B 399 -5.368 64.128 18.800 1.00 43.73 O +ATOM 3031 CB ASN B 399 -6.363 61.235 19.095 1.00 46.95 C +ATOM 3032 CG ASN B 399 -5.558 60.849 20.341 1.00 49.92 C +ATOM 3033 OD1 ASN B 399 -4.496 60.242 20.240 1.00 54.61 O +ATOM 3034 ND2 ASN B 399 -6.063 61.208 21.515 1.00 49.40 N +ATOM 3035 N GLY B 400 -6.259 64.135 20.880 1.00 44.92 N +ATOM 3036 CA GLY B 400 -5.388 65.180 21.390 1.00 43.72 C +ATOM 3037 C GLY B 400 -5.676 66.589 20.910 1.00 44.72 C +ATOM 3038 O GLY B 400 -5.096 67.549 21.425 1.00 43.36 O +ATOM 3039 N GLU B 401 -6.542 66.729 19.909 1.00 45.58 N +ATOM 3040 CA GLU B 401 -6.863 68.049 19.402 1.00 43.77 C +ATOM 3041 C GLU B 401 -7.917 68.724 20.242 1.00 42.93 C +ATOM 3042 O GLU B 401 -8.761 68.058 20.862 1.00 41.79 O +ATOM 3043 CB GLU B 401 -7.296 67.992 17.940 1.00 46.28 C +ATOM 3044 CG GLU B 401 -6.149 67.742 16.982 1.00 50.82 C +ATOM 3045 CD GLU B 401 -4.973 68.687 17.211 1.00 54.96 C +ATOM 3046 OE1 GLU B 401 -5.161 69.843 17.674 1.00 57.86 O +ATOM 3047 OE2 GLU B 401 -3.842 68.258 16.923 1.00 59.07 O +ATOM 3048 N VAL B 402 -7.817 70.051 20.285 1.00 42.08 N +ATOM 3049 CA VAL B 402 -8.733 70.907 21.035 1.00 39.49 C +ATOM 3050 C VAL B 402 -10.014 71.161 20.256 1.00 40.01 C +ATOM 3051 O VAL B 402 -9.976 71.550 19.079 1.00 41.27 O +ATOM 3052 CB VAL B 402 -8.098 72.275 21.318 1.00 37.34 C +ATOM 3053 CG1 VAL B 402 -9.050 73.141 22.117 1.00 36.26 C +ATOM 3054 CG2 VAL B 402 -6.799 72.097 22.056 1.00 38.88 C +ATOM 3055 N ALA B 403 -11.144 70.959 20.929 1.00 39.62 N +ATOM 3056 CA ALA B 403 -12.459 71.181 20.331 1.00 39.07 C +ATOM 3057 C ALA B 403 -13.138 72.390 20.965 1.00 39.26 C +ATOM 3058 O ALA B 403 -13.045 72.605 22.181 1.00 41.43 O +ATOM 3059 CB ALA B 403 -13.344 69.943 20.502 1.00 36.02 C +ATOM 3060 N ASP B 404 -13.768 73.205 20.126 1.00 38.40 N +ATOM 3061 CA ASP B 404 -14.507 74.371 20.592 1.00 39.02 C +ATOM 3062 C ASP B 404 -15.991 74.018 20.483 1.00 38.27 C +ATOM 3063 O ASP B 404 -16.492 73.708 19.387 1.00 39.99 O +ATOM 3064 CB ASP B 404 -14.196 75.597 19.724 1.00 40.94 C +ATOM 3065 CG ASP B 404 -12.805 76.167 19.978 1.00 43.58 C +ATOM 3066 OD1 ASP B 404 -12.308 76.074 21.128 1.00 45.02 O +ATOM 3067 OD2 ASP B 404 -12.217 76.733 19.026 1.00 43.49 O +ATOM 3068 N VAL B 405 -16.681 74.001 21.616 1.00 34.42 N +ATOM 3069 CA VAL B 405 -18.092 73.680 21.596 1.00 33.83 C +ATOM 3070 C VAL B 405 -18.915 74.890 21.985 1.00 34.64 C +ATOM 3071 O VAL B 405 -18.531 75.687 22.849 1.00 35.82 O +ATOM 3072 CB VAL B 405 -18.451 72.530 22.548 1.00 34.57 C +ATOM 3073 CG1 VAL B 405 -19.824 71.999 22.219 1.00 34.29 C +ATOM 3074 CG2 VAL B 405 -17.442 71.419 22.451 1.00 34.48 C +ATOM 3075 N VAL B 406 -20.021 75.051 21.281 1.00 33.14 N +ATOM 3076 CA VAL B 406 -20.956 76.130 21.535 1.00 31.75 C +ATOM 3077 C VAL B 406 -22.306 75.447 21.578 1.00 32.35 C +ATOM 3078 O VAL B 406 -22.713 74.778 20.622 1.00 33.79 O +ATOM 3079 CB VAL B 406 -20.966 77.178 20.407 1.00 28.89 C +ATOM 3080 CG1 VAL B 406 -22.119 78.129 20.600 1.00 24.64 C +ATOM 3081 CG2 VAL B 406 -19.669 77.951 20.400 1.00 30.61 C +ATOM 3082 N ILE B 407 -22.958 75.537 22.723 1.00 31.33 N +ATOM 3083 CA ILE B 407 -24.269 74.939 22.874 1.00 30.61 C +ATOM 3084 C ILE B 407 -25.212 76.084 23.132 1.00 31.65 C +ATOM 3085 O ILE B 407 -24.889 76.988 23.905 1.00 32.58 O +ATOM 3086 CB ILE B 407 -24.328 74.006 24.070 1.00 28.28 C +ATOM 3087 CG1 ILE B 407 -23.389 72.824 23.871 1.00 27.92 C +ATOM 3088 CG2 ILE B 407 -25.737 73.513 24.266 1.00 29.87 C +ATOM 3089 CD1 ILE B 407 -23.206 72.004 25.129 1.00 27.93 C +ATOM 3090 N THR B 408 -26.362 76.067 22.465 1.00 33.87 N +ATOM 3091 CA THR B 408 -27.359 77.121 22.641 1.00 33.35 C +ATOM 3092 C THR B 408 -28.719 76.520 22.955 1.00 32.80 C +ATOM 3093 O THR B 408 -29.038 75.410 22.522 1.00 35.27 O +ATOM 3094 CB THR B 408 -27.520 77.990 21.358 1.00 32.50 C +ATOM 3095 OG1 THR B 408 -28.170 77.232 20.323 1.00 34.61 O +ATOM 3096 CG2 THR B 408 -26.176 78.449 20.859 1.00 33.00 C +ATOM 3097 N TYR B 409 -29.502 77.229 23.753 1.00 31.61 N +ATOM 3098 CA TYR B 409 -30.842 76.768 24.049 1.00 31.82 C +ATOM 3099 C TYR B 409 -31.796 77.928 23.886 1.00 32.70 C +ATOM 3100 O TYR B 409 -31.759 78.900 24.656 1.00 31.51 O +ATOM 3101 CB TYR B 409 -30.997 76.200 25.446 1.00 29.75 C +ATOM 3102 CG TYR B 409 -32.414 75.722 25.639 1.00 30.83 C +ATOM 3103 CD1 TYR B 409 -32.894 74.625 24.921 1.00 30.48 C +ATOM 3104 CD2 TYR B 409 -33.297 76.396 26.486 1.00 30.75 C +ATOM 3105 CE1 TYR B 409 -34.219 74.211 25.044 1.00 31.81 C +ATOM 3106 CE2 TYR B 409 -34.621 75.995 26.615 1.00 29.71 C +ATOM 3107 CZ TYR B 409 -35.077 74.900 25.893 1.00 31.75 C +ATOM 3108 OH TYR B 409 -36.383 74.475 26.024 1.00 32.21 O +ATOM 3109 N ARG B 410 -32.656 77.805 22.883 1.00 32.81 N +ATOM 3110 CA ARG B 410 -33.625 78.833 22.581 1.00 34.98 C +ATOM 3111 C ARG B 410 -35.002 78.421 23.090 1.00 35.98 C +ATOM 3112 O ARG B 410 -35.739 77.688 22.423 1.00 34.64 O +ATOM 3113 CB ARG B 410 -33.603 79.129 21.075 1.00 36.63 C +ATOM 3114 CG ARG B 410 -32.284 79.785 20.629 1.00 42.76 C +ATOM 3115 CD ARG B 410 -32.071 79.794 19.119 1.00 47.83 C +ATOM 3116 NE ARG B 410 -31.141 80.847 18.685 1.00 52.09 N +ATOM 3117 CZ ARG B 410 -29.883 80.654 18.276 1.00 55.79 C +ATOM 3118 NH1 ARG B 410 -29.342 79.434 18.239 1.00 54.87 N +ATOM 3119 NH2 ARG B 410 -29.175 81.693 17.840 1.00 58.00 N +ATOM 3120 N ALA B 411 -35.323 78.897 24.296 1.00 36.47 N +ATOM 3121 CA ALA B 411 -36.591 78.608 24.963 1.00 37.47 C +ATOM 3122 C ALA B 411 -37.845 78.762 24.099 1.00 38.08 C +ATOM 3123 O ALA B 411 -38.691 77.869 24.078 1.00 39.36 O +ATOM 3124 CB ALA B 411 -36.724 79.428 26.232 1.00 35.48 C +ATOM 3125 N PRO B 412 -37.985 79.883 23.370 1.00 38.05 N +ATOM 3126 CA PRO B 412 -39.171 80.057 22.530 1.00 37.68 C +ATOM 3127 C PRO B 412 -39.449 78.871 21.607 1.00 38.99 C +ATOM 3128 O PRO B 412 -40.584 78.405 21.521 1.00 39.27 O +ATOM 3129 CB PRO B 412 -38.838 81.315 21.732 1.00 35.96 C +ATOM 3130 CG PRO B 412 -38.074 82.117 22.700 1.00 36.59 C +ATOM 3131 CD PRO B 412 -37.133 81.087 23.300 1.00 39.69 C +ATOM 3132 N THR B 413 -38.407 78.346 20.966 1.00 39.28 N +ATOM 3133 CA THR B 413 -38.578 77.231 20.043 1.00 37.55 C +ATOM 3134 C THR B 413 -38.163 75.891 20.603 1.00 37.32 C +ATOM 3135 O THR B 413 -38.055 74.919 19.866 1.00 36.72 O +ATOM 3136 CB THR B 413 -37.826 77.478 18.735 1.00 37.39 C +ATOM 3137 OG1 THR B 413 -36.416 77.422 18.970 1.00 38.60 O +ATOM 3138 CG2 THR B 413 -38.177 78.842 18.194 1.00 36.91 C +ATOM 3139 N LYS B 414 -37.893 75.852 21.902 1.00 39.67 N +ATOM 3140 CA LYS B 414 -37.503 74.618 22.583 1.00 42.14 C +ATOM 3141 C LYS B 414 -36.409 73.810 21.873 1.00 42.47 C +ATOM 3142 O LYS B 414 -36.417 72.579 21.929 1.00 41.89 O +ATOM 3143 CB LYS B 414 -38.740 73.737 22.786 1.00 41.79 C +ATOM 3144 CG LYS B 414 -39.868 74.426 23.536 1.00 44.86 C +ATOM 3145 CD LYS B 414 -41.116 73.565 23.573 1.00 47.81 C +ATOM 3146 CE LYS B 414 -42.230 74.253 24.339 1.00 51.15 C +ATOM 3147 NZ LYS B 414 -43.481 73.443 24.361 1.00 53.61 N +ATOM 3148 N SER B 415 -35.468 74.489 21.213 1.00 42.29 N +ATOM 3149 CA SER B 415 -34.414 73.775 20.505 1.00 40.91 C +ATOM 3150 C SER B 415 -33.034 73.893 21.129 1.00 39.09 C +ATOM 3151 O SER B 415 -32.633 74.952 21.622 1.00 38.91 O +ATOM 3152 CB SER B 415 -34.364 74.182 19.032 1.00 42.31 C +ATOM 3153 OG SER B 415 -33.678 75.404 18.857 1.00 47.19 O +ATOM 3154 N LEU B 416 -32.308 72.784 21.066 1.00 37.54 N +ATOM 3155 CA LEU B 416 -30.959 72.680 21.607 1.00 35.42 C +ATOM 3156 C LEU B 416 -29.983 72.438 20.466 1.00 33.73 C +ATOM 3157 O LEU B 416 -30.169 71.525 19.664 1.00 35.00 O +ATOM 3158 CB LEU B 416 -30.890 71.522 22.597 1.00 32.17 C +ATOM 3159 CG LEU B 416 -29.653 71.487 23.476 1.00 30.60 C +ATOM 3160 CD1 LEU B 416 -29.511 72.808 24.189 1.00 31.71 C +ATOM 3161 CD2 LEU B 416 -29.782 70.375 24.473 1.00 29.33 C +ATOM 3162 N THR B 417 -28.945 73.256 20.386 1.00 32.60 N +ATOM 3163 CA THR B 417 -27.987 73.092 19.314 1.00 32.30 C +ATOM 3164 C THR B 417 -26.559 72.982 19.803 1.00 33.15 C +ATOM 3165 O THR B 417 -26.046 73.880 20.470 1.00 34.26 O +ATOM 3166 CB THR B 417 -28.090 74.238 18.301 1.00 31.02 C +ATOM 3167 OG1 THR B 417 -29.455 74.374 17.895 1.00 32.25 O +ATOM 3168 CG2 THR B 417 -27.239 73.955 17.074 1.00 25.95 C +ATOM 3169 N VAL B 418 -25.942 71.849 19.488 1.00 31.81 N +ATOM 3170 CA VAL B 418 -24.562 71.594 19.844 1.00 32.35 C +ATOM 3171 C VAL B 418 -23.730 71.913 18.616 1.00 35.03 C +ATOM 3172 O VAL B 418 -23.951 71.374 17.526 1.00 35.01 O +ATOM 3173 CB VAL B 418 -24.347 70.143 20.232 1.00 32.95 C +ATOM 3174 CG1 VAL B 418 -22.890 69.916 20.582 1.00 33.83 C +ATOM 3175 CG2 VAL B 418 -25.246 69.785 21.395 1.00 32.86 C +ATOM 3176 N CYX B 419 -22.732 72.757 18.818 1.00 37.15 N +ATOM 3177 CA CYX B 419 -21.885 73.202 17.733 1.00 39.51 C +ATOM 3178 C CYX B 419 -20.410 72.958 18.042 1.00 39.13 C +ATOM 3179 O CYX B 419 -19.759 73.784 18.694 1.00 38.71 O +ATOM 3180 CB CYX B 419 -22.127 74.688 17.536 1.00 42.24 C +ATOM 3181 SG CYX B 419 -21.761 75.237 15.859 1.00 53.62 S +ATOM 3182 N LEU B 420 -19.877 71.844 17.537 1.00 38.62 N +ATOM 3183 CA LEU B 420 -18.477 71.480 17.775 1.00 36.11 C +ATOM 3184 C LEU B 420 -17.571 71.681 16.563 1.00 35.35 C +ATOM 3185 O LEU B 420 -17.966 71.403 15.433 1.00 33.51 O +ATOM 3186 CB LEU B 420 -18.401 70.023 18.241 1.00 34.08 C +ATOM 3187 CG LEU B 420 -17.059 69.471 18.732 1.00 34.24 C +ATOM 3188 CD1 LEU B 420 -17.314 68.336 19.710 1.00 32.87 C +ATOM 3189 CD2 LEU B 420 -16.194 69.005 17.571 1.00 35.28 C +ATOM 3190 N SER B 421 -16.341 72.125 16.816 1.00 35.63 N +ATOM 3191 CA SER B 421 -15.368 72.345 15.748 1.00 36.91 C +ATOM 3192 C SER B 421 -13.926 72.273 16.242 1.00 39.28 C +ATOM 3193 O SER B 421 -13.613 72.685 17.359 1.00 40.78 O +ATOM 3194 CB SER B 421 -15.598 73.697 15.083 1.00 34.27 C +ATOM 3195 OG SER B 421 -15.407 74.749 16.008 1.00 34.47 O +ATOM 3196 N TYR B 422 -13.054 71.718 15.405 1.00 41.61 N +ATOM 3197 CA TYR B 422 -11.634 71.599 15.716 1.00 40.29 C +ATOM 3198 C TYR B 422 -10.925 72.642 14.880 1.00 42.74 C +ATOM 3199 O TYR B 422 -10.803 72.491 13.665 1.00 43.32 O +ATOM 3200 CB TYR B 422 -11.118 70.217 15.336 1.00 37.84 C +ATOM 3201 CG TYR B 422 -11.530 69.121 16.286 1.00 36.08 C +ATOM 3202 CD1 TYR B 422 -10.915 68.992 17.532 1.00 36.51 C +ATOM 3203 CD2 TYR B 422 -12.529 68.210 15.946 1.00 34.08 C +ATOM 3204 CE1 TYR B 422 -11.285 67.987 18.419 1.00 34.66 C +ATOM 3205 CE2 TYR B 422 -12.907 67.196 16.830 1.00 33.10 C +ATOM 3206 CZ TYR B 422 -12.282 67.093 18.061 1.00 34.24 C +ATOM 3207 OH TYR B 422 -12.650 66.103 18.946 1.00 36.86 O +ATOM 3208 N PRO B 423 -10.463 73.724 15.514 1.00 44.06 N +ATOM 3209 CA PRO B 423 -9.771 74.800 14.788 1.00 46.08 C +ATOM 3210 C PRO B 423 -8.510 74.361 14.032 1.00 47.65 C +ATOM 3211 O PRO B 423 -8.178 74.929 12.988 1.00 48.28 O +ATOM 3212 CB PRO B 423 -9.455 75.808 15.894 1.00 45.30 C +ATOM 3213 CG PRO B 423 -9.353 74.950 17.123 1.00 45.58 C +ATOM 3214 CD PRO B 423 -10.501 73.995 16.958 1.00 43.91 C +ATOM 3215 N SER B 424 -7.850 73.317 14.531 1.00 49.52 N +ATOM 3216 CA SER B 424 -6.631 72.803 13.919 1.00 50.25 C +ATOM 3217 C SER B 424 -6.800 72.342 12.480 1.00 50.91 C +ATOM 3218 O SER B 424 -5.976 72.685 11.636 1.00 53.22 O +ATOM 3219 CB SER B 424 -6.049 71.657 14.749 1.00 51.39 C +ATOM 3220 OG SER B 424 -6.852 70.490 14.650 1.00 55.29 O +ATOM 3221 N ASP B 425 -7.853 71.574 12.192 1.00 51.21 N +ATOM 3222 CA ASP B 425 -8.071 71.074 10.831 1.00 51.99 C +ATOM 3223 C ASP B 425 -9.452 71.337 10.212 1.00 51.71 C +ATOM 3224 O ASP B 425 -9.858 70.642 9.274 1.00 54.00 O +ATOM 3225 CB ASP B 425 -7.735 69.575 10.753 1.00 53.89 C +ATOM 3226 CG ASP B 425 -8.781 68.693 11.423 1.00 55.61 C +ATOM 3227 OD1 ASP B 425 -9.550 69.192 12.267 1.00 58.47 O +ATOM 3228 OD2 ASP B 425 -8.838 67.491 11.098 1.00 56.49 O +ATOM 3229 N GLY B 426 -10.182 72.311 10.756 1.00 50.06 N +ATOM 3230 CA GLY B 426 -11.496 72.659 10.236 1.00 47.07 C +ATOM 3231 C GLY B 426 -12.618 71.647 10.394 1.00 46.90 C +ATOM 3232 O GLY B 426 -13.750 71.919 9.988 1.00 49.90 O +ATOM 3233 N THR B 427 -12.319 70.483 10.969 1.00 44.80 N +ATOM 3234 CA THR B 427 -13.318 69.436 11.181 1.00 42.04 C +ATOM 3235 C THR B 427 -14.385 69.933 12.153 1.00 41.99 C +ATOM 3236 O THR B 427 -14.060 70.397 13.249 1.00 41.53 O +ATOM 3237 CB THR B 427 -12.677 68.173 11.793 1.00 41.13 C +ATOM 3238 OG1 THR B 427 -11.654 67.679 10.919 1.00 41.48 O +ATOM 3239 CG2 THR B 427 -13.727 67.093 12.018 1.00 38.54 C +ATOM 3240 N SER B 428 -15.654 69.823 11.762 1.00 39.94 N +ATOM 3241 CA SER B 428 -16.751 70.267 12.622 1.00 37.30 C +ATOM 3242 C SER B 428 -18.009 69.412 12.520 1.00 35.35 C +ATOM 3243 O SER B 428 -18.288 68.831 11.480 1.00 35.72 O +ATOM 3244 CB SER B 428 -17.074 71.744 12.368 1.00 37.74 C +ATOM 3245 OG SER B 428 -17.298 72.011 10.996 1.00 39.43 O +ATOM 3246 N ASN B 429 -18.746 69.322 13.626 1.00 36.82 N +ATOM 3247 CA ASN B 429 -19.985 68.532 13.713 1.00 37.34 C +ATOM 3248 C ASN B 429 -21.086 69.361 14.364 1.00 36.94 C +ATOM 3249 O ASN B 429 -20.801 70.272 15.145 1.00 38.66 O +ATOM 3250 CB ASN B 429 -19.773 67.267 14.560 1.00 38.13 C +ATOM 3251 CG ASN B 429 -18.693 66.352 14.005 1.00 37.33 C +ATOM 3252 OD1 ASN B 429 -18.669 66.061 12.813 1.00 38.85 O +ATOM 3253 ND2 ASN B 429 -17.799 65.892 14.873 1.00 36.10 N +ATOM 3254 N ILE B 430 -22.341 69.013 14.091 1.00 36.08 N +ATOM 3255 CA ILE B 430 -23.465 69.757 14.653 1.00 35.65 C +ATOM 3256 C ILE B 430 -24.711 68.904 14.838 1.00 36.61 C +ATOM 3257 O ILE B 430 -24.980 67.976 14.060 1.00 34.90 O +ATOM 3258 CB ILE B 430 -23.833 70.995 13.781 1.00 35.22 C +ATOM 3259 CG1 ILE B 430 -24.842 71.882 14.516 1.00 33.88 C +ATOM 3260 CG2 ILE B 430 -24.413 70.556 12.435 1.00 32.19 C +ATOM 3261 CD1 ILE B 430 -25.129 73.191 13.827 1.00 31.20 C +ATOM 3262 N ILE B 431 -25.485 69.260 15.860 1.00 37.19 N +ATOM 3263 CA ILE B 431 -26.713 68.556 16.182 1.00 36.07 C +ATOM 3264 C ILE B 431 -27.727 69.475 16.876 1.00 36.23 C +ATOM 3265 O ILE B 431 -27.363 70.338 17.676 1.00 37.39 O +ATOM 3266 CB ILE B 431 -26.414 67.299 17.045 1.00 35.86 C +ATOM 3267 CG1 ILE B 431 -27.691 66.508 17.298 1.00 39.33 C +ATOM 3268 CG2 ILE B 431 -25.772 67.683 18.368 1.00 38.48 C +ATOM 3269 CD1 ILE B 431 -28.392 66.079 16.025 1.00 46.58 C +ATOM 3270 N THR B 432 -28.997 69.312 16.513 1.00 37.02 N +ATOM 3271 CA THR B 432 -30.091 70.093 17.085 1.00 35.30 C +ATOM 3272 C THR B 432 -31.203 69.152 17.474 1.00 34.72 C +ATOM 3273 O THR B 432 -31.449 68.167 16.789 1.00 34.80 O +ATOM 3274 CB THR B 432 -30.681 71.051 16.076 1.00 33.73 C +ATOM 3275 OG1 THR B 432 -29.652 71.913 15.597 1.00 37.42 O +ATOM 3276 CG2 THR B 432 -31.782 71.875 16.718 1.00 34.29 C +ATOM 3277 N ALA B 433 -31.906 69.480 18.546 1.00 35.16 N +ATOM 3278 CA ALA B 433 -33.007 68.649 19.004 1.00 36.48 C +ATOM 3279 C ALA B 433 -33.983 69.486 19.809 1.00 38.03 C +ATOM 3280 O ALA B 433 -33.606 70.511 20.372 1.00 39.59 O +ATOM 3281 CB ALA B 433 -32.479 67.506 19.840 1.00 35.37 C +ATOM 3282 N SER B 434 -35.245 69.069 19.827 1.00 39.60 N +ATOM 3283 CA SER B 434 -36.271 69.781 20.582 1.00 42.80 C +ATOM 3284 C SER B 434 -36.407 69.206 21.981 1.00 43.85 C +ATOM 3285 O SER B 434 -36.508 67.989 22.162 1.00 45.52 O +ATOM 3286 CB SER B 434 -37.621 69.736 19.859 1.00 43.03 C +ATOM 3287 OG SER B 434 -37.578 70.553 18.701 1.00 51.40 O +ATOM 3288 N VAL B 435 -36.380 70.088 22.973 1.00 42.99 N +ATOM 3289 CA VAL B 435 -36.498 69.675 24.360 1.00 43.42 C +ATOM 3290 C VAL B 435 -37.204 70.751 25.174 1.00 44.97 C +ATOM 3291 O VAL B 435 -36.913 71.942 25.014 1.00 44.54 O +ATOM 3292 CB VAL B 435 -35.115 69.492 25.004 1.00 42.57 C +ATOM 3293 CG1 VAL B 435 -35.261 68.824 26.355 1.00 42.89 C +ATOM 3294 CG2 VAL B 435 -34.194 68.709 24.103 1.00 41.69 C +ATOM 3295 N ASP B 436 -38.126 70.340 26.045 1.00 45.38 N +ATOM 3296 CA ASP B 436 -38.812 71.298 26.903 1.00 46.69 C +ATOM 3297 C ASP B 436 -38.272 71.151 28.318 1.00 46.98 C +ATOM 3298 O ASP B 436 -38.669 70.247 29.057 1.00 48.55 O +ATOM 3299 CB ASP B 436 -40.328 71.085 26.904 1.00 49.19 C +ATOM 3300 CG ASP B 436 -41.075 72.160 27.701 1.00 52.37 C +ATOM 3301 OD1 ASP B 436 -40.429 73.023 28.342 1.00 52.53 O +ATOM 3302 OD2 ASP B 436 -42.323 72.148 27.675 1.00 55.85 O +ATOM 3303 N LEU B 437 -37.391 72.066 28.700 1.00 45.08 N +ATOM 3304 CA LEU B 437 -36.791 72.043 30.026 1.00 44.49 C +ATOM 3305 C LEU B 437 -37.835 71.987 31.137 1.00 44.36 C +ATOM 3306 O LEU B 437 -37.685 71.233 32.099 1.00 44.85 O +ATOM 3307 CB LEU B 437 -35.931 73.282 30.236 1.00 45.35 C +ATOM 3308 CG LEU B 437 -34.833 73.584 29.220 1.00 46.08 C +ATOM 3309 CD1 LEU B 437 -34.089 74.832 29.667 1.00 46.08 C +ATOM 3310 CD2 LEU B 437 -33.879 72.409 29.094 1.00 45.39 C +ATOM 3311 N LYS B 438 -38.885 72.791 31.000 1.00 43.99 N +ATOM 3312 CA LYS B 438 -39.947 72.852 31.994 1.00 44.14 C +ATOM 3313 C LYS B 438 -40.512 71.461 32.272 1.00 44.87 C +ATOM 3314 O LYS B 438 -40.765 71.091 33.424 1.00 43.70 O +ATOM 3315 CB LYS B 438 -41.057 73.784 31.513 1.00 45.21 C +ATOM 3316 CG LYS B 438 -42.063 74.147 32.586 1.00 48.48 C +ATOM 3317 CD LYS B 438 -43.338 74.766 32.021 1.00 50.32 C +ATOM 3318 CE LYS B 438 -43.105 76.137 31.440 1.00 51.75 C +ATOM 3319 NZ LYS B 438 -44.366 76.754 30.938 1.00 53.45 N +ATOM 3320 N ALA B 439 -40.648 70.671 31.211 1.00 45.33 N +ATOM 3321 CA ALA B 439 -41.188 69.320 31.318 1.00 44.93 C +ATOM 3322 C ALA B 439 -40.209 68.275 31.842 1.00 45.15 C +ATOM 3323 O ALA B 439 -40.604 67.140 32.095 1.00 46.09 O +ATOM 3324 CB ALA B 439 -41.743 68.879 29.970 1.00 43.96 C +ATOM 3325 N ILE B 440 -38.949 68.651 32.049 1.00 45.83 N +ATOM 3326 CA ILE B 440 -37.950 67.683 32.508 1.00 44.29 C +ATOM 3327 C ILE B 440 -37.168 68.005 33.778 1.00 44.11 C +ATOM 3328 O ILE B 440 -37.002 67.136 34.641 1.00 46.47 O +ATOM 3329 CB ILE B 440 -36.974 67.341 31.361 1.00 43.90 C +ATOM 3330 CG1 ILE B 440 -37.752 66.663 30.227 1.00 43.66 C +ATOM 3331 CG2 ILE B 440 -35.857 66.420 31.855 1.00 41.68 C +ATOM 3332 CD1 ILE B 440 -37.271 67.019 28.842 1.00 46.16 C +ATOM 3333 N LEU B 441 -36.670 69.232 33.892 1.00 42.40 N +ATOM 3334 CA LEU B 441 -35.896 69.626 35.062 1.00 40.30 C +ATOM 3335 C LEU B 441 -36.752 70.442 36.019 1.00 40.23 C +ATOM 3336 O LEU B 441 -37.802 70.958 35.631 1.00 39.70 O +ATOM 3337 CB LEU B 441 -34.689 70.463 34.632 1.00 39.55 C +ATOM 3338 CG LEU B 441 -33.805 69.920 33.505 1.00 40.96 C +ATOM 3339 CD1 LEU B 441 -32.882 71.007 33.013 1.00 41.33 C +ATOM 3340 CD2 LEU B 441 -33.011 68.722 33.966 1.00 41.47 C +ATOM 3341 N PRO B 442 -36.359 70.497 37.306 1.00 41.01 N +ATOM 3342 CA PRO B 442 -37.072 71.324 38.291 1.00 40.98 C +ATOM 3343 C PRO B 442 -36.633 72.782 38.088 1.00 41.94 C +ATOM 3344 O PRO B 442 -35.697 73.057 37.328 1.00 42.33 O +ATOM 3345 CB PRO B 442 -36.576 70.768 39.626 1.00 39.51 C +ATOM 3346 CG PRO B 442 -35.168 70.363 39.313 1.00 38.82 C +ATOM 3347 CD PRO B 442 -35.319 69.682 37.964 1.00 40.53 C +ATOM 3348 N GLU B 443 -37.292 73.715 38.763 1.00 41.56 N +ATOM 3349 CA GLU B 443 -36.950 75.119 38.608 1.00 40.93 C +ATOM 3350 C GLU B 443 -35.473 75.426 38.802 1.00 39.84 C +ATOM 3351 O GLU B 443 -34.876 76.147 38.008 1.00 40.36 O +ATOM 3352 CB GLU B 443 -37.756 75.961 39.575 1.00 44.42 C +ATOM 3353 CG GLU B 443 -39.236 75.926 39.350 1.00 50.90 C +ATOM 3354 CD GLU B 443 -39.970 76.731 40.395 1.00 55.68 C +ATOM 3355 OE1 GLU B 443 -39.888 77.984 40.363 1.00 56.17 O +ATOM 3356 OE2 GLU B 443 -40.612 76.100 41.263 1.00 59.69 O +ATOM 3357 N TRP B 444 -34.891 74.878 39.860 1.00 37.87 N +ATOM 3358 CA TRP B 444 -33.493 75.120 40.166 1.00 36.86 C +ATOM 3359 C TRP B 444 -32.577 73.974 39.825 1.00 36.73 C +ATOM 3360 O TRP B 444 -32.659 72.903 40.420 1.00 39.61 O +ATOM 3361 CB TRP B 444 -33.346 75.456 41.635 1.00 38.42 C +ATOM 3362 CG TRP B 444 -34.009 76.721 41.970 1.00 40.25 C +ATOM 3363 CD1 TRP B 444 -35.292 76.887 42.395 1.00 39.96 C +ATOM 3364 CD2 TRP B 444 -33.438 78.029 41.880 1.00 41.72 C +ATOM 3365 NE1 TRP B 444 -35.562 78.219 42.576 1.00 42.39 N +ATOM 3366 CE2 TRP B 444 -34.435 78.944 42.268 1.00 43.56 C +ATOM 3367 CE3 TRP B 444 -32.172 78.514 41.514 1.00 39.68 C +ATOM 3368 CZ2 TRP B 444 -34.218 80.326 42.297 1.00 45.37 C +ATOM 3369 CZ3 TRP B 444 -31.949 79.881 41.543 1.00 40.59 C +ATOM 3370 CH2 TRP B 444 -32.967 80.774 41.933 1.00 44.88 C +ATOM 3371 N VAL B 445 -31.681 74.221 38.882 1.00 35.81 N +ATOM 3372 CA VAL B 445 -30.722 73.216 38.453 1.00 35.62 C +ATOM 3373 C VAL B 445 -29.278 73.619 38.780 1.00 37.18 C +ATOM 3374 O VAL B 445 -29.003 74.704 39.308 1.00 35.16 O +ATOM 3375 CB VAL B 445 -30.824 72.951 36.929 1.00 33.24 C +ATOM 3376 CG1 VAL B 445 -32.169 72.349 36.591 1.00 33.97 C +ATOM 3377 CG2 VAL B 445 -30.613 74.237 36.151 1.00 30.12 C +ATOM 3378 N SER B 446 -28.367 72.702 38.482 1.00 38.42 N +ATOM 3379 CA SER B 446 -26.940 72.898 38.680 1.00 38.87 C +ATOM 3380 C SER B 446 -26.323 72.452 37.370 1.00 37.67 C +ATOM 3381 O SER B 446 -26.718 71.423 36.822 1.00 38.81 O +ATOM 3382 CB SER B 446 -26.426 72.017 39.822 1.00 39.44 C +ATOM 3383 OG SER B 446 -26.227 72.773 41.009 1.00 44.60 O +ATOM 3384 N VAL B 447 -25.404 73.247 36.833 1.00 37.32 N +ATOM 3385 CA VAL B 447 -24.757 72.888 35.573 1.00 36.75 C +ATOM 3386 C VAL B 447 -23.294 72.547 35.760 1.00 36.96 C +ATOM 3387 O VAL B 447 -22.652 72.995 36.709 1.00 37.26 O +ATOM 3388 CB VAL B 447 -24.856 74.010 34.510 1.00 36.22 C +ATOM 3389 CG1 VAL B 447 -26.293 74.209 34.095 1.00 36.34 C +ATOM 3390 CG2 VAL B 447 -24.251 75.307 35.033 1.00 34.10 C +ATOM 3391 N GLY B 448 -22.770 71.745 34.842 1.00 37.98 N +ATOM 3392 CA GLY B 448 -21.373 71.369 34.907 1.00 37.20 C +ATOM 3393 C GLY B 448 -21.009 70.308 33.901 1.00 35.85 C +ATOM 3394 O GLY B 448 -21.746 70.044 32.943 1.00 35.52 O +ATOM 3395 N PHE B 449 -19.858 69.694 34.135 1.00 36.72 N +ATOM 3396 CA PHE B 449 -19.364 68.638 33.270 1.00 37.67 C +ATOM 3397 C PHE B 449 -19.159 67.359 34.054 1.00 38.79 C +ATOM 3398 O PHE B 449 -19.127 67.361 35.286 1.00 39.13 O +ATOM 3399 CB PHE B 449 -18.028 69.027 32.653 1.00 36.33 C +ATOM 3400 CG PHE B 449 -18.046 70.344 31.947 1.00 36.26 C +ATOM 3401 CD1 PHE B 449 -18.378 70.421 30.605 1.00 34.87 C +ATOM 3402 CD2 PHE B 449 -17.689 71.503 32.616 1.00 36.24 C +ATOM 3403 CE1 PHE B 449 -18.354 71.637 29.936 1.00 33.43 C +ATOM 3404 CE2 PHE B 449 -17.662 72.721 31.953 1.00 37.68 C +ATOM 3405 CZ PHE B 449 -17.994 72.785 30.605 1.00 34.70 C +ATOM 3406 N SER B 450 -19.022 66.264 33.321 1.00 40.19 N +ATOM 3407 CA SER B 450 -18.783 64.961 33.913 1.00 42.54 C +ATOM 3408 C SER B 450 -18.194 64.028 32.856 1.00 45.65 C +ATOM 3409 O SER B 450 -18.247 64.307 31.652 1.00 44.84 O +ATOM 3410 CB SER B 450 -20.069 64.368 34.498 1.00 39.68 C +ATOM 3411 OG SER B 450 -20.973 63.992 33.483 1.00 39.48 O +ATOM 3412 N GLY B 451 -17.598 62.937 33.321 1.00 49.06 N +ATOM 3413 CA GLY B 451 -17.002 61.972 32.416 1.00 49.71 C +ATOM 3414 C GLY B 451 -16.521 60.749 33.168 1.00 50.39 C +ATOM 3415 O GLY B 451 -16.641 60.669 34.396 1.00 50.98 O +ATOM 3416 N GLY B 452 -15.968 59.794 32.429 1.00 50.86 N +ATOM 3417 CA GLY B 452 -15.473 58.583 33.048 1.00 50.99 C +ATOM 3418 C GLY B 452 -14.489 57.815 32.189 1.00 52.15 C +ATOM 3419 O GLY B 452 -14.242 58.163 31.027 1.00 50.94 O +ATOM 3420 N VAL B 453 -13.895 56.793 32.804 1.00 54.65 N +ATOM 3421 CA VAL B 453 -12.922 55.887 32.182 1.00 55.55 C +ATOM 3422 C VAL B 453 -13.185 54.536 32.857 1.00 57.42 C +ATOM 3423 O VAL B 453 -12.765 54.309 33.995 1.00 57.81 O +ATOM 3424 CB VAL B 453 -11.448 56.331 32.460 1.00 54.39 C +ATOM 3425 CG1 VAL B 453 -10.477 55.305 31.912 1.00 53.59 C +ATOM 3426 CG2 VAL B 453 -11.162 57.685 31.825 1.00 53.53 C +ATOM 3427 N GLY B 454 -13.910 53.660 32.165 1.00 59.36 N +ATOM 3428 CA GLY B 454 -14.261 52.361 32.727 1.00 62.88 C +ATOM 3429 C GLY B 454 -13.255 51.241 32.541 1.00 63.66 C +ATOM 3430 O GLY B 454 -13.513 50.088 32.930 1.00 65.41 O +ATOM 3431 N ASN B 455 -12.103 51.589 31.975 1.00 62.55 N +ATOM 3432 CA ASN B 455 -11.042 50.629 31.716 1.00 62.54 C +ATOM 3433 C ASN B 455 -9.708 51.346 31.518 1.00 59.98 C +ATOM 3434 O ASN B 455 -9.449 51.912 30.454 1.00 57.16 O +ATOM 3435 CB ASN B 455 -11.397 49.801 30.475 1.00 66.29 C +ATOM 3436 CG ASN B 455 -10.231 48.976 29.964 1.00 70.12 C +ATOM 3437 OD1 ASN B 455 -9.987 48.915 28.756 1.00 71.38 O +ATOM 3438 ND2 ASN B 455 -9.498 48.340 30.882 1.00 73.20 N +ATOM 3439 N ALA B 456 -8.854 51.282 32.536 1.00 60.24 N +ATOM 3440 CA ALA B 456 -7.542 51.931 32.499 1.00 60.50 C +ATOM 3441 C ALA B 456 -6.652 51.508 31.319 1.00 59.90 C +ATOM 3442 O ALA B 456 -5.653 52.175 31.011 1.00 58.08 O +ATOM 3443 CB ALA B 456 -6.815 51.716 33.820 1.00 61.64 C +ATOM 3444 N ALA B 457 -7.020 50.409 30.659 1.00 57.63 N +ATOM 3445 CA ALA B 457 -6.262 49.922 29.510 1.00 58.53 C +ATOM 3446 C ALA B 457 -6.425 50.877 28.329 1.00 59.62 C +ATOM 3447 O ALA B 457 -5.447 51.208 27.645 1.00 58.98 O +ATOM 3448 CB ALA B 457 -6.719 48.513 29.123 1.00 57.59 C +ATOM 3449 N GLU B 458 -7.661 51.324 28.105 1.00 60.18 N +ATOM 3450 CA GLU B 458 -7.960 52.243 27.013 1.00 61.35 C +ATOM 3451 C GLU B 458 -8.153 53.682 27.503 1.00 59.22 C +ATOM 3452 O GLU B 458 -9.142 54.342 27.181 1.00 60.25 O +ATOM 3453 CB GLU B 458 -9.186 51.760 26.237 1.00 65.83 C +ATOM 3454 CG GLU B 458 -8.950 50.486 25.434 1.00 73.69 C +ATOM 3455 CD GLU B 458 -10.135 50.136 24.543 1.00 80.18 C +ATOM 3456 OE1 GLU B 458 -11.167 49.662 25.085 1.00 83.60 O +ATOM 3457 OE2 GLU B 458 -10.037 50.346 23.306 1.00 82.92 O +ATOM 3458 N PHE B 459 -7.152 54.168 28.233 1.00 56.90 N +ATOM 3459 CA PHE B 459 -7.132 55.507 28.822 1.00 54.30 C +ATOM 3460 C PHE B 459 -7.101 56.702 27.865 1.00 53.41 C +ATOM 3461 O PHE B 459 -6.441 56.671 26.820 1.00 54.98 O +ATOM 3462 CB PHE B 459 -5.940 55.611 29.783 1.00 52.97 C +ATOM 3463 CG PHE B 459 -5.740 56.982 30.376 1.00 51.52 C +ATOM 3464 CD1 PHE B 459 -4.968 57.935 29.711 1.00 50.85 C +ATOM 3465 CD2 PHE B 459 -6.319 57.318 31.604 1.00 50.33 C +ATOM 3466 CE1 PHE B 459 -4.774 59.195 30.257 1.00 52.07 C +ATOM 3467 CE2 PHE B 459 -6.132 58.577 32.165 1.00 50.48 C +ATOM 3468 CZ PHE B 459 -5.360 59.520 31.492 1.00 52.94 C +ATOM 3469 N GLU B 460 -7.774 57.773 28.290 1.00 51.43 N +ATOM 3470 CA GLU B 460 -7.840 59.046 27.570 1.00 48.96 C +ATOM 3471 C GLU B 460 -8.210 60.125 28.581 1.00 48.59 C +ATOM 3472 O GLU B 460 -8.847 59.842 29.610 1.00 47.97 O +ATOM 3473 CB GLU B 460 -8.886 59.019 26.453 1.00 47.72 C +ATOM 3474 CG GLU B 460 -10.304 59.134 26.946 1.00 45.63 C +ATOM 3475 CD GLU B 460 -11.341 58.973 25.852 1.00 47.47 C +ATOM 3476 OE1 GLU B 460 -10.992 58.670 24.683 1.00 46.51 O +ATOM 3477 OE2 GLU B 460 -12.531 59.146 26.176 1.00 48.55 O +ATOM 3478 N THR B 461 -7.777 61.353 28.316 1.00 47.58 N +ATOM 3479 CA THR B 461 -8.102 62.454 29.211 1.00 46.69 C +ATOM 3480 C THR B 461 -9.460 63.055 28.871 1.00 47.25 C +ATOM 3481 O THR B 461 -10.044 62.764 27.822 1.00 47.57 O +ATOM 3482 CB THR B 461 -7.038 63.567 29.176 1.00 45.13 C +ATOM 3483 OG1 THR B 461 -6.798 63.981 27.821 1.00 41.39 O +ATOM 3484 CG2 THR B 461 -5.756 63.077 29.822 1.00 43.92 C +ATOM 3485 N HIS B 462 -9.989 63.835 29.808 1.00 47.43 N +ATOM 3486 CA HIS B 462 -11.266 64.518 29.634 1.00 45.58 C +ATOM 3487 C HIS B 462 -11.043 65.864 30.298 1.00 45.43 C +ATOM 3488 O HIS B 462 -11.522 66.144 31.407 1.00 45.34 O +ATOM 3489 CB HIS B 462 -12.383 63.721 30.291 1.00 43.37 C +ATOM 3490 CG HIS B 462 -12.564 62.362 29.696 1.00 43.30 C +ATOM 3491 ND1 HIS B 462 -13.275 62.155 28.535 1.00 44.70 N +ATOM 3492 CD2 HIS B 462 -12.097 61.150 30.074 1.00 42.53 C +ATOM 3493 CE1 HIS B 462 -13.240 60.869 28.222 1.00 41.80 C +ATOM 3494 NE2 HIS B 462 -12.531 60.240 29.141 1.00 44.49 N +ATOM 3495 N ASP B 463 -10.229 66.660 29.610 1.00 43.88 N +ATOM 3496 CA ASP B 463 -9.823 67.977 30.072 1.00 43.43 C +ATOM 3497 C ASP B 463 -10.572 69.124 29.424 1.00 41.23 C +ATOM 3498 O ASP B 463 -10.570 69.268 28.200 1.00 42.55 O +ATOM 3499 CB ASP B 463 -8.322 68.190 29.810 1.00 46.28 C +ATOM 3500 CG ASP B 463 -7.435 67.136 30.474 1.00 48.43 C +ATOM 3501 OD1 ASP B 463 -7.936 66.270 31.243 1.00 49.67 O +ATOM 3502 OD2 ASP B 463 -6.213 67.185 30.206 1.00 50.50 O +ATOM 3503 N VAL B 464 -11.210 69.940 30.253 1.00 37.96 N +ATOM 3504 CA VAL B 464 -11.916 71.115 29.769 1.00 35.72 C +ATOM 3505 C VAL B 464 -11.013 72.297 30.120 1.00 34.68 C +ATOM 3506 O VAL B 464 -10.541 72.417 31.252 1.00 32.46 O +ATOM 3507 CB VAL B 464 -13.353 71.218 30.351 1.00 34.58 C +ATOM 3508 CG1 VAL B 464 -13.482 70.387 31.588 1.00 36.82 C +ATOM 3509 CG2 VAL B 464 -13.733 72.654 30.622 1.00 34.88 C +ATOM 3510 N LEU B 465 -10.720 73.107 29.101 1.00 36.05 N +ATOM 3511 CA LEU B 465 -9.818 74.261 29.188 1.00 36.45 C +ATOM 3512 C LEU B 465 -10.401 75.604 29.568 1.00 37.05 C +ATOM 3513 O LEU B 465 -9.732 76.409 30.227 1.00 38.04 O +ATOM 3514 CB LEU B 465 -9.091 74.439 27.855 1.00 36.12 C +ATOM 3515 CG LEU B 465 -7.904 73.527 27.518 1.00 39.17 C +ATOM 3516 CD1 LEU B 465 -8.151 72.061 27.892 1.00 38.91 C +ATOM 3517 CD2 LEU B 465 -7.627 73.661 26.032 1.00 38.68 C +ATOM 3518 N SER B 466 -11.604 75.881 29.074 1.00 37.07 N +ATOM 3519 CA SER B 466 -12.267 77.153 29.336 1.00 36.47 C +ATOM 3520 C SER B 466 -13.776 76.951 29.333 1.00 36.25 C +ATOM 3521 O SER B 466 -14.274 76.000 28.712 1.00 36.22 O +ATOM 3522 CB SER B 466 -11.861 78.184 28.274 1.00 36.40 C +ATOM 3523 OG SER B 466 -12.242 77.756 26.969 1.00 39.05 O +ATOM 3524 N TRP B 467 -14.495 77.869 29.988 1.00 35.36 N +ATOM 3525 CA TRP B 467 -15.949 77.774 30.097 1.00 33.41 C +ATOM 3526 C TRP B 467 -16.689 79.092 30.250 1.00 33.27 C +ATOM 3527 O TRP B 467 -16.468 79.850 31.197 1.00 33.06 O +ATOM 3528 CB TRP B 467 -16.299 76.878 31.277 1.00 31.90 C +ATOM 3529 CG TRP B 467 -17.729 76.518 31.400 1.00 32.61 C +ATOM 3530 CD1 TRP B 467 -18.655 76.420 30.397 1.00 32.13 C +ATOM 3531 CD2 TRP B 467 -18.376 76.102 32.592 1.00 35.17 C +ATOM 3532 NE1 TRP B 467 -19.840 75.946 30.896 1.00 31.55 N +ATOM 3533 CE2 TRP B 467 -19.700 75.738 32.243 1.00 35.95 C +ATOM 3534 CE3 TRP B 467 -17.972 75.982 33.930 1.00 35.64 C +ATOM 3535 CZ2 TRP B 467 -20.623 75.266 33.195 1.00 38.18 C +ATOM 3536 CZ3 TRP B 467 -18.881 75.516 34.874 1.00 35.52 C +ATOM 3537 CH2 TRP B 467 -20.193 75.158 34.501 1.00 37.68 C +ATOM 3538 N TYR B 468 -17.608 79.327 29.322 1.00 34.01 N +ATOM 3539 CA TYR B 468 -18.432 80.516 29.334 1.00 32.30 C +ATOM 3540 C TYR B 468 -19.880 80.070 29.486 1.00 31.97 C +ATOM 3541 O TYR B 468 -20.334 79.144 28.805 1.00 29.96 O +ATOM 3542 CB TYR B 468 -18.282 81.270 28.025 1.00 34.86 C +ATOM 3543 CG TYR B 468 -19.240 82.425 27.925 1.00 40.32 C +ATOM 3544 CD1 TYR B 468 -18.963 83.628 28.573 1.00 43.48 C +ATOM 3545 CD2 TYR B 468 -20.446 82.308 27.227 1.00 40.15 C +ATOM 3546 CE1 TYR B 468 -19.857 84.686 28.539 1.00 44.79 C +ATOM 3547 CE2 TYR B 468 -21.350 83.361 27.190 1.00 43.20 C +ATOM 3548 CZ TYR B 468 -21.044 84.549 27.852 1.00 45.07 C +ATOM 3549 OH TYR B 468 -21.916 85.609 27.853 1.00 48.39 O +ATOM 3550 N PHE B 469 -20.608 80.726 30.378 1.00 30.74 N +ATOM 3551 CA PHE B 469 -22.003 80.380 30.571 1.00 31.51 C +ATOM 3552 C PHE B 469 -22.866 81.595 30.856 1.00 33.22 C +ATOM 3553 O PHE B 469 -22.518 82.457 31.664 1.00 34.45 O +ATOM 3554 CB PHE B 469 -22.172 79.357 31.696 1.00 30.42 C +ATOM 3555 CG PHE B 469 -23.575 78.850 31.840 1.00 28.98 C +ATOM 3556 CD1 PHE B 469 -23.997 77.744 31.118 1.00 31.52 C +ATOM 3557 CD2 PHE B 469 -24.492 79.505 32.654 1.00 28.76 C +ATOM 3558 CE1 PHE B 469 -25.322 77.289 31.197 1.00 33.01 C +ATOM 3559 CE2 PHE B 469 -25.816 79.062 32.743 1.00 30.96 C +ATOM 3560 CZ PHE B 469 -26.233 77.951 32.010 1.00 31.87 C +ATOM 3561 N THR B 470 -24.001 81.653 30.178 1.00 34.34 N +ATOM 3562 CA THR B 470 -24.943 82.735 30.368 1.00 34.34 C +ATOM 3563 C THR B 470 -26.338 82.160 30.246 1.00 35.09 C +ATOM 3564 O THR B 470 -26.612 81.341 29.369 1.00 34.39 O +ATOM 3565 CB THR B 470 -24.748 83.861 29.341 1.00 33.57 C +ATOM 3566 OG1 THR B 470 -25.570 84.976 29.702 1.00 34.02 O +ATOM 3567 CG2 THR B 470 -25.129 83.398 27.961 1.00 31.76 C +ATOM 3568 N SER B 471 -27.195 82.553 31.177 1.00 37.91 N +ATOM 3569 CA SER B 471 -28.582 82.114 31.222 1.00 38.59 C +ATOM 3570 C SER B 471 -29.451 83.336 31.418 1.00 40.76 C +ATOM 3571 O SER B 471 -29.010 84.341 31.971 1.00 41.05 O +ATOM 3572 CB SER B 471 -28.790 81.161 32.390 1.00 38.28 C +ATOM 3573 OG SER B 471 -29.958 81.494 33.118 1.00 41.94 O +ATOM 3574 N ASN B 472 -30.702 83.235 31.004 1.00 44.39 N +ATOM 3575 CA ASN B 472 -31.617 84.352 31.155 1.00 48.56 C +ATOM 3576 C ASN B 472 -33.079 83.955 31.017 1.00 50.23 C +ATOM 3577 O ASN B 472 -33.458 83.305 30.042 1.00 51.43 O +ATOM 3578 CB ASN B 472 -31.272 85.435 30.148 1.00 53.10 C +ATOM 3579 CG ASN B 472 -32.216 86.612 30.220 1.00 58.03 C +ATOM 3580 OD1 ASN B 472 -33.150 86.703 29.424 1.00 62.28 O +ATOM 3581 ND2 ASN B 472 -31.986 87.519 31.178 1.00 58.05 N +ATOM 3582 N LEU B 473 -33.888 84.370 31.997 1.00 52.10 N +ATOM 3583 CA LEU B 473 -35.328 84.087 32.054 1.00 52.81 C +ATOM 3584 C LEU B 473 -36.217 84.961 31.160 1.00 54.99 C +ATOM 3585 O LEU B 473 -36.478 86.130 31.485 1.00 57.98 O +ATOM 3586 CB LEU B 473 -35.811 84.195 33.496 1.00 49.37 C +ATOM 3587 CG LEU B 473 -35.741 82.886 34.263 1.00 49.21 C +ATOM 3588 CD1 LEU B 473 -36.049 83.112 35.722 1.00 50.29 C +ATOM 3589 CD2 LEU B 473 -36.730 81.918 33.658 1.00 49.25 C +ATOM 3590 N GLU B 474 -36.725 84.378 30.073 1.00 52.71 N +TER 3591 GLU B 474 +ATOM 3591 C1 4YB C 475 -32.314 86.676 -17.512 0.50 40.55 C +ATOM 3592 C2 4YB C 475 -32.267 85.331 -16.801 0.50 38.92 C +ATOM 3593 C3 4YB C 475 -31.401 85.426 -15.519 0.50 38.92 C +ATOM 3594 C4 4YB C 475 -30.018 85.996 -15.893 0.50 39.48 C +ATOM 3595 C5 4YB C 475 -30.179 87.244 -16.720 0.50 40.95 C +ATOM 3596 C6 4YB C 475 -28.843 87.761 -17.172 0.50 40.40 C +ATOM 3597 C2N 4YB C 475 -34.053 83.694 -16.927 0.50 38.81 C +ATOM 3598 CME 4YB C 475 -35.482 83.315 -16.579 0.50 37.52 C +ATOM 3599 N2 4YB C 475 -33.618 84.882 -16.504 0.50 39.15 N +ATOM 3600 O3 4YB C 475 -31.300 84.139 -14.917 0.50 38.46 O +ATOM 3601 O4 4YB C 475 -29.302 86.520 -14.770 0.50 39.18 O +ATOM 3602 O5 4YB C 475 -30.993 87.010 -17.879 0.50 39.83 O +ATOM 3603 O6 4YB C 475 -28.277 86.903 -18.144 0.50 41.36 O +ATOM 3604 O2N 4YB C 475 -33.345 82.901 -17.556 0.50 38.33 O +TER 3605 4YB C 475 +ATOM 3605 O1 ROH C 476 -33.061 86.580 -18.668 0.50 43.28 O +TER 3606 ROH C 476 +ATOM 3606 C1 0YB C 477 -28.701 85.951 -13.705 0.50 37.52 C +ATOM 3607 C2 0YB C 477 -27.758 86.912 -13.011 0.50 37.86 C +ATOM 3608 C3 0YB C 477 -26.905 86.071 -12.095 0.50 36.30 C +ATOM 3609 C4 0YB C 477 -27.777 85.183 -11.205 0.50 35.75 C +ATOM 3610 C5 0YB C 477 -28.845 84.448 -11.996 0.50 34.83 C +ATOM 3611 C6 0YB C 477 -29.784 83.719 -11.106 0.50 34.00 C +ATOM 3612 C2N 0YB C 477 -26.878 88.920 -13.982 0.50 42.46 C +ATOM 3613 CME 0YB C 477 -25.922 89.624 -14.952 0.50 42.72 C +ATOM 3614 N2 0YB C 477 -26.896 87.593 -13.966 0.50 40.70 N +ATOM 3615 O3 0YB C 477 -26.119 86.920 -11.292 0.50 34.15 O +ATOM 3616 O4 0YB C 477 -26.954 84.247 -10.535 0.50 36.68 O +ATOM 3617 O5 0YB C 477 -29.602 85.373 -12.793 0.50 36.92 O +ATOM 3618 O6 0YB C 477 -30.623 84.608 -10.410 0.50 32.70 O +ATOM 3619 O2N 0YB C 477 -27.662 89.594 -13.328 0.50 42.51 O +TER 3620 0YB C 477 +ATOM 3620 C1 4YB D 478 -13.279 45.201 32.861 0.50 39.67 C +ATOM 3621 C2 4YB D 478 -13.290 45.678 31.411 0.50 39.95 C +ATOM 3622 C3 4YB D 478 -14.132 46.975 31.301 0.50 39.83 C +ATOM 3623 C4 4YB D 478 -15.537 46.642 31.893 0.50 39.61 C +ATOM 3624 C5 4YB D 478 -15.413 46.094 33.292 0.50 40.16 C +ATOM 3625 C6 4YB D 478 -16.748 45.727 33.864 0.50 38.97 C +ATOM 3626 C2N 4YB D 478 -11.481 45.207 29.878 0.50 36.84 C +ATOM 3627 CME 4YB D 478 -10.043 45.482 29.466 0.50 36.12 C +ATOM 3628 N2 4YB D 478 -11.939 45.876 30.936 0.50 38.80 N +ATOM 3629 O3 4YB D 478 -14.282 47.307 29.926 0.50 39.42 O +ATOM 3630 O4 4YB D 478 -16.573 47.675 31.894 0.50 39.01 O +ATOM 3631 O5 4YB D 478 -14.610 44.920 33.311 0.50 39.16 O +ATOM 3632 O6 4YB D 478 -17.272 44.639 33.157 0.50 41.81 O +ATOM 3633 O2N 4YB D 478 -12.164 44.425 29.227 0.50 34.53 O +TER 3634 4YB D 478 +ATOM 3634 O1 ROH D 479 -12.540 44.025 32.978 0.50 43.38 O +TER 3635 ROH D 479 +ATOM 3635 C1 0YA D 480 -16.527 49.046 31.831 0.50 38.43 C +ATOM 3636 C2 0YA D 480 -17.778 49.772 32.309 0.50 38.49 C +ATOM 3637 C3 0YA D 480 -18.610 50.407 31.223 0.50 37.18 C +ATOM 3638 C4 0YA D 480 -17.720 51.109 30.204 0.50 36.00 C +ATOM 3639 C5 0YA D 480 -16.689 50.140 29.650 0.50 34.86 C +ATOM 3640 C6 0YA D 480 -15.772 50.912 28.727 0.50 33.50 C +ATOM 3641 C2N 0YA D 480 -18.672 49.104 34.407 0.50 42.00 C +ATOM 3642 CME 0YA D 480 -19.616 48.286 35.253 0.50 41.69 C +ATOM 3643 N2 0YA D 480 -18.633 48.901 33.087 0.50 39.97 N +ATOM 3644 O3 0YA D 480 -19.433 51.377 31.858 0.50 35.66 O +ATOM 3645 O4 0YA D 480 -18.538 51.571 29.156 0.50 36.68 O +ATOM 3646 O5 0YA D 480 -15.854 49.578 30.696 0.50 37.38 O +ATOM 3647 O6 0YA D 480 -14.925 51.759 29.470 0.50 33.10 O +ATOM 3648 O2N 0YA D 480 -17.879 49.880 34.956 0.50 42.89 O +TER 3649 0YA D 480 +ATOM 3649 MN MN A 481 -21.408 80.273 -3.837 1.00 30.97 MN +ATOM 3650 CA CA A 482 -24.813 81.543 -6.493 1.00 57.22 CA +TER 3651 CA A 482 +ATOM 3651 C1 0YB A 483 -16.029 97.046 -9.794 1.00 77.19 C +ATOM 3652 C2 0YB A 483 -16.013 98.002 -11.010 1.00 82.15 C +ATOM 3653 C3 0YB A 483 -14.796 98.956 -10.853 1.00 82.88 C +ATOM 3654 C4 0YB A 483 -15.038 99.779 -9.591 1.00 83.22 C +ATOM 3655 C5 0YB A 483 -15.226 98.845 -8.371 1.00 82.93 C +ATOM 3656 C6 0YB A 483 -15.678 99.643 -7.149 1.00 82.07 C +ATOM 3657 C2N 0YB A 483 -16.688 97.772 -13.327 1.00 88.62 C +ATOM 3658 CME 0YB A 483 -16.607 96.975 -14.619 1.00 86.41 C +ATOM 3659 N2 0YB A 483 -15.996 97.292 -12.282 1.00 87.65 N +ATOM 3660 O3 0YB A 483 -14.634 99.824 -11.984 1.00 79.76 O +ATOM 3661 O4 0YB A 483 -13.947 100.675 -9.364 1.00 80.51 O +ATOM 3662 O5 0YB A 483 -16.250 97.831 -8.611 1.00 81.06 O +ATOM 3663 O6 0YB A 483 -16.977 100.210 -7.343 1.00 82.03 O +ATOM 3664 O2N 0YB A 483 -17.385 98.803 -13.269 1.00 89.68 O +TER 3665 0YB A 483 +ATOM 3665 MN MN B 484 -24.097 57.499 23.802 1.00 38.25 MN +ATOM 3666 CA CA B 485 -20.600 55.103 25.587 1.00 52.94 CA +TER 3667 CA B 485 +END diff --git a/test/Test_PrepareForLeap/1qos.pdb b/test/Test_PrepareForLeap/1qos.pdb new file mode 100644 index 0000000000..9c444fcea1 --- /dev/null +++ b/test/Test_PrepareForLeap/1qos.pdb @@ -0,0 +1,4274 @@ +HEADER LECTIN 16-NOV-99 1QOS +TITLE LECTIN UEA-II COMPLEXED WITH CHITOBIOSE +CAVEAT 1QOS NAG D 2 HAS WRONG CHIRALITY AT ATOM C1 +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: CHITIN BINDING LECTIN, UEA-II; +COMPND 3 CHAIN: A, B +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: ULEX EUROPAEUS; +SOURCE 3 ORGANISM_COMMON: FURZE; +SOURCE 4 ORGANISM_TAXID: 3902; +SOURCE 5 ORGAN: SEED +KEYWDS LECTIN, CARBOHYDRATE BINDING, N-ACETYLGLUCOSAMINE +EXPDTA X-RAY DIFFRACTION +AUTHOR R.LORIS,H.DE GREVE,M.-H.DAO-THI,J.MESSENS,A.IMBERTY,L.WYNS +REVDAT 6 29-JUL-20 1QOS 1 CAVEAT COMPND REMARK HETNAM +REVDAT 6 2 1 LINK SITE ATOM +REVDAT 5 24-JUL-19 1QOS 1 REMARK LINK +REVDAT 4 21-JUL-09 1QOS 1 REMARK DBREF +REVDAT 3 24-FEB-09 1QOS 1 VERSN +REVDAT 2 02-SEP-00 1QOS 1 JRNL +REVDAT 1 07-FEB-00 1QOS 0 +JRNL AUTH R.LORIS,H.DE GREVE,M.-H.DAO-THI,J.MESSENS,A.IMBERTY,L.WYNS +JRNL TITL STRUCTURAL BASIS OF CARBOHYDRATE RECOGNITION BY LECTIN II +JRNL TITL 2 FROM ULEX EUROPAEUS, A PROTEIN WITH A PROMISCUOUS +JRNL TITL 3 CARBOHYDRATE BINDING SITE +JRNL REF J.MOL.BIOL. V. 301 987 2000 +JRNL REFN ISSN 0022-2836 +JRNL PMID 10966800 +JRNL DOI 10.1006/JMBI.2000.4016 +REMARK 1 +REMARK 1 REFERENCE 1 +REMARK 1 AUTH J.BOUCKAERT,T.W.HAMELRYCK,L.WYNS,R.LORIS,T.W.HAMELRYCK +REMARK 1 TITL NOVEL STRUCTURES OF PLANT LECTINS AND THEIR COMPLEXES WITH +REMARK 1 TITL 2 CARBOHYDRATES +REMARK 1 REF CURR.OPIN.STRUCT.BIOL. V. 9 572 1999 +REMARK 1 REFN ISSN 0959-440X +REMARK 1 PMID 10508764 +REMARK 1 DOI 10.1016/S0959-440X(99)00007-X +REMARK 1 REFERENCE 2 +REMARK 1 AUTH M.-H.DAO-THI,P.RIZKALLAH,L.WYNS,F.POORTMANS,R.LORIS +REMARK 1 TITL THE QUATERNARY STRUCTURE OF UEA-II, THE CHITOBIOSE SPECIFIC +REMARK 1 TITL 2 LECTIN FROM GORSE +REMARK 1 REF ACTA CRYSTALLOGR.,SECT.D V. 54 844 1998 +REMARK 1 REFN ISSN 0907-4449 +REMARK 1 PMID 9757099 +REMARK 1 DOI 10.1107/S0907444998001218 +REMARK 1 REFERENCE 3 +REMARK 1 AUTH R.LORIS,T.W.HAMELRYCK,J.BOUCKAERT,L.WYNS +REMARK 1 TITL LEGUME LECTIN STRUCTURE +REMARK 1 REF BIOCHIM.BIOPHYS.ACTA V.1383 9 1998 +REMARK 1 REFN ISSN 0006-3002 +REMARK 1 PMID 9546043 +REMARK 1 DOI 10.1016/S0167-4838(97)00182-9 +REMARK 2 +REMARK 2 RESOLUTION. 2.95 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : X-PLOR 3.8 +REMARK 3 AUTHORS : BRUNGER +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 2.95 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 20.00 +REMARK 3 DATA CUTOFF (SIGMA(F)) : 0.000 +REMARK 3 DATA CUTOFF HIGH (ABS(F)) : 0.000 +REMARK 3 DATA CUTOFF LOW (ABS(F)) : 0.0000 +REMARK 3 COMPLETENESS (WORKING+TEST) (%) : 98.2 +REMARK 3 NUMBER OF REFLECTIONS : 12117 +REMARK 3 +REMARK 3 FIT TO DATA USED IN REFINEMENT. +REMARK 3 CROSS-VALIDATION METHOD : THROUGHOUT +REMARK 3 FREE R VALUE TEST SET SELECTION : RANDOM +REMARK 3 R VALUE (WORKING SET) : 0.189 +REMARK 3 FREE R VALUE : 0.223 +REMARK 3 FREE R VALUE TEST SET SIZE (%) : 8.000 +REMARK 3 FREE R VALUE TEST SET COUNT : 970 +REMARK 3 ESTIMATED ERROR OF FREE R VALUE : NULL +REMARK 3 +REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN. +REMARK 3 TOTAL NUMBER OF BINS USED : 8 +REMARK 3 BIN RESOLUTION RANGE HIGH (A) : 2.75 +REMARK 3 BIN RESOLUTION RANGE LOW (A) : 3.08 +REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : 99.10 +REMARK 3 REFLECTIONS IN BIN (WORKING SET) : 1355 +REMARK 3 BIN R VALUE (WORKING SET) : 0.2893 +REMARK 3 BIN FREE R VALUE : 0.3527 +REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : 8.60 +REMARK 3 BIN FREE R VALUE TEST SET COUNT : 127 +REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : NULL +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 3590 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 76 +REMARK 3 SOLVENT ATOMS : 0 +REMARK 3 +REMARK 3 B VALUES. +REMARK 3 FROM WILSON PLOT (A**2) : NULL +REMARK 3 MEAN B VALUE (OVERALL, A**2) : NULL +REMARK 3 OVERALL ANISOTROPIC B VALUE. +REMARK 3 B11 (A**2) : NULL +REMARK 3 B22 (A**2) : NULL +REMARK 3 B33 (A**2) : NULL +REMARK 3 B12 (A**2) : NULL +REMARK 3 B13 (A**2) : NULL +REMARK 3 B23 (A**2) : NULL +REMARK 3 +REMARK 3 ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM LUZZATI PLOT (A) : NULL +REMARK 3 ESD FROM SIGMAA (A) : NULL +REMARK 3 LOW RESOLUTION CUTOFF (A) : NULL +REMARK 3 +REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : NULL +REMARK 3 ESD FROM C-V SIGMAA (A) : NULL +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES. +REMARK 3 BOND LENGTHS (A) : 0.008 +REMARK 3 BOND ANGLES (DEGREES) : 1.511 +REMARK 3 DIHEDRAL ANGLES (DEGREES) : 28.89 +REMARK 3 IMPROPER ANGLES (DEGREES) : 1.132 +REMARK 3 +REMARK 3 ISOTROPIC THERMAL MODEL : RESTRAINED +REMARK 3 +REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA +REMARK 3 MAIN-CHAIN BOND (A**2) : NULL ; NULL +REMARK 3 MAIN-CHAIN ANGLE (A**2) : NULL ; NULL +REMARK 3 SIDE-CHAIN BOND (A**2) : NULL ; NULL +REMARK 3 SIDE-CHAIN ANGLE (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 NCS MODEL : NULL +REMARK 3 +REMARK 3 NCS RESTRAINTS. RMS SIGMA/WEIGHT +REMARK 3 GROUP 1 POSITIONAL (A) : NULL ; NULL +REMARK 3 GROUP 1 B-FACTOR (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 PARAMETER FILE 1 : NULL +REMARK 3 TOPOLOGY FILE 1 : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: NULL +REMARK 4 +REMARK 4 1QOS COMPLIES WITH FORMAT V. 3.30, 13-JUL-11 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY PDBE ON 16-NOV-99. +REMARK 100 THE DEPOSITION ID IS D_1290004391. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : NULL +REMARK 200 TEMPERATURE (KELVIN) : 287.0 +REMARK 200 PH : 6.50 +REMARK 200 NUMBER OF CRYSTALS USED : 1 +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : Y +REMARK 200 RADIATION SOURCE : EMBL/DESY, HAMBURG +REMARK 200 BEAMLINE : X11 +REMARK 200 X-RAY GENERATOR MODEL : NULL +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M +REMARK 200 WAVELENGTH OR RANGE (A) : 0.909 +REMARK 200 MONOCHROMATOR : NULL +REMARK 200 OPTICS : MIRRORS +REMARK 200 +REMARK 200 DETECTOR TYPE : IMAGE PLATE +REMARK 200 DETECTOR MANUFACTURER : MARRESEARCH +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : DENZO +REMARK 200 DATA SCALING SOFTWARE : SCALEPACK +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 12117 +REMARK 200 RESOLUTION RANGE HIGH (A) : 2.950 +REMARK 200 RESOLUTION RANGE LOW (A) : 20.000 +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : -3.000 +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : 98.2 +REMARK 200 DATA REDUNDANCY : 3.910 +REMARK 200 R MERGE (I) : 0.13500 +REMARK 200 R SYM (I) : NULL +REMARK 200 FOR THE DATA SET : 10.1800 +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : 2.95 +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : 3.08 +REMARK 200 COMPLETENESS FOR SHELL (%) : 99.1 +REMARK 200 DATA REDUNDANCY IN SHELL : 4.02 +REMARK 200 R MERGE FOR SHELL (I) : 0.55000 +REMARK 200 R SYM FOR SHELL (I) : NULL +REMARK 200 FOR SHELL : 3.240 +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: SINGLE WAVELENGTH +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT +REMARK 200 SOFTWARE USED: X-PLOR 3.8 +REMARK 200 STARTING MODEL: UEA-II COMPLEXED WITH NAG (1QOO) +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 54.54 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.71 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: PH 6.50 +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 31 2 1 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -Y,X-Y,Z+1/3 +REMARK 290 3555 -X+Y,-X,Z+2/3 +REMARK 290 4555 Y,X,-Z +REMARK 290 5555 X-Y,-Y,-Z+2/3 +REMARK 290 6555 -X,-X+Y,-Z+1/3 +REMARK 290 +REMARK 290 WHERE NNN -> OPERATOR NUMBER +REMARK 290 MMM -> TRANSLATION VECTOR +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS +REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM +REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY +REMARK 290 RELATED MOLECULES. +REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 2 -0.500000 -0.866025 0.000000 0.00000 +REMARK 290 SMTRY2 2 0.866025 -0.500000 0.000000 0.00000 +REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 29.00667 +REMARK 290 SMTRY1 3 -0.500000 0.866025 0.000000 0.00000 +REMARK 290 SMTRY2 3 -0.866025 -0.500000 0.000000 0.00000 +REMARK 290 SMTRY3 3 0.000000 0.000000 1.000000 58.01333 +REMARK 290 SMTRY1 4 -0.500000 0.866025 0.000000 0.00000 +REMARK 290 SMTRY2 4 0.866025 0.500000 0.000000 0.00000 +REMARK 290 SMTRY3 4 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 SMTRY1 5 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 5 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 5 0.000000 0.000000 -1.000000 58.01333 +REMARK 290 SMTRY1 6 -0.500000 -0.866025 0.000000 0.00000 +REMARK 290 SMTRY2 6 -0.866025 0.500000 0.000000 0.00000 +REMARK 290 SMTRY3 6 0.000000 0.000000 -1.000000 29.00667 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1 +REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM +REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN +REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON +REMARK 300 BURIED SURFACE AREA. +REMARK 350 +REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN +REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE +REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS +REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND +REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN. +REMARK 350 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: TETRAMERIC +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: TETRAMERIC +REMARK 350 SOFTWARE USED: PQS +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B, C, D +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 350 BIOMT1 2 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 2 0.000000 -1.000000 0.000000 183.64935 +REMARK 350 BIOMT3 2 0.000000 0.000000 -1.000000 58.01333 +REMARK 465 +REMARK 465 MISSING RESIDUES +REMARK 465 THE FOLLOWING RESIDUES WERE NOT LOCATED IN THE +REMARK 465 EXPERIMENT. (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 465 IDENTIFIER; SSSEQ=SEQUENCE NUMBER; I=INSERTION CODE.) +REMARK 465 +REMARK 465 M RES C SSSEQI +REMARK 465 ASN A 1 +REMARK 465 LEU A 2 +REMARK 465 ALA A 240 +REMARK 465 ASN A 241 +REMARK 465 ASN A 242 +REMARK 465 ASN B 1 +REMARK 465 LEU B 2 +REMARK 465 ALA B 240 +REMARK 465 ASN B 241 +REMARK 465 ASN B 242 +REMARK 470 +REMARK 470 MISSING ATOM +REMARK 470 THE FOLLOWING RESIDUES HAVE MISSING ATOMS (M=MODEL NUMBER; +REMARK 470 RES=RESIDUE NAME; C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; +REMARK 470 I=INSERTION CODE): +REMARK 470 M RES CSSEQI ATOMS +REMARK 470 SER A 3 OG +REMARK 470 LYS A 41 CG CD CE NZ +REMARK 470 GLU A 239 CA C O CB CG CD OE1 +REMARK 470 GLU A 239 OE2 +REMARK 470 SER B 3 OG +REMARK 470 LYS B 41 CG CD CE NZ +REMARK 470 GLU B 239 CA C O CB CG CD OE1 +REMARK 470 GLU B 239 OE2 +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: TORSION ANGLES +REMARK 500 +REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS: +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2) +REMARK 500 +REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI- +REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400 +REMARK 500 +REMARK 500 M RES CSSEQI PSI PHI +REMARK 500 PHE A 108 26.46 42.19 +REMARK 500 SER A 116 59.89 -111.58 +REMARK 500 ASP A 141 37.26 -80.52 +REMARK 500 GLU A 223 53.94 -103.35 +REMARK 500 PHE B 108 26.69 42.69 +REMARK 500 SER B 116 59.81 -111.21 +REMARK 500 ASP B 141 37.20 -79.87 +REMARK 500 ASN B 220 104.45 -160.77 +REMARK 500 GLU B 223 53.82 -103.12 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 620 +REMARK 620 METAL COORDINATION +REMARK 620 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 620 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE): +REMARK 620 +REMARK 620 COORDINATION ANGLES FOR: M RES CSSEQI METAL +REMARK 620 MN A 301 MN +REMARK 620 N RES CSSEQI ATOM +REMARK 620 1 GLU A 126 OE2 +REMARK 620 2 ASP A 128 OD2 93.2 +REMARK 620 3 ASP A 139 OD1 172.6 93.6 +REMARK 620 4 HIS A 144 NE2 90.1 83.9 87.4 +REMARK 620 N 1 2 3 +REMARK 620 +REMARK 620 COORDINATION ANGLES FOR: M RES CSSEQI METAL +REMARK 620 CA A 302 CA +REMARK 620 N RES CSSEQI ATOM +REMARK 620 1 ASP A 128 OD1 +REMARK 620 2 ASP A 128 OD2 48.8 +REMARK 620 3 TYR A 130 O 77.9 107.3 +REMARK 620 4 ASN A 136 OD1 165.2 145.8 95.1 +REMARK 620 5 ASP A 139 OD2 105.6 70.8 84.4 86.4 +REMARK 620 N 1 2 3 4 +REMARK 620 +REMARK 620 COORDINATION ANGLES FOR: M RES CSSEQI METAL +REMARK 620 MN B 301 MN +REMARK 620 N RES CSSEQI ATOM +REMARK 620 1 GLU B 126 OE2 +REMARK 620 2 ASP B 128 OD2 91.4 +REMARK 620 3 ASP B 139 OD1 177.0 90.5 +REMARK 620 4 HIS B 144 NE2 94.1 82.6 88.5 +REMARK 620 N 1 2 3 +REMARK 620 +REMARK 620 COORDINATION ANGLES FOR: M RES CSSEQI METAL +REMARK 620 CA B 302 CA +REMARK 620 N RES CSSEQI ATOM +REMARK 620 1 ASP B 128 OD2 +REMARK 620 2 ASP B 128 OD1 49.4 +REMARK 620 3 TYR B 130 O 110.5 81.0 +REMARK 620 4 ASN B 136 OD1 142.7 166.2 95.9 +REMARK 620 5 ASP B 139 OD2 71.9 108.2 85.8 84.9 +REMARK 620 N 1 2 3 4 +REMARK 900 +REMARK 900 RELATED ENTRIES +REMARK 900 RELATED ID: 1QNW RELATED DB: PDB +REMARK 900 LECTIN II FROM ULEX EUROPAEUS +REMARK 900 RELATED ID: 1QOO RELATED DB: PDB +REMARK 900 LECTIN UEA-II COMPLEXED WITH NAG +REMARK 900 RELATED ID: 1QOT RELATED DB: PDB +REMARK 900 LECTIN UEA-II COMPLEXED WITH FUCOSYLLACTOSE AND +REMARK 900 FUCOSYLGALACTOSELECTIN +DBREF 1QOS A 1 242 GB AF190633 AF190633 1 242 +DBREF 1QOS B 1 242 GB AF190633 AF190633 1 242 +SEQADV 1QOS ASP A 25 GB AF190633 ALA 25 CONFLICT +SEQADV 1QOS ILE A 62 GB AF190633 THR 62 CONFLICT +SEQADV 1QOS GLY A 106 GB AF190633 SER 106 CONFLICT +SEQADV 1QOS SER A 112 GB AF190633 ASN 112 CONFLICT +SEQADV 1QOS GLY A 191 GB AF190633 GLU 191 CONFLICT +SEQADV 1QOS VAL A 229 GB AF190633 ILE 229 CONFLICT +SEQADV 1QOS ASP B 25 GB AF190633 ALA 25 CONFLICT +SEQADV 1QOS ILE B 62 GB AF190633 THR 62 CONFLICT +SEQADV 1QOS GLY B 106 GB AF190633 SER 106 CONFLICT +SEQADV 1QOS SER B 112 GB AF190633 ASN 112 CONFLICT +SEQADV 1QOS GLY B 191 GB AF190633 GLU 191 CONFLICT +SEQADV 1QOS VAL B 229 GB AF190633 ILE 229 CONFLICT +SEQRES 1 A 242 ASN LEU SER ASP ASP LEU SER PHE ASN PHE ASP LYS PHE +SEQRES 2 A 242 VAL PRO ASN GLN LYS ASN ILE ILE PHE GLN GLY ASP ALA +SEQRES 3 A 242 SER VAL SER THR THR GLY VAL LEU GLN VAL THR LYS VAL +SEQRES 4 A 242 SER LYS PRO THR THR THR SER ILE GLY ARG ALA LEU TYR +SEQRES 5 A 242 ALA ALA PRO ILE GLN ILE TRP ASP SER ILE THR GLY LYS +SEQRES 6 A 242 VAL ALA SER PHE ALA THR SER PHE SER PHE VAL VAL LYS +SEQRES 7 A 242 ALA ASP LYS SER ASP GLY VAL ASP GLY LEU ALA PHE PHE +SEQRES 8 A 242 LEU ALA PRO ALA ASN SER GLN ILE PRO SER GLY SER SER +SEQRES 9 A 242 ALA GLY MET PHE GLY LEU PHE SER SER SER ASP SER LYS +SEQRES 10 A 242 SER SER ASN GLN ILE ILE ALA VAL GLU PHE ASP THR TYR +SEQRES 11 A 242 PHE GLY LYS ALA TYR ASN PRO TRP ASP PRO ASP PHE LYS +SEQRES 12 A 242 HIS ILE GLY ILE ASP VAL ASN SER ILE LYS SER ILE LYS +SEQRES 13 A 242 THR VAL LYS TRP ASP TRP ARG ASN GLY GLU VAL ALA ASP +SEQRES 14 A 242 VAL VAL ILE THR TYR ARG ALA PRO THR LYS SER LEU THR +SEQRES 15 A 242 VAL CYS LEU SER TYR PRO SER ASP GLY THR SER ASN ILE +SEQRES 16 A 242 ILE THR ALA SER VAL ASP LEU LYS ALA ILE LEU PRO GLU +SEQRES 17 A 242 TRP VAL SER VAL GLY PHE SER GLY GLY VAL GLY ASN ALA +SEQRES 18 A 242 ALA GLU PHE GLU THR HIS ASP VAL LEU SER TRP TYR PHE +SEQRES 19 A 242 THR SER ASN LEU GLU ALA ASN ASN +SEQRES 1 B 242 ASN LEU SER ASP ASP LEU SER PHE ASN PHE ASP LYS PHE +SEQRES 2 B 242 VAL PRO ASN GLN LYS ASN ILE ILE PHE GLN GLY ASP ALA +SEQRES 3 B 242 SER VAL SER THR THR GLY VAL LEU GLN VAL THR LYS VAL +SEQRES 4 B 242 SER LYS PRO THR THR THR SER ILE GLY ARG ALA LEU TYR +SEQRES 5 B 242 ALA ALA PRO ILE GLN ILE TRP ASP SER ILE THR GLY LYS +SEQRES 6 B 242 VAL ALA SER PHE ALA THR SER PHE SER PHE VAL VAL LYS +SEQRES 7 B 242 ALA ASP LYS SER ASP GLY VAL ASP GLY LEU ALA PHE PHE +SEQRES 8 B 242 LEU ALA PRO ALA ASN SER GLN ILE PRO SER GLY SER SER +SEQRES 9 B 242 ALA GLY MET PHE GLY LEU PHE SER SER SER ASP SER LYS +SEQRES 10 B 242 SER SER ASN GLN ILE ILE ALA VAL GLU PHE ASP THR TYR +SEQRES 11 B 242 PHE GLY LYS ALA TYR ASN PRO TRP ASP PRO ASP PHE LYS +SEQRES 12 B 242 HIS ILE GLY ILE ASP VAL ASN SER ILE LYS SER ILE LYS +SEQRES 13 B 242 THR VAL LYS TRP ASP TRP ARG ASN GLY GLU VAL ALA ASP +SEQRES 14 B 242 VAL VAL ILE THR TYR ARG ALA PRO THR LYS SER LEU THR +SEQRES 15 B 242 VAL CYS LEU SER TYR PRO SER ASP GLY THR SER ASN ILE +SEQRES 16 B 242 ILE THR ALA SER VAL ASP LEU LYS ALA ILE LEU PRO GLU +SEQRES 17 B 242 TRP VAL SER VAL GLY PHE SER GLY GLY VAL GLY ASN ALA +SEQRES 18 B 242 ALA GLU PHE GLU THR HIS ASP VAL LEU SER TRP TYR PHE +SEQRES 19 B 242 THR SER ASN LEU GLU ALA ASN ASN +MODRES 1QOS SER A 112 SER GLYCOSYLATION SITE +HET NAG C 1 15 +HET NAG C 2 14 +HET NAG D 1 15 +HET NAG D 2 14 +HET MN A 301 1 +HET CA A 302 1 +HET NAG A 401 14 +HET MN B 301 1 +HET CA B 302 1 +HETNAM NAG 2-ACETAMIDO-2-DEOXY-BETA-D-GLUCOPYRANOSE +HETNAM MN MANGANESE (II) ION +HETNAM CA CALCIUM ION +FORMUL 3 NAG 5(C8 H15 N O6) +FORMUL 5 MN 2(MN 2+) +FORMUL 6 CA 2(CA 2+) +HELIX 1 1 SER A 104 PHE A 108 5 5 +HELIX 2 2 ALA A 176 THR A 178 5 3 +HELIX 3 3 ASP A 201 ILE A 205 5 5 +HELIX 4 4 ASN A 220 PHE A 224 5 5 +HELIX 5 5 SER B 104 PHE B 108 5 5 +HELIX 6 6 ALA B 176 THR B 178 5 3 +HELIX 7 7 ASP B 201 ILE B 205 5 5 +HELIX 8 8 ASN B 220 PHE B 224 5 5 +SHEET 1 A 6 LEU A 6 PHE A 10 0 +SHEET 2 A 6 ASP A 228 ASN A 237 -1 N SER A 236 O LEU A 6 +SHEET 3 A 6 SER A 68 VAL A 76 -1 N VAL A 76 O ASP A 228 +SHEET 4 A 6 VAL A 167 ARG A 175 -1 N TYR A 174 O PHE A 69 +SHEET 5 A 6 SER A 180 TYR A 187 -1 N SER A 186 O ASP A 169 +SHEET 6 A 6 SER A 193 SER A 199 -1 N ALA A 198 O LEU A 181 +SHEET 1 B 7 ILE A 20 GLY A 24 0 +SHEET 2 B 7 SER A 46 TYR A 52 -1 N LEU A 51 O ILE A 21 +SHEET 3 B 7 VAL A 210 VAL A 218 -1 N VAL A 218 O SER A 46 +SHEET 4 B 7 GLY A 87 PRO A 94 -1 N ALA A 93 O SER A 211 +SHEET 5 B 7 ILE A 123 ASP A 128 -1 N PHE A 127 O LEU A 88 +SHEET 6 B 7 HIS A 144 VAL A 149 -1 N ASP A 148 O ALA A 124 +SHEET 7 B 7 LYS A 156 LYS A 159 -1 N VAL A 158 O ILE A 145 +SHEET 1 C 6 LEU B 6 PHE B 10 0 +SHEET 2 C 6 ASP B 228 ASN B 237 -1 N SER B 236 O LEU B 6 +SHEET 3 C 6 SER B 68 VAL B 76 -1 N VAL B 76 O ASP B 228 +SHEET 4 C 6 VAL B 167 ARG B 175 -1 N TYR B 174 O PHE B 69 +SHEET 5 C 6 SER B 180 TYR B 187 -1 N SER B 186 O ASP B 169 +SHEET 6 C 6 SER B 193 SER B 199 -1 N ALA B 198 O LEU B 181 +SHEET 1 D 7 ILE B 20 GLY B 24 0 +SHEET 2 D 7 SER B 46 TYR B 52 -1 N LEU B 51 O ILE B 21 +SHEET 3 D 7 VAL B 210 VAL B 218 -1 N VAL B 218 O SER B 46 +SHEET 4 D 7 GLY B 87 PRO B 94 -1 N ALA B 93 O SER B 211 +SHEET 5 D 7 ILE B 123 ASP B 128 -1 N PHE B 127 O LEU B 88 +SHEET 6 D 7 HIS B 144 VAL B 149 -1 N ASP B 148 O ALA B 124 +SHEET 7 D 7 LYS B 156 LYS B 159 -1 N VAL B 158 O ILE B 145 +SSBOND 1 CYS A 184 CYS B 184 1555 1555 2.03 +LINK OG SER A 112 C1 NAG A 401 1555 1555 1.47 +LINK O4 NAG C 1 C1 NAG C 2 1555 1555 1.35 +LINK O4 NAG D 1 C1 NAG D 2 1555 1555 1.37 +LINK OE2 GLU A 126 MN MN A 301 1555 1555 1.93 +LINK OD2 ASP A 128 MN MN A 301 1555 1555 2.12 +LINK OD1 ASP A 128 CA CA A 302 1555 1555 2.09 +LINK OD2 ASP A 128 CA CA A 302 1555 1555 2.93 +LINK O TYR A 130 CA CA A 302 1555 1555 2.37 +LINK OD1 ASN A 136 CA CA A 302 1555 1555 2.24 +LINK OD1 ASP A 139 MN MN A 301 1555 1555 1.93 +LINK OD2 ASP A 139 CA CA A 302 1555 1555 2.31 +LINK NE2 HIS A 144 MN MN A 301 1555 1555 2.20 +LINK OE2 GLU B 126 MN MN B 301 1555 1555 1.88 +LINK OD2 ASP B 128 MN MN B 301 1555 1555 2.21 +LINK OD2 ASP B 128 CA CA B 302 1555 1555 2.90 +LINK OD1 ASP B 128 CA CA B 302 1555 1555 2.00 +LINK O TYR B 130 CA CA B 302 1555 1555 2.26 +LINK OD1 ASN B 136 CA CA B 302 1555 1555 2.33 +LINK OD1 ASP B 139 MN MN B 301 1555 1555 1.99 +LINK OD2 ASP B 139 CA CA B 302 1555 1555 2.31 +LINK NE2 HIS B 144 MN MN B 301 1555 1555 2.13 +CISPEP 1 LYS A 41 PRO A 42 0 -0.51 +CISPEP 2 VAL A 85 ASP A 86 0 0.34 +CISPEP 3 LYS B 41 PRO B 42 0 -0.34 +CISPEP 4 VAL B 85 ASP B 86 0 -0.26 +CRYST1 106.030 106.030 87.020 90.00 90.00 120.00 P 31 2 1 12 +ORIGX1 1.000000 0.000000 0.000000 0.00000 +ORIGX2 0.000000 1.000000 0.000000 0.00000 +ORIGX3 0.000000 0.000000 1.000000 0.00000 +SCALE1 0.009431 0.005445 0.000000 0.00000 +SCALE2 0.000000 0.010890 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.011492 0.00000 +ATOM 1 N SER A 3 -16.435 94.977 30.342 1.00 84.94 N +ATOM 2 CA SER A 3 -17.175 94.424 29.170 1.00 85.50 C +ATOM 3 C SER A 3 -16.366 94.512 27.857 1.00 85.44 C +ATOM 4 O SER A 3 -15.236 95.016 27.840 1.00 85.31 O +ATOM 5 CB SER A 3 -18.530 95.132 29.028 1.00 84.43 C +ATOM 6 N ASP A 4 -16.957 94.008 26.771 1.00 84.11 N +ATOM 7 CA ASP A 4 -16.341 93.991 25.437 1.00 79.71 C +ATOM 8 C ASP A 4 -16.424 95.338 24.732 1.00 74.36 C +ATOM 9 O ASP A 4 -17.185 96.217 25.134 1.00 74.12 O +ATOM 10 CB ASP A 4 -17.019 92.933 24.558 1.00 83.81 C +ATOM 11 CG ASP A 4 -17.018 91.546 25.193 1.00 87.73 C +ATOM 12 OD1 ASP A 4 -17.980 91.220 25.929 1.00 90.79 O +ATOM 13 OD2 ASP A 4 -16.057 90.780 24.957 1.00 88.99 O +ATOM 14 N ASP A 5 -15.671 95.472 23.645 1.00 68.27 N +ATOM 15 CA ASP A 5 -15.659 96.708 22.876 1.00 63.65 C +ATOM 16 C ASP A 5 -17.034 97.107 22.345 1.00 59.20 C +ATOM 17 O ASP A 5 -17.496 98.220 22.599 1.00 57.56 O +ATOM 18 CB ASP A 5 -14.627 96.629 21.748 1.00 65.55 C +ATOM 19 CG ASP A 5 -13.204 96.793 22.258 1.00 68.62 C +ATOM 20 OD1 ASP A 5 -12.696 95.859 22.919 1.00 69.88 O +ATOM 21 OD2 ASP A 5 -12.605 97.871 22.031 1.00 70.38 O +ATOM 22 N LEU A 6 -17.689 96.202 21.620 1.00 55.53 N +ATOM 23 CA LEU A 6 -19.022 96.472 21.076 1.00 49.36 C +ATOM 24 C LEU A 6 -19.967 95.309 21.283 1.00 46.46 C +ATOM 25 O LEU A 6 -19.567 94.151 21.270 1.00 46.13 O +ATOM 26 CB LEU A 6 -18.975 96.792 19.585 1.00 48.41 C +ATOM 27 CG LEU A 6 -20.339 97.199 19.019 1.00 46.68 C +ATOM 28 CD1 LEU A 6 -20.764 98.526 19.616 1.00 46.27 C +ATOM 29 CD2 LEU A 6 -20.292 97.298 17.509 1.00 48.23 C +ATOM 30 N SER A 7 -21.243 95.631 21.405 1.00 44.60 N +ATOM 31 CA SER A 7 -22.262 94.625 21.619 1.00 42.44 C +ATOM 32 C SER A 7 -23.633 95.241 21.345 1.00 40.15 C +ATOM 33 O SER A 7 -23.972 96.286 21.902 1.00 40.19 O +ATOM 34 CB SER A 7 -22.164 94.121 23.062 1.00 41.64 C +ATOM 35 OG SER A 7 -23.162 93.167 23.346 1.00 45.84 O +ATOM 36 N PHE A 8 -24.384 94.647 20.421 1.00 38.17 N +ATOM 37 CA PHE A 8 -25.721 95.144 20.116 1.00 37.02 C +ATOM 38 C PHE A 8 -26.701 94.055 19.741 1.00 37.87 C +ATOM 39 O PHE A 8 -26.363 93.104 19.040 1.00 37.75 O +ATOM 40 CB PHE A 8 -25.710 96.254 19.057 1.00 34.03 C +ATOM 41 CG PHE A 8 -25.256 95.814 17.693 1.00 33.51 C +ATOM 42 CD1 PHE A 8 -26.082 95.050 16.872 1.00 32.22 C +ATOM 43 CD2 PHE A 8 -24.014 96.200 17.204 1.00 32.40 C +ATOM 44 CE1 PHE A 8 -25.672 94.686 15.591 1.00 29.06 C +ATOM 45 CE2 PHE A 8 -23.604 95.837 15.922 1.00 28.87 C +ATOM 46 CZ PHE A 8 -24.428 95.083 15.121 1.00 27.29 C +ATOM 47 N ASN A 9 -27.920 94.208 20.234 1.00 40.43 N +ATOM 48 CA ASN A 9 -28.980 93.255 19.983 1.00 40.71 C +ATOM 49 C ASN A 9 -30.207 93.916 19.362 1.00 41.17 C +ATOM 50 O ASN A 9 -30.597 95.016 19.748 1.00 42.64 O +ATOM 51 CB ASN A 9 -29.365 92.566 21.282 1.00 39.85 C +ATOM 52 CG ASN A 9 -30.360 91.466 21.071 1.00 42.55 C +ATOM 53 OD1 ASN A 9 -30.051 90.444 20.456 1.00 45.14 O +ATOM 54 ND2 ASN A 9 -31.575 91.667 21.563 1.00 43.45 N +ATOM 55 N PHE A 10 -30.784 93.246 18.372 1.00 41.73 N +ATOM 56 CA PHE A 10 -31.981 93.718 17.686 1.00 41.47 C +ATOM 57 C PHE A 10 -32.976 92.559 17.701 1.00 41.62 C +ATOM 58 O PHE A 10 -32.825 91.607 16.942 1.00 40.03 O +ATOM 59 CB PHE A 10 -31.659 94.102 16.236 1.00 40.83 C +ATOM 60 CG PHE A 10 -30.818 95.345 16.093 1.00 42.34 C +ATOM 61 CD1 PHE A 10 -31.016 96.439 16.923 1.00 46.34 C +ATOM 62 CD2 PHE A 10 -29.847 95.435 15.100 1.00 42.27 C +ATOM 63 CE1 PHE A 10 -30.261 97.615 16.762 1.00 46.79 C +ATOM 64 CE2 PHE A 10 -29.087 96.602 14.931 1.00 42.19 C +ATOM 65 CZ PHE A 10 -29.295 97.691 15.761 1.00 43.32 C +ATOM 66 N ASP A 11 -33.952 92.614 18.604 1.00 43.97 N +ATOM 67 CA ASP A 11 -34.965 91.558 18.717 1.00 47.04 C +ATOM 68 C ASP A 11 -35.855 91.578 17.504 1.00 46.29 C +ATOM 69 O ASP A 11 -36.330 90.549 17.045 1.00 46.00 O +ATOM 70 CB ASP A 11 -35.824 91.767 19.960 1.00 52.02 C +ATOM 71 CG ASP A 11 -35.029 91.637 21.247 1.00 59.12 C +ATOM 72 OD1 ASP A 11 -34.505 90.525 21.503 1.00 60.60 O +ATOM 73 OD2 ASP A 11 -34.922 92.643 21.994 1.00 62.25 O +ATOM 74 N LYS A 12 -36.095 92.789 17.023 1.00 47.74 N +ATOM 75 CA LYS A 12 -36.909 93.071 15.848 1.00 48.62 C +ATOM 76 C LYS A 12 -36.369 94.371 15.268 1.00 46.66 C +ATOM 77 O LYS A 12 -35.648 95.109 15.943 1.00 46.33 O +ATOM 78 CB LYS A 12 -38.400 93.237 16.223 1.00 52.69 C +ATOM 79 CG LYS A 12 -38.695 94.023 17.536 1.00 61.76 C +ATOM 80 CD LYS A 12 -38.566 95.565 17.424 1.00 68.68 C +ATOM 81 CE LYS A 12 -38.507 96.287 18.806 1.00 71.02 C +ATOM 82 NZ LYS A 12 -37.183 96.154 19.532 1.00 72.03 N +ATOM 83 N PHE A 13 -36.678 94.631 14.008 1.00 45.66 N +ATOM 84 CA PHE A 13 -36.236 95.859 13.376 1.00 45.59 C +ATOM 85 C PHE A 13 -37.450 96.768 13.272 1.00 47.36 C +ATOM 86 O PHE A 13 -38.587 96.299 13.364 1.00 47.34 O +ATOM 87 CB PHE A 13 -35.684 95.564 11.990 1.00 43.43 C +ATOM 88 CG PHE A 13 -34.522 94.616 11.988 1.00 43.79 C +ATOM 89 CD1 PHE A 13 -33.221 95.091 12.125 1.00 45.00 C +ATOM 90 CD2 PHE A 13 -34.720 93.253 11.819 1.00 43.02 C +ATOM 91 CE1 PHE A 13 -32.134 94.222 12.089 1.00 43.29 C +ATOM 92 CE2 PHE A 13 -33.643 92.374 11.781 1.00 42.61 C +ATOM 93 CZ PHE A 13 -32.349 92.858 11.915 1.00 43.85 C +ATOM 94 N VAL A 14 -37.216 98.073 13.162 1.00 48.76 N +ATOM 95 CA VAL A 14 -38.310 99.032 13.018 1.00 50.95 C +ATOM 96 C VAL A 14 -38.162 99.675 11.640 1.00 54.25 C +ATOM 97 O VAL A 14 -37.057 99.702 11.094 1.00 54.43 O +ATOM 98 CB VAL A 14 -38.276 100.124 14.113 1.00 49.94 C +ATOM 99 CG1 VAL A 14 -38.227 99.496 15.493 1.00 51.43 C +ATOM 100 CG2 VAL A 14 -37.103 101.054 13.910 1.00 52.83 C +ATOM 101 N PRO A 15 -39.275 100.128 11.020 1.00 57.30 N +ATOM 102 CA PRO A 15 -39.180 100.770 9.705 1.00 59.32 C +ATOM 103 C PRO A 15 -38.342 102.050 9.765 1.00 61.96 C +ATOM 104 O PRO A 15 -38.546 102.900 10.643 1.00 61.49 O +ATOM 105 CB PRO A 15 -40.643 101.034 9.343 1.00 58.63 C +ATOM 106 CG PRO A 15 -41.317 101.149 10.662 1.00 59.39 C +ATOM 107 CD PRO A 15 -40.681 100.035 11.446 1.00 58.68 C +ATOM 108 N ASN A 16 -37.373 102.146 8.850 1.00 65.01 N +ATOM 109 CA ASN A 16 -36.445 103.281 8.761 1.00 68.06 C +ATOM 110 C ASN A 16 -35.680 103.441 10.075 1.00 66.31 C +ATOM 111 O ASN A 16 -35.781 104.462 10.760 1.00 68.90 O +ATOM 112 CB ASN A 16 -37.184 104.578 8.413 1.00 74.32 C +ATOM 113 CG ASN A 16 -37.976 104.469 7.121 1.00 80.53 C +ATOM 114 OD1 ASN A 16 -39.211 104.507 7.134 1.00 84.23 O +ATOM 115 ND2 ASN A 16 -37.270 104.315 5.999 1.00 81.74 N +ATOM 116 N GLN A 17 -34.953 102.390 10.435 1.00 61.06 N +ATOM 117 CA GLN A 17 -34.162 102.355 11.651 1.00 55.28 C +ATOM 118 C GLN A 17 -32.988 103.293 11.428 1.00 53.14 C +ATOM 119 O GLN A 17 -32.354 103.233 10.383 1.00 54.43 O +ATOM 120 CB GLN A 17 -33.681 100.929 11.865 1.00 52.83 C +ATOM 121 CG GLN A 17 -33.358 100.573 13.283 1.00 51.11 C +ATOM 122 CD GLN A 17 -33.548 99.102 13.537 1.00 51.27 C +ATOM 123 OE1 GLN A 17 -33.793 98.679 14.662 1.00 56.02 O +ATOM 124 NE2 GLN A 17 -33.475 98.312 12.484 1.00 50.67 N +ATOM 125 N LYS A 18 -32.718 104.172 12.388 1.00 49.65 N +ATOM 126 CA LYS A 18 -31.632 105.132 12.252 1.00 47.15 C +ATOM 127 C LYS A 18 -30.214 104.609 12.406 1.00 45.04 C +ATOM 128 O LYS A 18 -29.276 105.262 11.957 1.00 43.97 O +ATOM 129 CB LYS A 18 -31.827 106.306 13.199 1.00 50.13 C +ATOM 130 CG LYS A 18 -32.236 107.588 12.525 1.00 52.65 C +ATOM 131 CD LYS A 18 -33.655 107.500 12.000 1.00 57.62 C +ATOM 132 CE LYS A 18 -34.137 108.853 11.472 1.00 60.30 C +ATOM 133 NZ LYS A 18 -34.081 109.922 12.519 1.00 61.02 N +ATOM 134 N ASN A 19 -30.037 103.468 13.065 1.00 42.65 N +ATOM 135 CA ASN A 19 -28.689 102.929 13.241 1.00 39.67 C +ATOM 136 C ASN A 19 -28.348 101.832 12.252 1.00 37.26 C +ATOM 137 O ASN A 19 -27.465 101.007 12.481 1.00 38.69 O +ATOM 138 CB ASN A 19 -28.434 102.474 14.683 1.00 38.85 C +ATOM 139 CG ASN A 19 -29.462 101.497 15.181 1.00 36.75 C +ATOM 140 OD1 ASN A 19 -30.253 100.945 14.408 1.00 36.38 O +ATOM 141 ND2 ASN A 19 -29.467 101.282 16.489 1.00 35.89 N +ATOM 142 N ILE A 20 -29.065 101.818 11.144 1.00 35.03 N +ATOM 143 CA ILE A 20 -28.801 100.849 10.107 1.00 33.38 C +ATOM 144 C ILE A 20 -28.755 101.600 8.796 1.00 33.71 C +ATOM 145 O ILE A 20 -29.577 102.485 8.537 1.00 32.72 O +ATOM 146 CB ILE A 20 -29.865 99.754 10.058 1.00 32.64 C +ATOM 147 CG1 ILE A 20 -29.649 98.796 11.220 1.00 30.75 C +ATOM 148 CG2 ILE A 20 -29.798 98.999 8.731 1.00 32.40 C +ATOM 149 CD1 ILE A 20 -30.559 97.617 11.169 1.00 33.09 C +ATOM 150 N ILE A 21 -27.750 101.285 7.994 1.00 35.49 N +ATOM 151 CA ILE A 21 -27.589 101.932 6.704 1.00 37.41 C +ATOM 152 C ILE A 21 -28.178 101.044 5.626 1.00 37.07 C +ATOM 153 O ILE A 21 -27.763 99.898 5.466 1.00 36.90 O +ATOM 154 CB ILE A 21 -26.105 102.213 6.415 1.00 38.04 C +ATOM 155 CG1 ILE A 21 -25.548 103.180 7.466 1.00 40.11 C +ATOM 156 CG2 ILE A 21 -25.935 102.799 5.027 1.00 37.58 C +ATOM 157 CD1 ILE A 21 -24.038 103.408 7.355 1.00 43.02 C +ATOM 158 N PHE A 22 -29.183 101.564 4.931 1.00 37.56 N +ATOM 159 CA PHE A 22 -29.841 100.812 3.870 1.00 38.68 C +ATOM 160 C PHE A 22 -29.278 101.174 2.518 1.00 39.75 C +ATOM 161 O PHE A 22 -29.204 102.347 2.167 1.00 39.48 O +ATOM 162 CB PHE A 22 -31.347 101.064 3.876 1.00 37.18 C +ATOM 163 CG PHE A 22 -32.021 100.641 5.141 1.00 36.58 C +ATOM 164 CD1 PHE A 22 -32.431 99.321 5.319 1.00 36.86 C +ATOM 165 CD2 PHE A 22 -32.226 101.555 6.172 1.00 37.06 C +ATOM 166 CE1 PHE A 22 -33.034 98.913 6.512 1.00 37.77 C +ATOM 167 CE2 PHE A 22 -32.829 101.164 7.372 1.00 38.04 C +ATOM 168 CZ PHE A 22 -33.233 99.839 7.542 1.00 39.10 C +ATOM 169 N GLN A 23 -28.863 100.151 1.777 1.00 43.06 N +ATOM 170 CA GLN A 23 -28.302 100.310 0.436 1.00 45.23 C +ATOM 171 C GLN A 23 -29.074 99.387 -0.503 1.00 46.85 C +ATOM 172 O GLN A 23 -29.311 98.220 -0.175 1.00 48.60 O +ATOM 173 CB GLN A 23 -26.820 99.910 0.408 1.00 44.51 C +ATOM 174 CG GLN A 23 -25.930 100.638 1.389 1.00 44.36 C +ATOM 175 CD GLN A 23 -24.489 100.163 1.324 1.00 45.79 C +ATOM 176 OE1 GLN A 23 -24.213 98.966 1.183 1.00 46.19 O +ATOM 177 NE2 GLN A 23 -23.559 101.102 1.429 1.00 45.23 N +ATOM 178 N GLY A 24 -29.444 99.897 -1.673 1.00 47.83 N +ATOM 179 CA GLY A 24 -30.180 99.083 -2.623 1.00 49.27 C +ATOM 180 C GLY A 24 -31.637 98.975 -2.238 1.00 50.94 C +ATOM 181 O GLY A 24 -32.201 99.924 -1.690 1.00 51.42 O +ATOM 182 N ASP A 25 -32.236 97.812 -2.494 1.00 52.07 N +ATOM 183 CA ASP A 25 -33.647 97.569 -2.186 1.00 53.30 C +ATOM 184 C ASP A 25 -33.922 97.162 -0.739 1.00 52.81 C +ATOM 185 O ASP A 25 -35.070 96.907 -0.358 1.00 52.73 O +ATOM 186 CB ASP A 25 -34.208 96.514 -3.137 1.00 56.39 C +ATOM 187 CG ASP A 25 -34.204 96.974 -4.580 1.00 60.62 C +ATOM 188 OD1 ASP A 25 -35.149 97.684 -4.972 1.00 64.94 O +ATOM 189 OD2 ASP A 25 -33.259 96.636 -5.324 1.00 63.35 O +ATOM 190 N ALA A 26 -32.864 97.104 0.064 1.00 52.44 N +ATOM 191 CA ALA A 26 -32.973 96.731 1.464 1.00 50.84 C +ATOM 192 C ALA A 26 -33.925 97.663 2.200 1.00 51.47 C +ATOM 193 O ALA A 26 -33.872 98.884 2.043 1.00 52.67 O +ATOM 194 CB ALA A 26 -31.612 96.756 2.108 1.00 50.71 C +ATOM 195 N SER A 27 -34.802 97.071 2.998 1.00 51.53 N +ATOM 196 CA SER A 27 -35.785 97.828 3.760 1.00 50.92 C +ATOM 197 C SER A 27 -36.352 96.969 4.881 1.00 50.32 C +ATOM 198 O SER A 27 -36.078 95.767 4.958 1.00 48.82 O +ATOM 199 CB SER A 27 -36.921 98.260 2.840 1.00 51.26 C +ATOM 200 OG SER A 27 -37.435 97.134 2.152 1.00 52.35 O +ATOM 201 N VAL A 28 -37.166 97.586 5.731 1.00 49.73 N +ATOM 202 CA VAL A 28 -37.779 96.878 6.842 1.00 50.34 C +ATOM 203 C VAL A 28 -39.298 97.071 6.839 1.00 50.63 C +ATOM 204 O VAL A 28 -39.794 98.187 6.945 1.00 52.26 O +ATOM 205 CB VAL A 28 -37.123 97.284 8.195 1.00 48.33 C +ATOM 206 CG1 VAL A 28 -36.834 98.751 8.209 1.00 51.18 C +ATOM 207 CG2 VAL A 28 -38.005 96.912 9.361 1.00 47.63 C +ATOM 208 N SER A 29 -40.022 95.969 6.671 1.00 51.32 N +ATOM 209 CA SER A 29 -41.479 95.987 6.628 1.00 53.07 C +ATOM 210 C SER A 29 -42.087 96.398 7.964 1.00 54.95 C +ATOM 211 O SER A 29 -41.416 96.355 8.997 1.00 54.28 O +ATOM 212 CB SER A 29 -42.014 94.617 6.205 1.00 52.72 C +ATOM 213 OG SER A 29 -41.820 93.655 7.219 1.00 47.35 O +ATOM 214 N THR A 30 -43.364 96.788 7.933 1.00 57.37 N +ATOM 215 CA THR A 30 -44.082 97.222 9.136 1.00 58.75 C +ATOM 216 C THR A 30 -44.338 96.122 10.170 1.00 58.78 C +ATOM 217 O THR A 30 -44.855 96.390 11.259 1.00 58.59 O +ATOM 218 CB THR A 30 -45.416 97.919 8.790 1.00 59.32 C +ATOM 219 OG1 THR A 30 -46.138 97.135 7.830 1.00 56.49 O +ATOM 220 CG2 THR A 30 -45.152 99.326 8.248 1.00 59.62 C +ATOM 221 N THR A 31 -44.005 94.885 9.813 1.00 58.03 N +ATOM 222 CA THR A 31 -44.153 93.751 10.722 1.00 56.56 C +ATOM 223 C THR A 31 -42.852 93.608 11.528 1.00 54.06 C +ATOM 224 O THR A 31 -42.741 92.752 12.406 1.00 53.05 O +ATOM 225 CB THR A 31 -44.444 92.444 9.959 1.00 57.66 C +ATOM 226 OG1 THR A 31 -43.500 92.301 8.894 1.00 63.23 O +ATOM 227 CG2 THR A 31 -45.861 92.448 9.386 1.00 57.61 C +ATOM 228 N GLY A 32 -41.871 94.450 11.197 1.00 51.69 N +ATOM 229 CA GLY A 32 -40.594 94.458 11.890 1.00 47.72 C +ATOM 230 C GLY A 32 -39.476 93.581 11.354 1.00 45.26 C +ATOM 231 O GLY A 32 -38.506 93.330 12.069 1.00 44.79 O +ATOM 232 N VAL A 33 -39.590 93.122 10.111 1.00 42.62 N +ATOM 233 CA VAL A 33 -38.559 92.267 9.519 1.00 41.56 C +ATOM 234 C VAL A 33 -37.717 92.964 8.450 1.00 39.26 C +ATOM 235 O VAL A 33 -38.233 93.696 7.615 1.00 39.55 O +ATOM 236 CB VAL A 33 -39.156 90.919 8.974 1.00 42.05 C +ATOM 237 CG1 VAL A 33 -40.499 91.143 8.332 1.00 44.70 C +ATOM 238 CG2 VAL A 33 -38.218 90.275 7.963 1.00 43.15 C +ATOM 239 N LEU A 34 -36.408 92.746 8.505 1.00 38.18 N +ATOM 240 CA LEU A 34 -35.488 93.338 7.554 1.00 36.81 C +ATOM 241 C LEU A 34 -35.447 92.506 6.278 1.00 38.66 C +ATOM 242 O LEU A 34 -34.921 91.391 6.264 1.00 38.03 O +ATOM 243 CB LEU A 34 -34.098 93.421 8.161 1.00 34.53 C +ATOM 244 CG LEU A 34 -32.995 93.790 7.175 1.00 36.51 C +ATOM 245 CD1 LEU A 34 -33.199 95.198 6.679 1.00 39.81 C +ATOM 246 CD2 LEU A 34 -31.653 93.661 7.844 1.00 38.75 C +ATOM 247 N GLN A 35 -36.030 93.045 5.215 1.00 40.43 N +ATOM 248 CA GLN A 35 -36.054 92.364 3.931 1.00 40.98 C +ATOM 249 C GLN A 35 -34.910 92.924 3.109 1.00 41.02 C +ATOM 250 O GLN A 35 -35.037 93.998 2.517 1.00 39.99 O +ATOM 251 CB GLN A 35 -37.380 92.635 3.230 1.00 42.48 C +ATOM 252 CG GLN A 35 -38.592 92.490 4.135 1.00 44.37 C +ATOM 253 CD GLN A 35 -39.906 92.764 3.420 1.00 46.23 C +ATOM 254 OE1 GLN A 35 -40.948 92.221 3.788 1.00 47.24 O +ATOM 255 NE2 GLN A 35 -39.861 93.607 2.394 1.00 46.10 N +ATOM 256 N VAL A 36 -33.783 92.217 3.095 1.00 43.16 N +ATOM 257 CA VAL A 36 -32.621 92.689 2.343 1.00 47.55 C +ATOM 258 C VAL A 36 -32.926 92.666 0.857 1.00 49.30 C +ATOM 259 O VAL A 36 -32.329 93.394 0.075 1.00 49.90 O +ATOM 260 CB VAL A 36 -31.336 91.863 2.643 1.00 46.07 C +ATOM 261 CG1 VAL A 36 -31.136 91.719 4.134 1.00 45.79 C +ATOM 262 CG2 VAL A 36 -31.407 90.519 1.995 1.00 48.91 C +ATOM 263 N THR A 37 -33.901 91.844 0.496 1.00 53.65 N +ATOM 264 CA THR A 37 -34.344 91.690 -0.878 1.00 56.21 C +ATOM 265 C THR A 37 -35.765 92.229 -1.011 1.00 61.16 C +ATOM 266 O THR A 37 -36.605 92.006 -0.133 1.00 63.88 O +ATOM 267 CB THR A 37 -34.250 90.206 -1.290 1.00 54.17 C +ATOM 268 OG1 THR A 37 -33.138 90.052 -2.170 1.00 51.80 O +ATOM 269 CG2 THR A 37 -35.540 89.680 -1.944 1.00 51.40 C +ATOM 270 N LYS A 38 -36.018 92.957 -2.099 1.00 64.87 N +ATOM 271 CA LYS A 38 -37.330 93.543 -2.356 1.00 68.32 C +ATOM 272 C LYS A 38 -38.446 92.501 -2.459 1.00 69.66 C +ATOM 273 O LYS A 38 -38.360 91.541 -3.234 1.00 69.77 O +ATOM 274 CB LYS A 38 -37.297 94.389 -3.629 1.00 69.16 C +ATOM 275 CG LYS A 38 -38.556 95.210 -3.842 1.00 72.21 C +ATOM 276 CD LYS A 38 -38.445 96.112 -5.065 1.00 75.79 C +ATOM 277 CE LYS A 38 -39.564 97.159 -5.105 1.00 77.44 C +ATOM 278 NZ LYS A 38 -39.550 98.071 -3.916 1.00 78.05 N +ATOM 279 N VAL A 39 -39.487 92.695 -1.658 1.00 70.03 N +ATOM 280 CA VAL A 39 -40.623 91.791 -1.646 1.00 71.24 C +ATOM 281 C VAL A 39 -41.818 92.540 -2.233 1.00 73.29 C +ATOM 282 O VAL A 39 -42.468 93.317 -1.537 1.00 72.17 O +ATOM 283 CB VAL A 39 -40.937 91.319 -0.203 1.00 70.35 C +ATOM 284 CG1 VAL A 39 -41.994 90.247 -0.217 1.00 70.14 C +ATOM 285 CG2 VAL A 39 -39.681 90.795 0.471 1.00 70.08 C +ATOM 286 N SER A 40 -42.083 92.336 -3.522 1.00 77.13 N +ATOM 287 CA SER A 40 -43.201 93.011 -4.183 1.00 80.90 C +ATOM 288 C SER A 40 -43.977 92.208 -5.218 1.00 83.83 C +ATOM 289 O SER A 40 -43.517 91.174 -5.703 1.00 85.72 O +ATOM 290 CB SER A 40 -42.736 94.315 -4.816 1.00 80.32 C +ATOM 291 OG SER A 40 -42.466 95.266 -3.807 1.00 83.54 O +ATOM 292 N LYS A 41 -45.176 92.699 -5.528 1.00 86.06 N +ATOM 293 CA LYS A 41 -46.059 92.082 -6.509 1.00 86.30 C +ATOM 294 C LYS A 41 -46.349 93.122 -7.599 1.00 86.77 C +ATOM 295 O LYS A 41 -46.880 94.200 -7.316 1.00 86.07 O +ATOM 296 CB LYS A 41 -47.361 91.609 -5.849 1.00 84.64 C +ATOM 297 N PRO A 42 -45.927 92.839 -8.846 1.00 87.56 N +ATOM 298 CA PRO A 42 -45.205 91.615 -9.220 1.00 86.66 C +ATOM 299 C PRO A 42 -43.748 91.590 -8.748 1.00 85.14 C +ATOM 300 O PRO A 42 -43.180 92.615 -8.359 1.00 84.50 O +ATOM 301 CB PRO A 42 -45.309 91.610 -10.745 1.00 86.94 C +ATOM 302 CG PRO A 42 -45.278 93.066 -11.076 1.00 87.80 C +ATOM 303 CD PRO A 42 -46.209 93.665 -10.036 1.00 87.12 C +ATOM 304 N THR A 43 -43.170 90.396 -8.761 1.00 83.98 N +ATOM 305 CA THR A 43 -41.794 90.180 -8.337 1.00 82.83 C +ATOM 306 C THR A 43 -40.801 90.843 -9.306 1.00 83.05 C +ATOM 307 O THR A 43 -40.917 90.688 -10.526 1.00 83.28 O +ATOM 308 CB THR A 43 -41.512 88.660 -8.204 1.00 81.84 C +ATOM 309 OG1 THR A 43 -41.606 88.028 -9.487 1.00 81.71 O +ATOM 310 CG2 THR A 43 -42.537 88.015 -7.278 1.00 79.34 C +ATOM 311 N THR A 44 -39.836 91.586 -8.758 1.00 82.40 N +ATOM 312 CA THR A 44 -38.831 92.292 -9.566 1.00 80.76 C +ATOM 313 C THR A 44 -37.366 91.934 -9.231 1.00 79.76 C +ATOM 314 O THR A 44 -37.069 91.547 -8.100 1.00 80.43 O +ATOM 315 CB THR A 44 -39.032 93.838 -9.457 1.00 79.94 C +ATOM 316 OG1 THR A 44 -38.049 94.515 -10.250 1.00 80.63 O +ATOM 317 CG2 THR A 44 -38.926 94.306 -8.013 1.00 76.67 C +ATOM 318 N THR A 45 -36.470 92.053 -10.226 1.00 77.95 N +ATOM 319 CA THR A 45 -35.026 91.773 -10.070 1.00 73.63 C +ATOM 320 C THR A 45 -34.513 92.729 -8.969 1.00 70.08 C +ATOM 321 O THR A 45 -34.863 93.914 -8.960 1.00 68.87 O +ATOM 322 CB THR A 45 -34.268 91.937 -11.456 1.00 75.60 C +ATOM 323 OG1 THR A 45 -33.056 91.174 -11.453 1.00 76.40 O +ATOM 324 CG2 THR A 45 -33.937 93.403 -11.775 1.00 76.49 C +ATOM 325 N SER A 46 -33.714 92.224 -8.027 1.00 66.38 N +ATOM 326 CA SER A 46 -33.279 93.065 -6.904 1.00 61.84 C +ATOM 327 C SER A 46 -31.937 92.759 -6.228 1.00 58.62 C +ATOM 328 O SER A 46 -31.438 91.635 -6.281 1.00 58.09 O +ATOM 329 CB SER A 46 -34.393 93.041 -5.838 1.00 60.58 C +ATOM 330 OG SER A 46 -34.018 93.686 -4.638 1.00 58.72 O +ATOM 331 N ILE A 47 -31.383 93.785 -5.576 1.00 55.34 N +ATOM 332 CA ILE A 47 -30.120 93.713 -4.817 1.00 52.09 C +ATOM 333 C ILE A 47 -30.182 94.679 -3.625 1.00 50.03 C +ATOM 334 O ILE A 47 -30.566 95.846 -3.771 1.00 50.17 O +ATOM 335 CB ILE A 47 -28.879 94.091 -5.667 1.00 51.11 C +ATOM 336 CG1 ILE A 47 -28.666 93.070 -6.786 1.00 54.39 C +ATOM 337 CG2 ILE A 47 -27.636 94.138 -4.790 1.00 45.70 C +ATOM 338 CD1 ILE A 47 -27.555 93.433 -7.763 1.00 55.85 C +ATOM 339 N GLY A 48 -29.789 94.199 -2.449 1.00 46.73 N +ATOM 340 CA GLY A 48 -29.820 95.047 -1.270 1.00 42.72 C +ATOM 341 C GLY A 48 -28.811 94.667 -0.209 1.00 39.51 C +ATOM 342 O GLY A 48 -28.339 93.529 -0.170 1.00 38.06 O +ATOM 343 N ARG A 49 -28.446 95.643 0.619 1.00 38.16 N +ATOM 344 CA ARG A 49 -27.492 95.439 1.716 1.00 38.77 C +ATOM 345 C ARG A 49 -27.868 96.333 2.900 1.00 37.90 C +ATOM 346 O ARG A 49 -28.309 97.466 2.714 1.00 36.96 O +ATOM 347 CB ARG A 49 -26.050 95.771 1.290 1.00 38.94 C +ATOM 348 CG ARG A 49 -25.613 95.218 -0.059 1.00 38.40 C +ATOM 349 CD ARG A 49 -24.102 95.210 -0.205 1.00 37.25 C +ATOM 350 NE ARG A 49 -23.484 96.495 0.102 1.00 35.69 N +ATOM 351 CZ ARG A 49 -22.175 96.726 0.052 1.00 37.35 C +ATOM 352 NH1 ARG A 49 -21.328 95.762 -0.306 1.00 37.63 N +ATOM 353 NH2 ARG A 49 -21.704 97.912 0.403 1.00 35.57 N +ATOM 354 N ALA A 50 -27.721 95.810 4.114 1.00 36.15 N +ATOM 355 CA ALA A 50 -28.025 96.576 5.316 1.00 34.35 C +ATOM 356 C ALA A 50 -26.817 96.464 6.243 1.00 34.81 C +ATOM 357 O ALA A 50 -26.325 95.363 6.489 1.00 34.69 O +ATOM 358 CB ALA A 50 -29.269 96.039 5.981 1.00 29.60 C +ATOM 359 N LEU A 51 -26.306 97.603 6.708 1.00 34.57 N +ATOM 360 CA LEU A 51 -25.139 97.610 7.587 1.00 34.51 C +ATOM 361 C LEU A 51 -25.388 98.393 8.853 1.00 34.26 C +ATOM 362 O LEU A 51 -26.165 99.349 8.864 1.00 35.39 O +ATOM 363 CB LEU A 51 -23.945 98.257 6.896 1.00 33.89 C +ATOM 364 CG LEU A 51 -23.956 98.383 5.379 1.00 36.68 C +ATOM 365 CD1 LEU A 51 -22.820 99.286 4.939 1.00 39.44 C +ATOM 366 CD2 LEU A 51 -23.830 97.027 4.748 1.00 39.64 C +ATOM 367 N TYR A 52 -24.708 97.994 9.920 1.00 32.96 N +ATOM 368 CA TYR A 52 -24.826 98.703 11.181 1.00 33.39 C +ATOM 369 C TYR A 52 -24.118 100.038 10.930 1.00 33.34 C +ATOM 370 O TYR A 52 -23.014 100.065 10.375 1.00 35.82 O +ATOM 371 CB TYR A 52 -24.147 97.904 12.301 1.00 33.61 C +ATOM 372 CG TYR A 52 -24.131 98.605 13.639 1.00 32.23 C +ATOM 373 CD1 TYR A 52 -25.310 98.878 14.319 1.00 32.23 C +ATOM 374 CD2 TYR A 52 -22.938 99.044 14.196 1.00 33.66 C +ATOM 375 CE1 TYR A 52 -25.302 99.579 15.510 1.00 33.25 C +ATOM 376 CE2 TYR A 52 -22.919 99.745 15.390 1.00 34.45 C +ATOM 377 CZ TYR A 52 -24.103 100.014 16.038 1.00 33.83 C +ATOM 378 OH TYR A 52 -24.092 100.764 17.186 1.00 34.99 O +ATOM 379 N ALA A 53 -24.770 101.131 11.311 1.00 32.79 N +ATOM 380 CA ALA A 53 -24.255 102.483 11.100 1.00 35.51 C +ATOM 381 C ALA A 53 -22.823 102.805 11.534 1.00 39.66 C +ATOM 382 O ALA A 53 -22.099 103.489 10.808 1.00 44.50 O +ATOM 383 CB ALA A 53 -25.210 103.503 11.676 1.00 35.33 C +ATOM 384 N ALA A 54 -22.413 102.354 12.715 1.00 40.61 N +ATOM 385 CA ALA A 54 -21.054 102.625 13.185 1.00 40.24 C +ATOM 386 C ALA A 54 -20.046 101.589 12.675 1.00 41.61 C +ATOM 387 O ALA A 54 -20.355 100.396 12.585 1.00 43.66 O +ATOM 388 CB ALA A 54 -21.027 102.680 14.712 1.00 39.50 C +ATOM 389 N PRO A 55 -18.848 102.039 12.267 1.00 41.97 N +ATOM 390 CA PRO A 55 -17.810 101.100 11.823 1.00 41.46 C +ATOM 391 C PRO A 55 -17.256 100.368 13.041 1.00 40.78 C +ATOM 392 O PRO A 55 -17.420 100.826 14.169 1.00 41.05 O +ATOM 393 CB PRO A 55 -16.746 102.021 11.235 1.00 40.50 C +ATOM 394 CG PRO A 55 -17.533 103.215 10.799 1.00 42.20 C +ATOM 395 CD PRO A 55 -18.452 103.422 11.960 1.00 41.29 C +ATOM 396 N ILE A 56 -16.616 99.230 12.818 1.00 39.66 N +ATOM 397 CA ILE A 56 -16.037 98.467 13.911 1.00 39.77 C +ATOM 398 C ILE A 56 -14.529 98.371 13.712 1.00 40.69 C +ATOM 399 O ILE A 56 -14.063 98.178 12.588 1.00 40.92 O +ATOM 400 CB ILE A 56 -16.604 97.005 13.974 1.00 40.87 C +ATOM 401 CG1 ILE A 56 -18.042 96.976 14.489 1.00 41.12 C +ATOM 402 CG2 ILE A 56 -15.764 96.146 14.901 1.00 42.18 C +ATOM 403 CD1 ILE A 56 -19.082 97.176 13.439 1.00 46.55 C +ATOM 404 N GLN A 57 -13.764 98.547 14.786 1.00 41.27 N +ATOM 405 CA GLN A 57 -12.320 98.396 14.685 1.00 41.95 C +ATOM 406 C GLN A 57 -12.095 96.897 14.800 1.00 39.88 C +ATOM 407 O GLN A 57 -12.229 96.331 15.881 1.00 41.45 O +ATOM 408 CB GLN A 57 -11.600 99.123 15.816 1.00 45.82 C +ATOM 409 CG GLN A 57 -10.126 98.759 15.913 1.00 53.29 C +ATOM 410 CD GLN A 57 -9.259 99.887 16.442 1.00 57.79 C +ATOM 411 OE1 GLN A 57 -8.173 100.137 15.913 1.00 60.46 O +ATOM 412 NE2 GLN A 57 -9.728 100.572 17.492 1.00 60.28 N +ATOM 413 N ILE A 58 -11.795 96.250 13.683 1.00 37.26 N +ATOM 414 CA ILE A 58 -11.599 94.814 13.697 1.00 38.78 C +ATOM 415 C ILE A 58 -10.195 94.335 14.114 1.00 41.46 C +ATOM 416 O ILE A 58 -10.027 93.187 14.547 1.00 41.20 O +ATOM 417 CB ILE A 58 -12.062 94.204 12.369 1.00 38.14 C +ATOM 418 CG1 ILE A 58 -12.632 92.814 12.612 1.00 39.53 C +ATOM 419 CG2 ILE A 58 -10.952 94.183 11.355 1.00 38.23 C +ATOM 420 CD1 ILE A 58 -13.934 92.833 13.386 1.00 38.55 C +ATOM 421 N TRP A 59 -9.197 95.208 13.967 1.00 43.07 N +ATOM 422 CA TRP A 59 -7.812 94.924 14.370 1.00 45.80 C +ATOM 423 C TRP A 59 -7.074 96.249 14.566 1.00 48.66 C +ATOM 424 O TRP A 59 -7.488 97.277 14.024 1.00 48.66 O +ATOM 425 CB TRP A 59 -7.079 93.985 13.392 1.00 47.69 C +ATOM 426 CG TRP A 59 -6.818 94.523 12.003 1.00 51.98 C +ATOM 427 CD1 TRP A 59 -7.693 94.545 10.961 1.00 54.22 C +ATOM 428 CD2 TRP A 59 -5.598 95.104 11.519 1.00 54.52 C +ATOM 429 NE1 TRP A 59 -7.104 95.110 9.853 1.00 56.54 N +ATOM 430 CE2 TRP A 59 -5.821 95.468 10.163 1.00 56.63 C +ATOM 431 CE3 TRP A 59 -4.346 95.365 12.084 1.00 55.86 C +ATOM 432 CZ2 TRP A 59 -4.831 96.073 9.372 1.00 56.55 C +ATOM 433 CZ3 TRP A 59 -3.362 95.967 11.297 1.00 57.19 C +ATOM 434 CH2 TRP A 59 -3.616 96.316 9.954 1.00 56.93 C +ATOM 435 N ASP A 60 -6.004 96.233 15.359 1.00 52.24 N +ATOM 436 CA ASP A 60 -5.252 97.456 15.666 1.00 57.33 C +ATOM 437 C ASP A 60 -3.830 97.439 15.107 1.00 59.11 C +ATOM 438 O ASP A 60 -3.013 96.615 15.521 1.00 59.51 O +ATOM 439 CB ASP A 60 -5.205 97.646 17.196 1.00 60.24 C +ATOM 440 CG ASP A 60 -4.808 99.063 17.622 1.00 63.41 C +ATOM 441 OD1 ASP A 60 -4.603 99.937 16.744 1.00 66.19 O +ATOM 442 OD2 ASP A 60 -4.718 99.303 18.853 1.00 63.93 O +ATOM 443 N SER A 61 -3.526 98.372 14.199 1.00 60.39 N +ATOM 444 CA SER A 61 -2.188 98.458 13.599 1.00 61.42 C +ATOM 445 C SER A 61 -1.132 98.802 14.650 1.00 62.14 C +ATOM 446 O SER A 61 -0.005 98.313 14.591 1.00 61.78 O +ATOM 447 CB SER A 61 -2.161 99.490 12.458 1.00 61.32 C +ATOM 448 OG SER A 61 -2.480 100.794 12.920 1.00 61.07 O +ATOM 449 N ILE A 62 -1.531 99.611 15.630 1.00 62.92 N +ATOM 450 CA ILE A 62 -0.657 100.032 16.716 1.00 63.11 C +ATOM 451 C ILE A 62 -0.206 98.859 17.598 1.00 62.65 C +ATOM 452 O ILE A 62 0.973 98.764 17.929 1.00 62.98 O +ATOM 453 CB ILE A 62 -1.361 101.096 17.603 1.00 64.39 C +ATOM 454 CG1 ILE A 62 -1.755 102.309 16.752 1.00 65.03 C +ATOM 455 CG2 ILE A 62 -0.457 101.526 18.749 1.00 63.87 C +ATOM 456 CD1 ILE A 62 -2.628 103.328 17.475 1.00 66.71 C +ATOM 457 N THR A 63 -1.126 97.949 17.928 1.00 61.70 N +ATOM 458 CA THR A 63 -0.820 96.806 18.805 1.00 60.88 C +ATOM 459 C THR A 63 -0.764 95.408 18.183 1.00 60.00 C +ATOM 460 O THR A 63 -0.359 94.454 18.852 1.00 58.34 O +ATOM 461 CB THR A 63 -1.814 96.732 19.986 1.00 61.02 C +ATOM 462 OG1 THR A 63 -3.148 96.565 19.481 1.00 63.43 O +ATOM 463 CG2 THR A 63 -1.751 98.003 20.829 1.00 60.84 C +ATOM 464 N GLY A 64 -1.214 95.273 16.939 1.00 60.51 N +ATOM 465 CA GLY A 64 -1.206 93.973 16.281 1.00 59.51 C +ATOM 466 C GLY A 64 -2.323 93.024 16.706 1.00 60.22 C +ATOM 467 O GLY A 64 -2.464 91.952 16.114 1.00 60.11 O +ATOM 468 N LYS A 65 -3.102 93.407 17.727 1.00 59.67 N +ATOM 469 CA LYS A 65 -4.226 92.609 18.252 1.00 56.20 C +ATOM 470 C LYS A 65 -5.371 92.474 17.249 1.00 52.55 C +ATOM 471 O LYS A 65 -5.742 93.436 16.576 1.00 52.20 O +ATOM 472 CB LYS A 65 -4.803 93.266 19.513 1.00 60.16 C +ATOM 473 CG LYS A 65 -3.873 93.347 20.719 1.00 64.62 C +ATOM 474 CD LYS A 65 -4.356 94.417 21.731 1.00 67.46 C +ATOM 475 CE LYS A 65 -5.705 94.085 22.381 1.00 67.32 C +ATOM 476 NZ LYS A 65 -6.134 95.133 23.359 1.00 65.50 N +ATOM 477 N VAL A 66 -5.947 91.284 17.174 1.00 48.52 N +ATOM 478 CA VAL A 66 -7.070 91.049 16.277 1.00 47.68 C +ATOM 479 C VAL A 66 -8.307 90.783 17.128 1.00 44.97 C +ATOM 480 O VAL A 66 -8.234 90.089 18.142 1.00 46.36 O +ATOM 481 CB VAL A 66 -6.812 89.850 15.339 1.00 49.15 C +ATOM 482 CG1 VAL A 66 -8.000 89.638 14.402 1.00 48.72 C +ATOM 483 CG2 VAL A 66 -5.559 90.098 14.522 1.00 50.06 C +ATOM 484 N ALA A 67 -9.437 91.351 16.722 1.00 40.89 N +ATOM 485 CA ALA A 67 -10.677 91.181 17.464 1.00 38.40 C +ATOM 486 C ALA A 67 -11.335 89.829 17.245 1.00 36.73 C +ATOM 487 O ALA A 67 -11.167 89.213 16.202 1.00 37.85 O +ATOM 488 CB ALA A 67 -11.649 92.289 17.102 1.00 37.62 C +ATOM 489 N SER A 68 -12.024 89.336 18.267 1.00 35.68 N +ATOM 490 CA SER A 68 -12.756 88.078 18.157 1.00 34.08 C +ATOM 491 C SER A 68 -14.200 88.522 18.207 1.00 34.21 C +ATOM 492 O SER A 68 -14.572 89.345 19.048 1.00 34.85 O +ATOM 493 CB SER A 68 -12.482 87.142 19.336 1.00 29.06 C +ATOM 494 OG SER A 68 -11.152 86.679 19.328 1.00 30.82 O +ATOM 495 N PHE A 69 -15.007 88.048 17.272 1.00 33.36 N +ATOM 496 CA PHE A 69 -16.401 88.440 17.290 1.00 33.72 C +ATOM 497 C PHE A 69 -17.317 87.233 17.251 1.00 32.87 C +ATOM 498 O PHE A 69 -16.870 86.097 17.093 1.00 31.31 O +ATOM 499 CB PHE A 69 -16.730 89.423 16.152 1.00 34.28 C +ATOM 500 CG PHE A 69 -16.673 88.817 14.783 1.00 33.82 C +ATOM 501 CD1 PHE A 69 -17.790 88.196 14.238 1.00 34.26 C +ATOM 502 CD2 PHE A 69 -15.500 88.851 14.047 1.00 33.00 C +ATOM 503 CE1 PHE A 69 -17.741 87.615 12.979 1.00 34.50 C +ATOM 504 CE2 PHE A 69 -15.437 88.278 12.792 1.00 35.17 C +ATOM 505 CZ PHE A 69 -16.564 87.654 12.254 1.00 36.09 C +ATOM 506 N ALA A 70 -18.600 87.502 17.446 1.00 33.14 N +ATOM 507 CA ALA A 70 -19.635 86.483 17.432 1.00 31.65 C +ATOM 508 C ALA A 70 -20.916 87.185 17.040 1.00 30.72 C +ATOM 509 O ALA A 70 -21.187 88.305 17.487 1.00 31.63 O +ATOM 510 CB ALA A 70 -19.788 85.848 18.804 1.00 26.20 C +ATOM 511 N THR A 71 -21.661 86.558 16.141 1.00 29.41 N +ATOM 512 CA THR A 71 -22.917 87.119 15.704 1.00 28.49 C +ATOM 513 C THR A 71 -23.941 86.019 15.622 1.00 29.54 C +ATOM 514 O THR A 71 -23.624 84.865 15.306 1.00 29.28 O +ATOM 515 CB THR A 71 -22.820 87.833 14.345 1.00 25.95 C +ATOM 516 OG1 THR A 71 -24.047 88.529 14.097 1.00 26.86 O +ATOM 517 CG2 THR A 71 -22.589 86.838 13.221 1.00 23.35 C +ATOM 518 N SER A 72 -25.167 86.377 15.970 1.00 31.78 N +ATOM 519 CA SER A 72 -26.259 85.436 15.932 1.00 32.66 C +ATOM 520 C SER A 72 -27.411 86.116 15.249 1.00 32.50 C +ATOM 521 O SER A 72 -27.637 87.310 15.444 1.00 34.68 O +ATOM 522 CB SER A 72 -26.664 85.045 17.344 1.00 32.53 C +ATOM 523 OG SER A 72 -27.707 84.093 17.294 1.00 38.51 O +ATOM 524 N PHE A 73 -28.106 85.376 14.403 1.00 32.40 N +ATOM 525 CA PHE A 73 -29.251 85.929 13.713 1.00 33.97 C +ATOM 526 C PHE A 73 -30.142 84.826 13.211 1.00 33.13 C +ATOM 527 O PHE A 73 -29.741 83.666 13.173 1.00 32.11 O +ATOM 528 CB PHE A 73 -28.833 86.883 12.574 1.00 36.58 C +ATOM 529 CG PHE A 73 -27.951 86.258 11.526 1.00 37.69 C +ATOM 530 CD1 PHE A 73 -28.505 85.579 10.437 1.00 39.36 C +ATOM 531 CD2 PHE A 73 -26.568 86.362 11.612 1.00 38.64 C +ATOM 532 CE1 PHE A 73 -27.692 85.005 9.446 1.00 38.25 C +ATOM 533 CE2 PHE A 73 -25.742 85.792 10.625 1.00 39.78 C +ATOM 534 CZ PHE A 73 -26.309 85.113 9.540 1.00 38.18 C +ATOM 535 N SER A 74 -31.373 85.198 12.875 1.00 35.07 N +ATOM 536 CA SER A 74 -32.373 84.266 12.366 1.00 34.62 C +ATOM 537 C SER A 74 -32.931 84.809 11.062 1.00 32.90 C +ATOM 538 O SER A 74 -33.261 85.992 10.963 1.00 31.21 O +ATOM 539 CB SER A 74 -33.505 84.104 13.380 1.00 33.73 C +ATOM 540 OG SER A 74 -32.989 83.726 14.644 1.00 37.14 O +ATOM 541 N PHE A 75 -33.017 83.954 10.053 1.00 32.39 N +ATOM 542 CA PHE A 75 -33.541 84.401 8.775 1.00 32.87 C +ATOM 543 C PHE A 75 -34.473 83.393 8.155 1.00 32.30 C +ATOM 544 O PHE A 75 -34.571 82.251 8.602 1.00 30.53 O +ATOM 545 CB PHE A 75 -32.412 84.743 7.799 1.00 32.74 C +ATOM 546 CG PHE A 75 -31.631 83.549 7.313 1.00 32.95 C +ATOM 547 CD1 PHE A 75 -30.555 83.052 8.045 1.00 32.28 C +ATOM 548 CD2 PHE A 75 -31.949 82.944 6.101 1.00 33.64 C +ATOM 549 CE1 PHE A 75 -29.806 81.975 7.567 1.00 33.51 C +ATOM 550 CE2 PHE A 75 -31.205 81.862 5.615 1.00 34.93 C +ATOM 551 CZ PHE A 75 -30.133 81.377 6.350 1.00 33.21 C +ATOM 552 N VAL A 76 -35.161 83.847 7.117 1.00 34.86 N +ATOM 553 CA VAL A 76 -36.114 83.036 6.380 1.00 35.93 C +ATOM 554 C VAL A 76 -35.933 83.298 4.906 1.00 37.58 C +ATOM 555 O VAL A 76 -35.733 84.445 4.497 1.00 36.87 O +ATOM 556 CB VAL A 76 -37.559 83.451 6.679 1.00 33.80 C +ATOM 557 CG1 VAL A 76 -38.520 82.539 5.949 1.00 32.41 C +ATOM 558 CG2 VAL A 76 -37.823 83.443 8.162 1.00 35.69 C +ATOM 559 N VAL A 77 -35.998 82.230 4.116 1.00 41.14 N +ATOM 560 CA VAL A 77 -35.908 82.334 2.663 1.00 44.35 C +ATOM 561 C VAL A 77 -37.094 81.554 2.119 1.00 46.33 C +ATOM 562 O VAL A 77 -37.114 80.325 2.188 1.00 46.57 O +ATOM 563 CB VAL A 77 -34.581 81.768 2.102 1.00 44.04 C +ATOM 564 CG1 VAL A 77 -34.675 81.592 0.600 1.00 43.13 C +ATOM 565 CG2 VAL A 77 -33.435 82.714 2.423 1.00 43.03 C +ATOM 566 N LYS A 78 -38.107 82.285 1.657 1.00 48.34 N +ATOM 567 CA LYS A 78 -39.323 81.680 1.130 1.00 51.33 C +ATOM 568 C LYS A 78 -39.459 81.838 -0.377 1.00 53.11 C +ATOM 569 O LYS A 78 -39.462 82.954 -0.896 1.00 53.07 O +ATOM 570 CB LYS A 78 -40.557 82.261 1.829 1.00 50.73 C +ATOM 571 CG LYS A 78 -41.867 81.663 1.354 1.00 51.96 C +ATOM 572 CD LYS A 78 -43.035 82.183 2.158 1.00 54.62 C +ATOM 573 CE LYS A 78 -44.345 81.533 1.717 1.00 59.94 C +ATOM 574 NZ LYS A 78 -45.522 81.934 2.563 1.00 60.11 N +ATOM 575 N ALA A 79 -39.578 80.705 -1.066 1.00 54.75 N +ATOM 576 CA ALA A 79 -39.729 80.679 -2.513 1.00 56.99 C +ATOM 577 C ALA A 79 -41.162 80.307 -2.864 1.00 60.09 C +ATOM 578 O ALA A 79 -41.773 79.475 -2.184 1.00 60.49 O +ATOM 579 CB ALA A 79 -38.767 79.675 -3.124 1.00 53.70 C +ATOM 580 N ASP A 80 -41.707 80.957 -3.894 1.00 63.29 N +ATOM 581 CA ASP A 80 -43.067 80.676 -4.349 1.00 64.77 C +ATOM 582 C ASP A 80 -43.050 79.278 -4.960 1.00 66.13 C +ATOM 583 O ASP A 80 -43.909 78.446 -4.664 1.00 64.61 O +ATOM 584 CB ASP A 80 -43.504 81.705 -5.388 1.00 66.46 C +ATOM 585 CG ASP A 80 -43.506 83.115 -4.843 1.00 68.96 C +ATOM 586 OD1 ASP A 80 -43.915 83.304 -3.677 1.00 70.50 O +ATOM 587 OD2 ASP A 80 -43.099 84.036 -5.583 1.00 70.11 O +ATOM 588 N LYS A 81 -42.052 79.033 -5.805 1.00 67.62 N +ATOM 589 CA LYS A 81 -41.862 77.733 -6.440 1.00 68.91 C +ATOM 590 C LYS A 81 -41.126 76.839 -5.446 1.00 68.72 C +ATOM 591 O LYS A 81 -41.108 77.107 -4.239 1.00 69.34 O +ATOM 592 CB LYS A 81 -41.019 77.852 -7.725 1.00 71.41 C +ATOM 593 CG LYS A 81 -41.798 78.079 -9.018 1.00 72.56 C +ATOM 594 CD LYS A 81 -42.441 79.448 -9.052 1.00 77.30 C +ATOM 595 CE LYS A 81 -43.062 79.735 -10.410 1.00 79.50 C +ATOM 596 NZ LYS A 81 -43.819 81.027 -10.430 1.00 80.59 N +ATOM 597 N SER A 82 -40.514 75.776 -5.963 1.00 67.98 N +ATOM 598 CA SER A 82 -39.764 74.840 -5.135 1.00 66.36 C +ATOM 599 C SER A 82 -38.320 75.292 -5.038 1.00 66.12 C +ATOM 600 O SER A 82 -37.621 74.947 -4.091 1.00 66.65 O +ATOM 601 CB SER A 82 -39.825 73.434 -5.726 1.00 65.12 C +ATOM 602 OG SER A 82 -39.270 73.407 -7.028 1.00 63.56 O +ATOM 603 N ASP A 83 -37.881 76.059 -6.032 1.00 66.39 N +ATOM 604 CA ASP A 83 -36.519 76.575 -6.080 1.00 65.58 C +ATOM 605 C ASP A 83 -36.535 78.101 -6.046 1.00 63.91 C +ATOM 606 O ASP A 83 -37.562 78.728 -6.327 1.00 64.82 O +ATOM 607 CB ASP A 83 -35.812 76.077 -7.343 1.00 68.26 C +ATOM 608 CG ASP A 83 -34.472 75.442 -7.042 1.00 71.88 C +ATOM 609 OD1 ASP A 83 -34.462 74.253 -6.647 1.00 72.41 O +ATOM 610 OD2 ASP A 83 -33.434 76.133 -7.189 1.00 74.20 O +ATOM 611 N GLY A 84 -35.398 78.697 -5.695 1.00 61.29 N +ATOM 612 CA GLY A 84 -35.318 80.146 -5.627 1.00 57.20 C +ATOM 613 C GLY A 84 -33.927 80.709 -5.827 1.00 54.90 C +ATOM 614 O GLY A 84 -32.950 79.965 -5.870 1.00 56.05 O +ATOM 615 N VAL A 85 -33.845 82.030 -5.955 1.00 52.89 N +ATOM 616 CA VAL A 85 -32.576 82.736 -6.162 1.00 51.36 C +ATOM 617 C VAL A 85 -32.563 84.072 -5.402 1.00 50.91 C +ATOM 618 O VAL A 85 -33.619 84.635 -5.136 1.00 52.68 O +ATOM 619 CB VAL A 85 -32.325 83.013 -7.676 1.00 51.22 C +ATOM 620 CG1 VAL A 85 -32.338 81.707 -8.471 1.00 49.96 C +ATOM 621 CG2 VAL A 85 -33.344 84.004 -8.228 1.00 50.00 C +ATOM 622 N ASP A 86 -31.389 84.604 -5.068 1.00 50.77 N +ATOM 623 CA ASP A 86 -30.087 84.012 -5.378 1.00 50.56 C +ATOM 624 C ASP A 86 -29.328 83.590 -4.140 1.00 49.30 C +ATOM 625 O ASP A 86 -28.400 82.772 -4.219 1.00 47.75 O +ATOM 626 CB ASP A 86 -29.206 85.018 -6.118 1.00 52.43 C +ATOM 627 CG ASP A 86 -29.305 84.890 -7.609 1.00 54.93 C +ATOM 628 OD1 ASP A 86 -28.720 83.932 -8.160 1.00 55.68 O +ATOM 629 OD2 ASP A 86 -29.960 85.753 -8.226 1.00 56.45 O +ATOM 630 N GLY A 87 -29.667 84.223 -3.020 1.00 47.50 N +ATOM 631 CA GLY A 87 -29.000 83.927 -1.772 1.00 45.64 C +ATOM 632 C GLY A 87 -28.875 85.111 -0.836 1.00 44.34 C +ATOM 633 O GLY A 87 -29.168 86.261 -1.183 1.00 42.65 O +ATOM 634 N LEU A 88 -28.386 84.807 0.358 1.00 43.56 N +ATOM 635 CA LEU A 88 -28.206 85.786 1.420 1.00 40.96 C +ATOM 636 C LEU A 88 -26.752 85.746 1.874 1.00 38.54 C +ATOM 637 O LEU A 88 -26.087 84.723 1.724 1.00 38.18 O +ATOM 638 CB LEU A 88 -29.098 85.382 2.589 1.00 42.88 C +ATOM 639 CG LEU A 88 -29.103 86.307 3.792 1.00 43.72 C +ATOM 640 CD1 LEU A 88 -29.831 87.574 3.399 1.00 45.15 C +ATOM 641 CD2 LEU A 88 -29.780 85.630 4.959 1.00 42.97 C +ATOM 642 N ALA A 89 -26.268 86.832 2.466 1.00 36.64 N +ATOM 643 CA ALA A 89 -24.884 86.865 2.935 1.00 35.22 C +ATOM 644 C ALA A 89 -24.635 87.789 4.108 1.00 34.46 C +ATOM 645 O ALA A 89 -25.192 88.884 4.197 1.00 32.89 O +ATOM 646 CB ALA A 89 -23.947 87.239 1.794 1.00 31.54 C +ATOM 647 N PHE A 90 -23.840 87.306 5.051 1.00 35.48 N +ATOM 648 CA PHE A 90 -23.450 88.131 6.184 1.00 34.98 C +ATOM 649 C PHE A 90 -22.032 88.530 5.823 1.00 33.37 C +ATOM 650 O PHE A 90 -21.235 87.682 5.421 1.00 32.26 O +ATOM 651 CB PHE A 90 -23.444 87.351 7.483 1.00 35.74 C +ATOM 652 CG PHE A 90 -22.783 88.087 8.594 1.00 36.08 C +ATOM 653 CD1 PHE A 90 -23.426 89.150 9.219 1.00 34.35 C +ATOM 654 CD2 PHE A 90 -21.488 87.755 8.982 1.00 36.03 C +ATOM 655 CE1 PHE A 90 -22.783 89.878 10.211 1.00 35.31 C +ATOM 656 CE2 PHE A 90 -20.836 88.475 9.971 1.00 33.75 C +ATOM 657 CZ PHE A 90 -21.483 89.538 10.589 1.00 34.86 C +ATOM 658 N PHE A 91 -21.688 89.795 6.009 1.00 32.89 N +ATOM 659 CA PHE A 91 -20.357 90.216 5.601 1.00 34.40 C +ATOM 660 C PHE A 91 -19.671 91.336 6.379 1.00 35.55 C +ATOM 661 O PHE A 91 -20.313 92.156 7.060 1.00 33.69 O +ATOM 662 CB PHE A 91 -20.413 90.647 4.131 1.00 33.59 C +ATOM 663 CG PHE A 91 -21.132 91.948 3.920 1.00 32.76 C +ATOM 664 CD1 PHE A 91 -22.513 91.984 3.831 1.00 32.84 C +ATOM 665 CD2 PHE A 91 -20.427 93.151 3.875 1.00 33.72 C +ATOM 666 CE1 PHE A 91 -23.181 93.202 3.709 1.00 35.25 C +ATOM 667 CE2 PHE A 91 -21.086 94.367 3.753 1.00 32.54 C +ATOM 668 CZ PHE A 91 -22.460 94.392 3.671 1.00 33.82 C +ATOM 669 N LEU A 92 -18.351 91.378 6.195 1.00 36.16 N +ATOM 670 CA LEU A 92 -17.487 92.402 6.764 1.00 35.44 C +ATOM 671 C LEU A 92 -16.810 93.032 5.568 1.00 36.14 C +ATOM 672 O LEU A 92 -16.201 92.339 4.748 1.00 35.00 O +ATOM 673 CB LEU A 92 -16.421 91.811 7.663 1.00 34.00 C +ATOM 674 CG LEU A 92 -16.948 91.268 8.974 1.00 36.22 C +ATOM 675 CD1 LEU A 92 -17.264 89.788 8.826 1.00 37.33 C +ATOM 676 CD2 LEU A 92 -15.899 91.490 10.040 1.00 37.82 C +ATOM 677 N ALA A 93 -16.952 94.346 5.458 1.00 37.10 N +ATOM 678 CA ALA A 93 -16.368 95.098 4.362 1.00 35.61 C +ATOM 679 C ALA A 93 -15.742 96.363 4.924 1.00 35.65 C +ATOM 680 O ALA A 93 -15.947 96.703 6.088 1.00 35.31 O +ATOM 681 CB ALA A 93 -17.448 95.445 3.353 1.00 36.29 C +ATOM 682 N PRO A 94 -14.939 97.064 4.118 1.00 37.21 N +ATOM 683 CA PRO A 94 -14.325 98.295 4.602 1.00 38.99 C +ATOM 684 C PRO A 94 -15.403 99.247 5.079 1.00 39.96 C +ATOM 685 O PRO A 94 -16.515 99.225 4.560 1.00 40.23 O +ATOM 686 CB PRO A 94 -13.614 98.818 3.359 1.00 37.38 C +ATOM 687 CG PRO A 94 -13.165 97.551 2.703 1.00 37.29 C +ATOM 688 CD PRO A 94 -14.422 96.722 2.779 1.00 38.23 C +ATOM 689 N ALA A 95 -15.072 100.047 6.091 1.00 42.63 N +ATOM 690 CA ALA A 95 -16.000 101.013 6.669 1.00 45.01 C +ATOM 691 C ALA A 95 -16.767 101.813 5.614 1.00 47.34 C +ATOM 692 O ALA A 95 -16.175 102.431 4.731 1.00 47.04 O +ATOM 693 CB ALA A 95 -15.263 101.945 7.612 1.00 42.84 C +ATOM 694 N ASN A 96 -18.092 101.745 5.694 1.00 50.77 N +ATOM 695 CA ASN A 96 -18.990 102.441 4.779 1.00 54.55 C +ATOM 696 C ASN A 96 -18.784 102.082 3.308 1.00 55.08 C +ATOM 697 O ASN A 96 -18.739 102.953 2.445 1.00 55.08 O +ATOM 698 CB ASN A 96 -18.921 103.957 5.001 1.00 58.17 C +ATOM 699 CG ASN A 96 -19.236 104.352 6.446 1.00 63.83 C +ATOM 700 OD1 ASN A 96 -19.951 103.641 7.167 1.00 68.00 O +ATOM 701 ND2 ASN A 96 -18.692 105.482 6.876 1.00 64.52 N +ATOM 702 N SER A 97 -18.663 100.787 3.041 1.00 55.06 N +ATOM 703 CA SER A 97 -18.495 100.274 1.690 1.00 56.54 C +ATOM 704 C SER A 97 -19.769 100.531 0.886 1.00 58.14 C +ATOM 705 O SER A 97 -20.875 100.456 1.416 1.00 59.13 O +ATOM 706 CB SER A 97 -18.211 98.764 1.743 1.00 57.27 C +ATOM 707 OG SER A 97 -18.361 98.132 0.477 1.00 59.35 O +ATOM 708 N GLN A 98 -19.608 100.863 -0.386 1.00 58.34 N +ATOM 709 CA GLN A 98 -20.747 101.101 -1.258 1.00 58.55 C +ATOM 710 C GLN A 98 -20.933 99.871 -2.117 1.00 58.14 C +ATOM 711 O GLN A 98 -20.009 99.069 -2.264 1.00 59.40 O +ATOM 712 CB GLN A 98 -20.477 102.299 -2.157 1.00 63.99 C +ATOM 713 CG GLN A 98 -20.304 103.595 -1.405 1.00 69.83 C +ATOM 714 CD GLN A 98 -21.557 103.995 -0.651 1.00 72.27 C +ATOM 715 OE1 GLN A 98 -22.550 103.261 -0.630 1.00 73.23 O +ATOM 716 NE2 GLN A 98 -21.519 105.169 -0.031 1.00 74.53 N +ATOM 717 N ILE A 99 -22.123 99.700 -2.676 1.00 57.23 N +ATOM 718 CA ILE A 99 -22.355 98.546 -3.533 1.00 56.46 C +ATOM 719 C ILE A 99 -21.485 98.699 -4.780 1.00 58.24 C +ATOM 720 O ILE A 99 -21.630 99.665 -5.531 1.00 58.53 O +ATOM 721 CB ILE A 99 -23.838 98.418 -3.940 1.00 53.33 C +ATOM 722 CG1 ILE A 99 -24.695 98.151 -2.702 1.00 52.50 C +ATOM 723 CG2 ILE A 99 -24.014 97.295 -4.951 1.00 50.61 C +ATOM 724 CD1 ILE A 99 -26.152 97.943 -3.001 1.00 48.88 C +ATOM 725 N PRO A 100 -20.535 97.766 -4.988 1.00 59.74 N +ATOM 726 CA PRO A 100 -19.627 97.766 -6.135 1.00 60.01 C +ATOM 727 C PRO A 100 -20.374 98.012 -7.436 1.00 61.60 C +ATOM 728 O PRO A 100 -21.427 97.419 -7.684 1.00 62.09 O +ATOM 729 CB PRO A 100 -19.046 96.355 -6.104 1.00 59.47 C +ATOM 730 CG PRO A 100 -18.975 96.072 -4.656 1.00 61.66 C +ATOM 731 CD PRO A 100 -20.312 96.571 -4.154 1.00 62.09 C +ATOM 732 N SER A 101 -19.833 98.908 -8.250 1.00 63.27 N +ATOM 733 CA SER A 101 -20.434 99.246 -9.530 1.00 63.37 C +ATOM 734 C SER A 101 -20.529 98.016 -10.428 1.00 61.90 C +ATOM 735 O SER A 101 -19.595 97.206 -10.497 1.00 60.29 O +ATOM 736 CB SER A 101 -19.608 100.329 -10.219 1.00 65.82 C +ATOM 737 OG SER A 101 -20.158 100.643 -11.487 1.00 70.81 O +ATOM 738 N GLY A 102 -21.674 97.879 -11.094 1.00 60.15 N +ATOM 739 CA GLY A 102 -21.892 96.755 -11.983 1.00 58.69 C +ATOM 740 C GLY A 102 -21.869 95.417 -11.273 1.00 57.92 C +ATOM 741 O GLY A 102 -21.174 94.489 -11.688 1.00 55.31 O +ATOM 742 N SER A 103 -22.607 95.331 -10.174 1.00 59.14 N +ATOM 743 CA SER A 103 -22.679 94.097 -9.408 1.00 59.92 C +ATOM 744 C SER A 103 -23.860 93.286 -9.938 1.00 60.54 C +ATOM 745 O SER A 103 -24.500 93.684 -10.914 1.00 61.70 O +ATOM 746 CB SER A 103 -22.857 94.404 -7.921 1.00 57.34 C +ATOM 747 OG SER A 103 -22.434 93.309 -7.131 1.00 56.64 O +ATOM 748 N SER A 104 -24.128 92.143 -9.320 1.00 60.39 N +ATOM 749 CA SER A 104 -25.234 91.297 -9.746 1.00 60.79 C +ATOM 750 C SER A 104 -25.698 90.446 -8.582 1.00 60.95 C +ATOM 751 O SER A 104 -24.953 90.228 -7.624 1.00 60.95 O +ATOM 752 CB SER A 104 -24.815 90.396 -10.911 1.00 60.83 C +ATOM 753 OG SER A 104 -23.805 89.484 -10.513 1.00 60.87 O +ATOM 754 N ALA A 105 -26.928 89.952 -8.683 1.00 59.86 N +ATOM 755 CA ALA A 105 -27.515 89.115 -7.650 1.00 57.60 C +ATOM 756 C ALA A 105 -26.608 87.954 -7.227 1.00 56.74 C +ATOM 757 O ALA A 105 -26.502 87.652 -6.043 1.00 58.36 O +ATOM 758 CB ALA A 105 -28.841 88.596 -8.124 1.00 58.91 C +ATOM 759 N GLY A 106 -25.942 87.319 -8.189 1.00 54.75 N +ATOM 760 CA GLY A 106 -25.065 86.209 -7.870 1.00 51.34 C +ATOM 761 C GLY A 106 -23.829 86.598 -7.079 1.00 49.65 C +ATOM 762 O GLY A 106 -23.123 85.726 -6.569 1.00 50.03 O +ATOM 763 N MET A 107 -23.546 87.897 -6.999 1.00 48.41 N +ATOM 764 CA MET A 107 -22.383 88.397 -6.259 1.00 48.51 C +ATOM 765 C MET A 107 -22.836 89.132 -4.986 1.00 46.42 C +ATOM 766 O MET A 107 -22.075 89.866 -4.353 1.00 45.03 O +ATOM 767 CB MET A 107 -21.509 89.284 -7.169 1.00 49.29 C +ATOM 768 CG MET A 107 -21.072 88.566 -8.461 1.00 50.78 C +ATOM 769 SD MET A 107 -20.025 89.502 -9.607 1.00 52.10 S +ATOM 770 CE MET A 107 -21.119 90.874 -10.095 1.00 54.17 C +ATOM 771 N PHE A 108 -24.101 88.903 -4.638 1.00 44.77 N +ATOM 772 CA PHE A 108 -24.763 89.458 -3.463 1.00 42.42 C +ATOM 773 C PHE A 108 -24.480 90.919 -3.170 1.00 43.22 C +ATOM 774 O PHE A 108 -24.572 91.342 -2.024 1.00 46.41 O +ATOM 775 CB PHE A 108 -24.437 88.602 -2.249 1.00 40.98 C +ATOM 776 CG PHE A 108 -24.580 87.135 -2.502 1.00 41.80 C +ATOM 777 CD1 PHE A 108 -25.834 86.564 -2.681 1.00 43.91 C +ATOM 778 CD2 PHE A 108 -23.461 86.320 -2.579 1.00 42.52 C +ATOM 779 CE1 PHE A 108 -25.969 85.197 -2.933 1.00 45.04 C +ATOM 780 CE2 PHE A 108 -23.583 84.955 -2.829 1.00 43.43 C +ATOM 781 CZ PHE A 108 -24.838 84.392 -3.006 1.00 44.29 C +ATOM 782 N GLY A 109 -24.149 91.684 -4.203 1.00 43.11 N +ATOM 783 CA GLY A 109 -23.857 93.096 -4.035 1.00 43.69 C +ATOM 784 C GLY A 109 -22.539 93.364 -3.336 1.00 44.64 C +ATOM 785 O GLY A 109 -22.320 94.457 -2.798 1.00 45.54 O +ATOM 786 N LEU A 110 -21.648 92.377 -3.363 1.00 45.28 N +ATOM 787 CA LEU A 110 -20.353 92.502 -2.700 1.00 47.23 C +ATOM 788 C LEU A 110 -19.179 92.507 -3.677 1.00 49.12 C +ATOM 789 O LEU A 110 -18.107 93.020 -3.362 1.00 49.23 O +ATOM 790 CB LEU A 110 -20.175 91.365 -1.684 1.00 44.54 C +ATOM 791 CG LEU A 110 -21.304 91.077 -0.685 1.00 40.61 C +ATOM 792 CD1 LEU A 110 -20.977 89.822 0.091 1.00 36.10 C +ATOM 793 CD2 LEU A 110 -21.522 92.262 0.245 1.00 39.24 C +ATOM 794 N PHE A 111 -19.384 91.956 -4.869 1.00 53.16 N +ATOM 795 CA PHE A 111 -18.313 91.898 -5.858 1.00 55.32 C +ATOM 796 C PHE A 111 -18.644 92.493 -7.229 1.00 58.21 C +ATOM 797 O PHE A 111 -19.774 92.393 -7.715 1.00 57.91 O +ATOM 798 CB PHE A 111 -17.834 90.457 -6.021 1.00 53.63 C +ATOM 799 CG PHE A 111 -17.351 89.840 -4.750 1.00 52.26 C +ATOM 800 CD1 PHE A 111 -16.082 90.127 -4.262 1.00 53.34 C +ATOM 801 CD2 PHE A 111 -18.170 88.983 -4.029 1.00 51.65 C +ATOM 802 CE1 PHE A 111 -15.634 89.568 -3.062 1.00 52.81 C +ATOM 803 CE2 PHE A 111 -17.735 88.419 -2.831 1.00 52.62 C +ATOM 804 CZ PHE A 111 -16.463 88.713 -2.345 1.00 52.59 C +ATOM 805 N SER A 112 -17.628 93.106 -7.836 1.00 61.49 N +ATOM 806 CA SER A 112 -17.708 93.738 -9.153 1.00 63.49 C +ATOM 807 C SER A 112 -17.475 92.667 -10.246 1.00 64.66 C +ATOM 808 O SER A 112 -17.976 92.801 -11.361 1.00 65.12 O +ATOM 809 CB SER A 112 -16.634 94.835 -9.242 1.00 64.06 C +ATOM 810 OG SER A 112 -17.068 96.016 -9.918 1.00 70.05 O +ATOM 811 N SER A 113 -16.724 91.608 -9.915 1.00 66.84 N +ATOM 812 CA SER A 113 -16.414 90.499 -10.849 1.00 68.41 C +ATOM 813 C SER A 113 -16.130 89.178 -10.112 1.00 69.18 C +ATOM 814 O SER A 113 -16.205 89.115 -8.883 1.00 70.32 O +ATOM 815 CB SER A 113 -15.201 90.834 -11.724 1.00 69.11 C +ATOM 816 OG SER A 113 -13.985 90.612 -11.019 1.00 69.29 O +ATOM 817 N SER A 114 -15.741 88.144 -10.856 1.00 69.70 N +ATOM 818 CA SER A 114 -15.468 86.842 -10.250 1.00 72.23 C +ATOM 819 C SER A 114 -14.005 86.553 -9.917 1.00 75.35 C +ATOM 820 O SER A 114 -13.627 85.392 -9.741 1.00 74.70 O +ATOM 821 CB SER A 114 -16.020 85.719 -11.124 1.00 70.61 C +ATOM 822 OG SER A 114 -15.322 85.647 -12.347 1.00 69.06 O +ATOM 823 N ASP A 115 -13.194 87.601 -9.817 1.00 78.74 N +ATOM 824 CA ASP A 115 -11.776 87.457 -9.493 1.00 81.61 C +ATOM 825 C ASP A 115 -11.511 87.392 -7.994 1.00 82.23 C +ATOM 826 O ASP A 115 -12.405 87.642 -7.177 1.00 83.29 O +ATOM 827 CB ASP A 115 -10.980 88.620 -10.071 1.00 86.06 C +ATOM 828 CG ASP A 115 -11.041 88.675 -11.573 1.00 90.47 C +ATOM 829 OD1 ASP A 115 -10.881 87.613 -12.213 1.00 92.19 O +ATOM 830 OD2 ASP A 115 -11.244 89.784 -12.114 1.00 94.01 O +ATOM 831 N SER A 116 -10.263 87.088 -7.649 1.00 81.79 N +ATOM 832 CA SER A 116 -9.829 86.995 -6.261 1.00 82.12 C +ATOM 833 C SER A 116 -8.861 88.144 -5.939 1.00 81.92 C +ATOM 834 O SER A 116 -7.707 87.922 -5.558 1.00 83.59 O +ATOM 835 CB SER A 116 -9.170 85.633 -6.013 1.00 82.56 C +ATOM 836 OG SER A 116 -8.798 85.477 -4.654 1.00 84.61 O +ATOM 837 N LYS A 117 -9.346 89.373 -6.090 1.00 81.69 N +ATOM 838 CA LYS A 117 -8.545 90.573 -5.835 1.00 81.27 C +ATOM 839 C LYS A 117 -8.498 90.956 -4.360 1.00 79.15 C +ATOM 840 O LYS A 117 -9.531 91.228 -3.746 1.00 79.76 O +ATOM 841 CB LYS A 117 -9.082 91.750 -6.659 1.00 83.66 C +ATOM 842 CG LYS A 117 -9.078 91.489 -8.157 1.00 87.67 C +ATOM 843 CD LYS A 117 -9.678 92.631 -8.962 1.00 89.83 C +ATOM 844 CE LYS A 117 -9.641 92.298 -10.455 1.00 91.94 C +ATOM 845 NZ LYS A 117 -10.166 93.387 -11.332 1.00 92.76 N +ATOM 846 N SER A 118 -7.289 91.009 -3.805 1.00 76.48 N +ATOM 847 CA SER A 118 -7.097 91.361 -2.397 1.00 73.91 C +ATOM 848 C SER A 118 -7.606 92.765 -2.081 1.00 70.72 C +ATOM 849 O SER A 118 -7.731 93.146 -0.917 1.00 70.17 O +ATOM 850 CB SER A 118 -5.617 91.254 -2.014 1.00 74.28 C +ATOM 851 OG SER A 118 -4.844 92.246 -2.666 1.00 74.59 O +ATOM 852 N SER A 119 -7.895 93.523 -3.131 1.00 68.61 N +ATOM 853 CA SER A 119 -8.385 94.888 -3.006 1.00 67.19 C +ATOM 854 C SER A 119 -9.839 94.954 -2.557 1.00 66.90 C +ATOM 855 O SER A 119 -10.260 95.947 -1.961 1.00 66.87 O +ATOM 856 CB SER A 119 -8.226 95.630 -4.336 1.00 66.56 C +ATOM 857 OG SER A 119 -8.934 94.986 -5.384 1.00 67.17 O +ATOM 858 N ASN A 120 -10.604 93.902 -2.851 1.00 65.85 N +ATOM 859 CA ASN A 120 -12.018 93.836 -2.475 1.00 63.51 C +ATOM 860 C ASN A 120 -12.185 94.001 -0.974 1.00 62.02 C +ATOM 861 O ASN A 120 -13.149 94.613 -0.510 1.00 61.48 O +ATOM 862 CB ASN A 120 -12.615 92.501 -2.905 1.00 63.67 C +ATOM 863 CG ASN A 120 -12.529 92.285 -4.392 1.00 62.97 C +ATOM 864 OD1 ASN A 120 -12.143 91.212 -4.854 1.00 62.81 O +ATOM 865 ND2 ASN A 120 -12.883 93.310 -5.158 1.00 62.69 N +ATOM 866 N GLN A 121 -11.219 93.458 -0.233 1.00 60.78 N +ATOM 867 CA GLN A 121 -11.186 93.509 1.229 1.00 57.97 C +ATOM 868 C GLN A 121 -12.536 93.140 1.799 1.00 56.26 C +ATOM 869 O GLN A 121 -13.145 93.911 2.549 1.00 57.64 O +ATOM 870 CB GLN A 121 -10.768 94.893 1.715 1.00 55.13 C +ATOM 871 CG GLN A 121 -9.414 95.298 1.242 1.00 51.95 C +ATOM 872 CD GLN A 121 -8.993 96.577 1.858 1.00 51.88 C +ATOM 873 OE1 GLN A 121 -8.098 96.601 2.691 1.00 54.32 O +ATOM 874 NE2 GLN A 121 -9.663 97.658 1.489 1.00 51.20 N +ATOM 875 N ILE A 122 -12.999 91.953 1.422 1.00 52.57 N +ATOM 876 CA ILE A 122 -14.280 91.468 1.869 1.00 49.09 C +ATOM 877 C ILE A 122 -14.223 90.038 2.319 1.00 48.71 C +ATOM 878 O ILE A 122 -13.596 89.198 1.678 1.00 50.00 O +ATOM 879 CB ILE A 122 -15.343 91.611 0.759 1.00 48.33 C +ATOM 880 CG1 ILE A 122 -15.817 93.064 0.704 1.00 50.31 C +ATOM 881 CG2 ILE A 122 -16.517 90.671 0.991 1.00 44.84 C +ATOM 882 CD1 ILE A 122 -16.845 93.347 -0.352 1.00 53.44 C +ATOM 883 N ILE A 123 -14.830 89.796 3.475 1.00 47.33 N +ATOM 884 CA ILE A 123 -14.948 88.460 4.041 1.00 45.66 C +ATOM 885 C ILE A 123 -16.447 88.320 4.262 1.00 41.49 C +ATOM 886 O ILE A 123 -17.079 89.199 4.866 1.00 42.13 O +ATOM 887 CB ILE A 123 -14.183 88.321 5.377 1.00 48.19 C +ATOM 888 CG1 ILE A 123 -12.677 88.366 5.116 1.00 50.29 C +ATOM 889 CG2 ILE A 123 -14.543 87.013 6.067 1.00 45.68 C +ATOM 890 CD1 ILE A 123 -11.842 88.309 6.375 1.00 53.47 C +ATOM 891 N ALA A 124 -17.025 87.253 3.729 1.00 36.42 N +ATOM 892 CA ALA A 124 -18.451 87.060 3.875 1.00 34.56 C +ATOM 893 C ALA A 124 -18.862 85.615 3.966 1.00 33.52 C +ATOM 894 O ALA A 124 -18.159 84.722 3.512 1.00 35.00 O +ATOM 895 CB ALA A 124 -19.174 87.717 2.733 1.00 34.83 C +ATOM 896 N VAL A 125 -20.011 85.398 4.589 1.00 34.95 N +ATOM 897 CA VAL A 125 -20.578 84.064 4.727 1.00 34.63 C +ATOM 898 C VAL A 125 -21.833 84.082 3.851 1.00 35.77 C +ATOM 899 O VAL A 125 -22.789 84.835 4.114 1.00 35.34 O +ATOM 900 CB VAL A 125 -20.949 83.752 6.197 1.00 32.03 C +ATOM 901 CG1 VAL A 125 -21.471 82.336 6.320 1.00 27.53 C +ATOM 902 CG2 VAL A 125 -19.736 83.940 7.083 1.00 28.00 C +ATOM 903 N GLU A 126 -21.793 83.301 2.776 1.00 35.02 N +ATOM 904 CA GLU A 126 -22.904 83.240 1.846 1.00 34.79 C +ATOM 905 C GLU A 126 -23.817 82.052 2.058 1.00 35.83 C +ATOM 906 O GLU A 126 -23.393 80.967 2.463 1.00 34.53 O +ATOM 907 CB GLU A 126 -22.402 83.241 0.399 1.00 35.56 C +ATOM 908 CG GLU A 126 -21.536 82.039 0.028 1.00 38.50 C +ATOM 909 CD GLU A 126 -21.239 81.949 -1.460 1.00 42.57 C +ATOM 910 OE1 GLU A 126 -21.011 82.998 -2.108 1.00 42.76 O +ATOM 911 OE2 GLU A 126 -21.237 80.815 -1.988 1.00 45.88 O +ATOM 912 N PHE A 127 -25.091 82.297 1.779 1.00 38.94 N +ATOM 913 CA PHE A 127 -26.155 81.305 1.856 1.00 38.59 C +ATOM 914 C PHE A 127 -26.741 81.299 0.454 1.00 36.98 C +ATOM 915 O PHE A 127 -27.782 81.893 0.196 1.00 33.19 O +ATOM 916 CB PHE A 127 -27.185 81.727 2.887 1.00 38.15 C +ATOM 917 CG PHE A 127 -26.630 81.798 4.270 1.00 42.38 C +ATOM 918 CD1 PHE A 127 -26.575 80.656 5.070 1.00 42.31 C +ATOM 919 CD2 PHE A 127 -26.124 82.996 4.767 1.00 42.55 C +ATOM 920 CE1 PHE A 127 -26.023 80.707 6.350 1.00 41.57 C +ATOM 921 CE2 PHE A 127 -25.567 83.055 6.050 1.00 42.05 C +ATOM 922 CZ PHE A 127 -25.516 81.909 6.840 1.00 40.93 C +ATOM 923 N ASP A 128 -25.970 80.694 -0.443 1.00 38.14 N +ATOM 924 CA ASP A 128 -26.248 80.565 -1.869 1.00 41.59 C +ATOM 925 C ASP A 128 -27.397 79.608 -2.176 1.00 43.10 C +ATOM 926 O ASP A 128 -27.290 78.425 -1.874 1.00 43.56 O +ATOM 927 CB ASP A 128 -24.978 80.033 -2.541 1.00 41.24 C +ATOM 928 CG ASP A 128 -24.599 80.791 -3.787 1.00 40.67 C +ATOM 929 OD1 ASP A 128 -25.511 81.145 -4.563 1.00 45.34 O +ATOM 930 OD2 ASP A 128 -23.383 81.019 -3.995 1.00 39.12 O +ATOM 931 N THR A 129 -28.473 80.105 -2.794 1.00 44.80 N +ATOM 932 CA THR A 129 -29.623 79.259 -3.159 1.00 46.53 C +ATOM 933 C THR A 129 -29.557 78.866 -4.636 1.00 48.67 C +ATOM 934 O THR A 129 -30.181 77.887 -5.065 1.00 49.00 O +ATOM 935 CB THR A 129 -30.968 79.963 -2.935 1.00 44.88 C +ATOM 936 OG1 THR A 129 -30.919 81.269 -3.515 1.00 47.50 O +ATOM 937 CG2 THR A 129 -31.285 80.071 -1.475 1.00 43.07 C +ATOM 938 N TYR A 130 -28.827 79.661 -5.412 1.00 50.53 N +ATOM 939 CA TYR A 130 -28.663 79.408 -6.834 1.00 52.54 C +ATOM 940 C TYR A 130 -27.230 78.993 -7.151 1.00 53.69 C +ATOM 941 O TYR A 130 -26.278 79.721 -6.861 1.00 52.70 O +ATOM 942 CB TYR A 130 -29.033 80.641 -7.644 1.00 54.96 C +ATOM 943 CG TYR A 130 -28.759 80.458 -9.104 1.00 56.99 C +ATOM 944 CD1 TYR A 130 -29.601 79.686 -9.895 1.00 59.07 C +ATOM 945 CD2 TYR A 130 -27.621 81.004 -9.684 1.00 58.87 C +ATOM 946 CE1 TYR A 130 -29.312 79.453 -11.235 1.00 62.26 C +ATOM 947 CE2 TYR A 130 -27.318 80.781 -11.019 1.00 61.36 C +ATOM 948 CZ TYR A 130 -28.164 80.003 -11.793 1.00 62.16 C +ATOM 949 OH TYR A 130 -27.856 79.754 -13.117 1.00 64.94 O +ATOM 950 N PHE A 131 -27.099 77.866 -7.844 1.00 54.89 N +ATOM 951 CA PHE A 131 -25.795 77.309 -8.178 1.00 55.87 C +ATOM 952 C PHE A 131 -25.633 76.891 -9.633 1.00 58.04 C +ATOM 953 O PHE A 131 -24.654 76.216 -9.974 1.00 59.80 O +ATOM 954 CB PHE A 131 -25.538 76.097 -7.291 1.00 54.79 C +ATOM 955 CG PHE A 131 -26.609 75.047 -7.387 1.00 55.06 C +ATOM 956 CD1 PHE A 131 -27.862 75.254 -6.813 1.00 56.49 C +ATOM 957 CD2 PHE A 131 -26.366 73.850 -8.043 1.00 54.79 C +ATOM 958 CE1 PHE A 131 -28.858 74.280 -6.892 1.00 55.66 C +ATOM 959 CE2 PHE A 131 -27.351 72.869 -8.128 1.00 53.79 C +ATOM 960 CZ PHE A 131 -28.598 73.084 -7.551 1.00 54.36 C +ATOM 961 N GLY A 132 -26.591 77.272 -10.478 1.00 59.43 N +ATOM 962 CA GLY A 132 -26.539 76.930 -11.896 1.00 59.90 C +ATOM 963 C GLY A 132 -25.276 77.419 -12.587 1.00 60.69 C +ATOM 964 O GLY A 132 -24.915 78.594 -12.489 1.00 58.83 O +ATOM 965 N LYS A 133 -24.616 76.516 -13.309 1.00 62.66 N +ATOM 966 CA LYS A 133 -23.376 76.836 -14.001 1.00 62.42 C +ATOM 967 C LYS A 133 -23.470 77.765 -15.211 1.00 61.63 C +ATOM 968 O LYS A 133 -22.460 78.309 -15.646 1.00 60.56 O +ATOM 969 CB LYS A 133 -22.623 75.556 -14.329 1.00 63.25 C +ATOM 970 CG LYS A 133 -21.908 74.988 -13.118 1.00 68.60 C +ATOM 971 CD LYS A 133 -21.067 73.783 -13.494 1.00 75.39 C +ATOM 972 CE LYS A 133 -20.046 73.461 -12.415 1.00 78.11 C +ATOM 973 NZ LYS A 133 -19.078 74.583 -12.226 1.00 80.93 N +ATOM 974 N ALA A 134 -24.679 77.981 -15.727 1.00 62.26 N +ATOM 975 CA ALA A 134 -24.875 78.874 -16.865 1.00 61.05 C +ATOM 976 C ALA A 134 -24.477 80.304 -16.469 1.00 61.37 C +ATOM 977 O ALA A 134 -23.750 80.972 -17.201 1.00 60.75 O +ATOM 978 CB ALA A 134 -26.332 78.824 -17.342 1.00 56.97 C +ATOM 979 N TYR A 135 -24.886 80.736 -15.275 1.00 63.35 N +ATOM 980 CA TYR A 135 -24.578 82.087 -14.791 1.00 65.70 C +ATOM 981 C TYR A 135 -23.667 82.155 -13.553 1.00 64.25 C +ATOM 982 O TYR A 135 -23.085 83.207 -13.271 1.00 63.96 O +ATOM 983 CB TYR A 135 -25.867 82.870 -14.524 1.00 70.12 C +ATOM 984 CG TYR A 135 -26.859 82.826 -15.670 1.00 77.81 C +ATOM 985 CD1 TYR A 135 -26.773 83.725 -16.739 1.00 80.70 C +ATOM 986 CD2 TYR A 135 -27.886 81.878 -15.690 1.00 81.07 C +ATOM 987 CE1 TYR A 135 -27.697 83.679 -17.812 1.00 83.29 C +ATOM 988 CE2 TYR A 135 -28.808 81.821 -16.751 1.00 85.01 C +ATOM 989 CZ TYR A 135 -28.708 82.725 -17.809 1.00 84.58 C +ATOM 990 OH TYR A 135 -29.615 82.672 -18.848 1.00 84.31 O +ATOM 991 N ASN A 136 -23.562 81.052 -12.810 1.00 61.85 N +ATOM 992 CA ASN A 136 -22.710 80.980 -11.612 1.00 60.02 C +ATOM 993 C ASN A 136 -21.779 79.781 -11.765 1.00 58.40 C +ATOM 994 O ASN A 136 -21.960 78.758 -11.104 1.00 58.55 O +ATOM 995 CB ASN A 136 -23.551 80.766 -10.343 1.00 61.91 C +ATOM 996 CG ASN A 136 -24.191 82.043 -9.810 1.00 61.73 C +ATOM 997 OD1 ASN A 136 -24.622 82.085 -8.656 1.00 63.80 O +ATOM 998 ND2 ASN A 136 -24.269 83.076 -10.641 1.00 64.04 N +ATOM 999 N PRO A 137 -20.758 79.894 -12.625 1.00 57.83 N +ATOM 1000 CA PRO A 137 -19.834 78.780 -12.878 1.00 57.38 C +ATOM 1001 C PRO A 137 -18.936 78.355 -11.704 1.00 57.17 C +ATOM 1002 O PRO A 137 -18.485 77.206 -11.647 1.00 55.93 O +ATOM 1003 CB PRO A 137 -19.026 79.290 -14.069 1.00 56.37 C +ATOM 1004 CG PRO A 137 -18.975 80.763 -13.831 1.00 56.07 C +ATOM 1005 CD PRO A 137 -20.388 81.076 -13.421 1.00 56.45 C +ATOM 1006 N TRP A 138 -18.710 79.273 -10.765 1.00 56.45 N +ATOM 1007 CA TRP A 138 -17.865 79.031 -9.595 1.00 54.72 C +ATOM 1008 C TRP A 138 -18.489 78.135 -8.530 1.00 55.88 C +ATOM 1009 O TRP A 138 -17.782 77.400 -7.846 1.00 56.82 O +ATOM 1010 CB TRP A 138 -17.490 80.365 -8.963 1.00 54.31 C +ATOM 1011 CG TRP A 138 -18.685 81.221 -8.692 1.00 55.42 C +ATOM 1012 CD1 TRP A 138 -19.560 81.092 -7.659 1.00 56.19 C +ATOM 1013 CD2 TRP A 138 -19.162 82.311 -9.489 1.00 56.92 C +ATOM 1014 NE1 TRP A 138 -20.560 82.025 -7.760 1.00 58.81 N +ATOM 1015 CE2 TRP A 138 -20.341 82.792 -8.872 1.00 57.77 C +ATOM 1016 CE3 TRP A 138 -18.712 82.933 -10.660 1.00 57.87 C +ATOM 1017 CZ2 TRP A 138 -21.078 83.870 -9.393 1.00 57.91 C +ATOM 1018 CZ3 TRP A 138 -19.445 84.005 -11.177 1.00 57.47 C +ATOM 1019 CH2 TRP A 138 -20.617 84.460 -10.539 1.00 57.50 C +ATOM 1020 N ASP A 139 -19.810 78.225 -8.377 1.00 56.90 N +ATOM 1021 CA ASP A 139 -20.554 77.450 -7.383 1.00 56.89 C +ATOM 1022 C ASP A 139 -20.537 75.943 -7.623 1.00 56.11 C +ATOM 1023 O ASP A 139 -20.416 75.482 -8.758 1.00 55.69 O +ATOM 1024 CB ASP A 139 -22.020 77.927 -7.312 1.00 57.58 C +ATOM 1025 CG ASP A 139 -22.192 79.255 -6.561 1.00 60.10 C +ATOM 1026 OD1 ASP A 139 -21.405 79.558 -5.633 1.00 63.70 O +ATOM 1027 OD2 ASP A 139 -23.149 79.990 -6.884 1.00 60.18 O +ATOM 1028 N PRO A 140 -20.628 75.155 -6.538 1.00 56.31 N +ATOM 1029 CA PRO A 140 -20.682 73.692 -6.596 1.00 57.28 C +ATOM 1030 C PRO A 140 -22.062 73.217 -7.050 1.00 57.63 C +ATOM 1031 O PRO A 140 -22.957 74.028 -7.288 1.00 56.76 O +ATOM 1032 CB PRO A 140 -20.397 73.288 -5.151 1.00 56.64 C +ATOM 1033 CG PRO A 140 -20.991 74.404 -4.376 1.00 56.81 C +ATOM 1034 CD PRO A 140 -20.506 75.609 -5.143 1.00 56.74 C +ATOM 1035 N ASP A 141 -22.238 71.902 -7.121 1.00 59.42 N +ATOM 1036 CA ASP A 141 -23.496 71.314 -7.574 1.00 61.64 C +ATOM 1037 C ASP A 141 -24.643 71.220 -6.579 1.00 60.58 C +ATOM 1038 O ASP A 141 -25.415 70.256 -6.613 1.00 61.86 O +ATOM 1039 CB ASP A 141 -23.243 69.934 -8.177 1.00 66.47 C +ATOM 1040 CG ASP A 141 -22.548 70.008 -9.517 1.00 72.39 C +ATOM 1041 OD1 ASP A 141 -22.993 70.809 -10.376 1.00 74.70 O +ATOM 1042 OD2 ASP A 141 -21.555 69.267 -9.707 1.00 75.90 O +ATOM 1043 N PHE A 142 -24.790 72.227 -5.726 1.00 58.32 N +ATOM 1044 CA PHE A 142 -25.871 72.227 -4.744 1.00 56.42 C +ATOM 1045 C PHE A 142 -26.007 73.536 -3.977 1.00 55.42 C +ATOM 1046 O PHE A 142 -25.119 74.395 -4.032 1.00 54.11 O +ATOM 1047 CB PHE A 142 -25.700 71.070 -3.751 1.00 54.97 C +ATOM 1048 CG PHE A 142 -24.302 70.913 -3.237 1.00 53.57 C +ATOM 1049 CD1 PHE A 142 -23.612 71.991 -2.691 1.00 54.34 C +ATOM 1050 CD2 PHE A 142 -23.666 69.688 -3.314 1.00 53.18 C +ATOM 1051 CE1 PHE A 142 -22.305 71.848 -2.231 1.00 53.42 C +ATOM 1052 CE2 PHE A 142 -22.365 69.535 -2.858 1.00 53.32 C +ATOM 1053 CZ PHE A 142 -21.682 70.619 -2.315 1.00 52.13 C +ATOM 1054 N LYS A 143 -27.144 73.699 -3.298 1.00 53.70 N +ATOM 1055 CA LYS A 143 -27.365 74.884 -2.481 1.00 51.50 C +ATOM 1056 C LYS A 143 -26.313 74.759 -1.386 1.00 50.22 C +ATOM 1057 O LYS A 143 -26.117 73.680 -0.820 1.00 49.18 O +ATOM 1058 CB LYS A 143 -28.788 74.905 -1.918 1.00 50.99 C +ATOM 1059 CG LYS A 143 -29.842 75.266 -2.969 1.00 50.00 C +ATOM 1060 CD LYS A 143 -31.253 75.196 -2.423 1.00 47.71 C +ATOM 1061 CE LYS A 143 -32.281 75.294 -3.549 1.00 47.52 C +ATOM 1062 NZ LYS A 143 -32.463 76.676 -4.082 1.00 47.53 N +ATOM 1063 N HIS A 144 -25.612 75.852 -1.112 1.00 48.44 N +ATOM 1064 CA HIS A 144 -24.527 75.803 -0.146 1.00 46.28 C +ATOM 1065 C HIS A 144 -24.366 76.994 0.797 1.00 45.52 C +ATOM 1066 O HIS A 144 -24.993 78.045 0.640 1.00 45.40 O +ATOM 1067 CB HIS A 144 -23.215 75.631 -0.932 1.00 44.30 C +ATOM 1068 CG HIS A 144 -22.998 76.686 -1.984 1.00 42.32 C +ATOM 1069 ND1 HIS A 144 -23.619 76.646 -3.214 1.00 42.11 N +ATOM 1070 CD2 HIS A 144 -22.236 77.806 -1.984 1.00 43.51 C +ATOM 1071 CE1 HIS A 144 -23.248 77.697 -3.927 1.00 41.67 C +ATOM 1072 NE2 HIS A 144 -22.409 78.418 -3.206 1.00 39.95 N +ATOM 1073 N ILE A 145 -23.537 76.772 1.812 1.00 44.43 N +ATOM 1074 CA ILE A 145 -23.145 77.796 2.770 1.00 41.71 C +ATOM 1075 C ILE A 145 -21.675 77.928 2.397 1.00 41.25 C +ATOM 1076 O ILE A 145 -20.979 76.912 2.236 1.00 39.73 O +ATOM 1077 CB ILE A 145 -23.191 77.302 4.226 1.00 40.27 C +ATOM 1078 CG1 ILE A 145 -24.627 77.084 4.679 1.00 41.43 C +ATOM 1079 CG2 ILE A 145 -22.527 78.311 5.136 1.00 38.20 C +ATOM 1080 CD1 ILE A 145 -24.732 76.628 6.114 1.00 39.62 C +ATOM 1081 N GLY A 146 -21.201 79.151 2.219 1.00 40.23 N +ATOM 1082 CA GLY A 146 -19.809 79.308 1.861 1.00 38.65 C +ATOM 1083 C GLY A 146 -19.105 80.455 2.539 1.00 39.64 C +ATOM 1084 O GLY A 146 -19.716 81.464 2.908 1.00 39.76 O +ATOM 1085 N ILE A 147 -17.812 80.262 2.763 1.00 40.25 N +ATOM 1086 CA ILE A 147 -16.970 81.293 3.360 1.00 40.88 C +ATOM 1087 C ILE A 147 -16.291 81.958 2.161 1.00 39.11 C +ATOM 1088 O ILE A 147 -15.604 81.301 1.376 1.00 39.27 O +ATOM 1089 CB ILE A 147 -15.880 80.689 4.275 1.00 42.55 C +ATOM 1090 CG1 ILE A 147 -16.485 79.663 5.245 1.00 42.84 C +ATOM 1091 CG2 ILE A 147 -15.150 81.798 5.024 1.00 39.52 C +ATOM 1092 CD1 ILE A 147 -17.303 80.246 6.355 1.00 43.66 C +ATOM 1093 N ASP A 148 -16.530 83.248 1.991 1.00 37.58 N +ATOM 1094 CA ASP A 148 -15.959 83.972 0.869 1.00 38.96 C +ATOM 1095 C ASP A 148 -14.900 84.931 1.333 1.00 40.17 C +ATOM 1096 O ASP A 148 -15.136 85.741 2.229 1.00 41.40 O +ATOM 1097 CB ASP A 148 -17.043 84.747 0.120 1.00 36.30 C +ATOM 1098 CG ASP A 148 -18.122 83.849 -0.438 1.00 36.14 C +ATOM 1099 OD1 ASP A 148 -17.898 82.628 -0.574 1.00 34.60 O +ATOM 1100 OD2 ASP A 148 -19.206 84.375 -0.744 1.00 36.08 O +ATOM 1101 N VAL A 149 -13.734 84.853 0.705 1.00 42.33 N +ATOM 1102 CA VAL A 149 -12.630 85.731 1.064 1.00 42.28 C +ATOM 1103 C VAL A 149 -12.084 86.429 -0.164 1.00 43.17 C +ATOM 1104 O VAL A 149 -11.384 85.812 -0.972 1.00 45.42 O +ATOM 1105 CB VAL A 149 -11.479 84.956 1.715 1.00 41.41 C +ATOM 1106 CG1 VAL A 149 -10.444 85.935 2.220 1.00 42.03 C +ATOM 1107 CG2 VAL A 149 -11.989 84.077 2.853 1.00 42.40 C +ATOM 1108 N ASN A 150 -12.413 87.712 -0.298 1.00 43.87 N +ATOM 1109 CA ASN A 150 -11.973 88.532 -1.423 1.00 44.44 C +ATOM 1110 C ASN A 150 -12.467 88.068 -2.788 1.00 46.48 C +ATOM 1111 O ASN A 150 -12.133 88.679 -3.803 1.00 47.27 O +ATOM 1112 CB ASN A 150 -10.452 88.640 -1.436 1.00 44.46 C +ATOM 1113 CG ASN A 150 -9.945 89.696 -0.492 1.00 45.87 C +ATOM 1114 OD1 ASN A 150 -8.825 89.612 0.020 1.00 46.96 O +ATOM 1115 ND2 ASN A 150 -10.767 90.710 -0.262 1.00 46.63 N +ATOM 1116 N SER A 151 -13.288 87.021 -2.812 1.00 47.02 N +ATOM 1117 CA SER A 151 -13.812 86.478 -4.061 1.00 48.02 C +ATOM 1118 C SER A 151 -15.082 85.693 -3.827 1.00 50.32 C +ATOM 1119 O SER A 151 -15.194 84.964 -2.832 1.00 51.27 O +ATOM 1120 CB SER A 151 -12.787 85.550 -4.703 1.00 48.33 C +ATOM 1121 OG SER A 151 -13.358 84.825 -5.779 1.00 47.74 O +ATOM 1122 N ILE A 152 -16.002 85.793 -4.788 1.00 51.53 N +ATOM 1123 CA ILE A 152 -17.287 85.099 -4.732 1.00 51.44 C +ATOM 1124 C ILE A 152 -17.122 83.567 -4.847 1.00 51.97 C +ATOM 1125 O ILE A 152 -18.074 82.800 -4.621 1.00 52.04 O +ATOM 1126 CB ILE A 152 -18.238 85.641 -5.815 1.00 51.00 C +ATOM 1127 CG1 ILE A 152 -19.664 85.130 -5.581 1.00 51.87 C +ATOM 1128 CG2 ILE A 152 -17.731 85.266 -7.193 1.00 52.30 C +ATOM 1129 CD1 ILE A 152 -20.328 85.690 -4.343 1.00 50.23 C +ATOM 1130 N LYS A 153 -15.919 83.133 -5.230 1.00 51.56 N +ATOM 1131 CA LYS A 153 -15.610 81.713 -5.320 1.00 51.09 C +ATOM 1132 C LYS A 153 -15.159 81.331 -3.907 1.00 50.21 C +ATOM 1133 O LYS A 153 -14.015 81.583 -3.505 1.00 49.63 O +ATOM 1134 CB LYS A 153 -14.501 81.453 -6.347 1.00 53.15 C +ATOM 1135 CG LYS A 153 -14.213 79.971 -6.587 1.00 56.28 C +ATOM 1136 CD LYS A 153 -13.303 79.736 -7.793 1.00 59.41 C +ATOM 1137 CE LYS A 153 -12.925 78.257 -7.930 1.00 62.09 C +ATOM 1138 NZ LYS A 153 -14.117 77.349 -7.950 1.00 63.94 N +ATOM 1139 N SER A 154 -16.103 80.795 -3.135 1.00 48.99 N +ATOM 1140 CA SER A 154 -15.866 80.401 -1.748 1.00 47.81 C +ATOM 1141 C SER A 154 -14.597 79.583 -1.605 1.00 47.24 C +ATOM 1142 O SER A 154 -14.235 78.837 -2.508 1.00 47.48 O +ATOM 1143 CB SER A 154 -17.050 79.590 -1.219 1.00 46.05 C +ATOM 1144 OG SER A 154 -18.287 80.142 -1.636 1.00 44.07 O +ATOM 1145 N ILE A 155 -13.912 79.746 -0.480 1.00 46.44 N +ATOM 1146 CA ILE A 155 -12.683 79.003 -0.230 1.00 45.57 C +ATOM 1147 C ILE A 155 -13.023 77.661 0.396 1.00 45.26 C +ATOM 1148 O ILE A 155 -12.173 76.770 0.488 1.00 47.20 O +ATOM 1149 CB ILE A 155 -11.737 79.765 0.703 1.00 42.98 C +ATOM 1150 CG1 ILE A 155 -12.331 79.826 2.108 1.00 42.71 C +ATOM 1151 CG2 ILE A 155 -11.512 81.165 0.173 1.00 44.21 C +ATOM 1152 CD1 ILE A 155 -11.421 80.397 3.125 1.00 39.71 C +ATOM 1153 N LYS A 156 -14.260 77.549 0.871 1.00 44.99 N +ATOM 1154 CA LYS A 156 -14.759 76.319 1.480 1.00 46.52 C +ATOM 1155 C LYS A 156 -16.271 76.412 1.532 1.00 47.35 C +ATOM 1156 O LYS A 156 -16.824 77.469 1.854 1.00 49.52 O +ATOM 1157 CB LYS A 156 -14.198 76.118 2.890 1.00 44.84 C +ATOM 1158 CG LYS A 156 -14.408 74.696 3.433 1.00 46.93 C +ATOM 1159 CD LYS A 156 -13.603 74.441 4.719 1.00 47.73 C +ATOM 1160 CE LYS A 156 -13.836 73.040 5.270 1.00 46.20 C +ATOM 1161 NZ LYS A 156 -13.156 72.846 6.576 1.00 45.33 N +ATOM 1162 N THR A 157 -16.935 75.329 1.146 1.00 47.01 N +ATOM 1163 CA THR A 157 -18.393 75.280 1.146 1.00 47.06 C +ATOM 1164 C THR A 157 -18.865 73.992 1.792 1.00 47.71 C +ATOM 1165 O THR A 157 -18.074 73.098 2.084 1.00 48.80 O +ATOM 1166 CB THR A 157 -18.978 75.330 -0.291 1.00 46.83 C +ATOM 1167 OG1 THR A 157 -18.365 74.321 -1.100 1.00 44.29 O +ATOM 1168 CG2 THR A 157 -18.754 76.687 -0.925 1.00 47.13 C +ATOM 1169 N VAL A 158 -20.163 73.921 2.042 1.00 48.10 N +ATOM 1170 CA VAL A 158 -20.777 72.736 2.621 1.00 48.31 C +ATOM 1171 C VAL A 158 -22.208 72.764 2.121 1.00 49.28 C +ATOM 1172 O VAL A 158 -22.779 73.844 1.902 1.00 48.34 O +ATOM 1173 CB VAL A 158 -20.729 72.729 4.187 1.00 47.20 C +ATOM 1174 CG1 VAL A 158 -21.480 73.922 4.762 1.00 48.50 C +ATOM 1175 CG2 VAL A 158 -21.319 71.435 4.734 1.00 47.31 C +ATOM 1176 N LYS A 159 -22.759 71.581 1.866 1.00 50.33 N +ATOM 1177 CA LYS A 159 -24.126 71.486 1.383 1.00 50.90 C +ATOM 1178 C LYS A 159 -25.102 72.068 2.398 1.00 49.84 C +ATOM 1179 O LYS A 159 -25.044 71.749 3.592 1.00 48.51 O +ATOM 1180 CB LYS A 159 -24.503 70.043 1.087 1.00 52.37 C +ATOM 1181 CG LYS A 159 -25.884 69.913 0.490 1.00 57.17 C +ATOM 1182 CD LYS A 159 -26.302 68.463 0.363 1.00 61.75 C +ATOM 1183 CE LYS A 159 -27.711 68.363 -0.192 1.00 64.28 C +ATOM 1184 NZ LYS A 159 -28.194 66.960 -0.206 1.00 65.56 N +ATOM 1185 N TRP A 160 -25.965 72.950 1.908 1.00 47.34 N +ATOM 1186 CA TRP A 160 -26.974 73.600 2.724 1.00 45.62 C +ATOM 1187 C TRP A 160 -28.320 72.889 2.539 1.00 47.25 C +ATOM 1188 O TRP A 160 -28.883 72.884 1.437 1.00 48.37 O +ATOM 1189 CB TRP A 160 -27.087 75.077 2.324 1.00 42.64 C +ATOM 1190 CG TRP A 160 -28.136 75.838 3.075 1.00 39.27 C +ATOM 1191 CD1 TRP A 160 -28.746 75.470 4.243 1.00 40.00 C +ATOM 1192 CD2 TRP A 160 -28.699 77.099 2.716 1.00 37.70 C +ATOM 1193 NE1 TRP A 160 -29.648 76.421 4.631 1.00 37.16 N +ATOM 1194 CE2 TRP A 160 -29.638 77.437 3.711 1.00 38.70 C +ATOM 1195 CE3 TRP A 160 -28.499 77.978 1.652 1.00 39.04 C +ATOM 1196 CZ2 TRP A 160 -30.382 78.626 3.675 1.00 39.70 C +ATOM 1197 CZ3 TRP A 160 -29.238 79.161 1.613 1.00 40.41 C +ATOM 1198 CH2 TRP A 160 -30.166 79.472 2.621 1.00 39.09 C +ATOM 1199 N ASP A 161 -28.824 72.278 3.613 1.00 46.36 N +ATOM 1200 CA ASP A 161 -30.104 71.579 3.566 1.00 45.16 C +ATOM 1201 C ASP A 161 -31.238 72.569 3.792 1.00 44.96 C +ATOM 1202 O ASP A 161 -31.992 72.453 4.755 1.00 45.14 O +ATOM 1203 CB ASP A 161 -30.160 70.459 4.606 1.00 46.60 C +ATOM 1204 CG ASP A 161 -29.215 69.320 4.293 1.00 47.56 C +ATOM 1205 OD1 ASP A 161 -29.322 68.750 3.188 1.00 49.54 O +ATOM 1206 OD2 ASP A 161 -28.369 68.993 5.150 1.00 46.72 O +ATOM 1207 N TRP A 162 -31.358 73.526 2.874 1.00 44.39 N +ATOM 1208 CA TRP A 162 -32.380 74.567 2.912 1.00 43.14 C +ATOM 1209 C TRP A 162 -33.798 74.052 3.053 1.00 43.61 C +ATOM 1210 O TRP A 162 -34.201 73.114 2.366 1.00 44.63 O +ATOM 1211 CB TRP A 162 -32.296 75.408 1.642 1.00 45.66 C +ATOM 1212 CG TRP A 162 -33.428 76.382 1.455 1.00 48.64 C +ATOM 1213 CD1 TRP A 162 -33.739 77.444 2.246 1.00 50.02 C +ATOM 1214 CD2 TRP A 162 -34.357 76.414 0.361 1.00 51.02 C +ATOM 1215 NE1 TRP A 162 -34.793 78.148 1.714 1.00 50.74 N +ATOM 1216 CE2 TRP A 162 -35.190 77.533 0.558 1.00 51.74 C +ATOM 1217 CE3 TRP A 162 -34.559 75.605 -0.760 1.00 53.21 C +ATOM 1218 CZ2 TRP A 162 -36.210 77.870 -0.337 1.00 54.78 C +ATOM 1219 CZ3 TRP A 162 -35.574 75.940 -1.652 1.00 54.71 C +ATOM 1220 CH2 TRP A 162 -36.386 77.061 -1.431 1.00 55.91 C +ATOM 1221 N ARG A 163 -34.553 74.685 3.944 1.00 43.22 N +ATOM 1222 CA ARG A 163 -35.951 74.343 4.163 1.00 43.33 C +ATOM 1223 C ARG A 163 -36.754 75.571 3.741 1.00 42.75 C +ATOM 1224 O ARG A 163 -36.667 76.629 4.371 1.00 42.17 O +ATOM 1225 CB ARG A 163 -36.214 74.006 5.632 1.00 44.22 C +ATOM 1226 CG ARG A 163 -35.501 72.769 6.145 1.00 47.53 C +ATOM 1227 CD ARG A 163 -35.889 71.529 5.358 1.00 53.52 C +ATOM 1228 NE ARG A 163 -35.341 70.301 5.938 1.00 59.48 N +ATOM 1229 CZ ARG A 163 -34.600 69.407 5.279 1.00 62.38 C +ATOM 1230 NH1 ARG A 163 -34.300 69.591 4.000 1.00 63.72 N +ATOM 1231 NH2 ARG A 163 -34.162 68.315 5.898 1.00 64.28 N +ATOM 1232 N ASN A 164 -37.498 75.439 2.646 1.00 43.00 N +ATOM 1233 CA ASN A 164 -38.295 76.543 2.124 1.00 43.50 C +ATOM 1234 C ASN A 164 -39.261 77.112 3.153 1.00 43.91 C +ATOM 1235 O ASN A 164 -40.049 76.382 3.765 1.00 43.58 O +ATOM 1236 CB ASN A 164 -39.052 76.119 0.856 1.00 45.34 C +ATOM 1237 CG ASN A 164 -39.863 77.259 0.240 1.00 47.10 C +ATOM 1238 OD1 ASN A 164 -40.921 77.032 -0.343 1.00 52.58 O +ATOM 1239 ND2 ASN A 164 -39.375 78.484 0.378 1.00 45.35 N +ATOM 1240 N GLY A 165 -39.160 78.420 3.371 1.00 43.70 N +ATOM 1241 CA GLY A 165 -40.039 79.094 4.310 1.00 43.12 C +ATOM 1242 C GLY A 165 -39.750 78.893 5.783 1.00 41.71 C +ATOM 1243 O GLY A 165 -40.322 79.573 6.624 1.00 40.72 O +ATOM 1244 N GLU A 166 -38.881 77.952 6.108 1.00 42.73 N +ATOM 1245 CA GLU A 166 -38.547 77.719 7.497 1.00 42.48 C +ATOM 1246 C GLU A 166 -37.491 78.681 8.009 1.00 41.81 C +ATOM 1247 O GLU A 166 -36.636 79.160 7.248 1.00 43.92 O +ATOM 1248 CB GLU A 166 -38.108 76.275 7.720 1.00 45.90 C +ATOM 1249 CG GLU A 166 -39.247 75.274 7.650 1.00 49.31 C +ATOM 1250 CD GLU A 166 -40.424 75.659 8.528 1.00 54.26 C +ATOM 1251 OE1 GLU A 166 -40.229 76.320 9.586 1.00 58.26 O +ATOM 1252 OE2 GLU A 166 -41.555 75.293 8.148 1.00 56.07 O +ATOM 1253 N VAL A 167 -37.585 78.972 9.304 1.00 39.11 N +ATOM 1254 CA VAL A 167 -36.676 79.874 9.986 1.00 37.38 C +ATOM 1255 C VAL A 167 -35.393 79.167 10.381 1.00 39.04 C +ATOM 1256 O VAL A 167 -35.428 78.084 10.977 1.00 40.42 O +ATOM 1257 CB VAL A 167 -37.310 80.409 11.265 1.00 35.75 C +ATOM 1258 CG1 VAL A 167 -36.360 81.349 11.974 1.00 34.09 C +ATOM 1259 CG2 VAL A 167 -38.615 81.097 10.944 1.00 36.88 C +ATOM 1260 N ALA A 168 -34.266 79.798 10.063 1.00 38.21 N +ATOM 1261 CA ALA A 168 -32.957 79.258 10.389 1.00 36.96 C +ATOM 1262 C ALA A 168 -32.279 80.123 11.448 1.00 37.36 C +ATOM 1263 O ALA A 168 -32.385 81.349 11.430 1.00 38.63 O +ATOM 1264 CB ALA A 168 -32.089 79.185 9.136 1.00 35.11 C +ATOM 1265 N ASP A 169 -31.627 79.468 12.398 1.00 37.33 N +ATOM 1266 CA ASP A 169 -30.893 80.152 13.447 1.00 37.39 C +ATOM 1267 C ASP A 169 -29.420 79.977 13.121 1.00 37.37 C +ATOM 1268 O ASP A 169 -28.920 78.846 13.036 1.00 38.32 O +ATOM 1269 CB ASP A 169 -31.186 79.533 14.815 1.00 39.80 C +ATOM 1270 CG ASP A 169 -32.572 79.870 15.331 1.00 43.05 C +ATOM 1271 OD1 ASP A 169 -33.083 80.971 15.012 1.00 45.04 O +ATOM 1272 OD2 ASP A 169 -33.145 79.034 16.075 1.00 45.52 O +ATOM 1273 N VAL A 170 -28.732 81.090 12.897 1.00 36.10 N +ATOM 1274 CA VAL A 170 -27.320 81.026 12.581 1.00 33.66 C +ATOM 1275 C VAL A 170 -26.504 81.646 13.695 1.00 33.27 C +ATOM 1276 O VAL A 170 -26.898 82.637 14.316 1.00 34.33 O +ATOM 1277 CB VAL A 170 -26.967 81.748 11.258 1.00 33.97 C +ATOM 1278 CG1 VAL A 170 -25.588 81.333 10.806 1.00 33.29 C +ATOM 1279 CG2 VAL A 170 -27.980 81.434 10.183 1.00 33.12 C +ATOM 1280 N VAL A 171 -25.383 81.002 13.976 1.00 31.86 N +ATOM 1281 CA VAL A 171 -24.450 81.459 14.976 1.00 29.24 C +ATOM 1282 C VAL A 171 -23.104 81.370 14.289 1.00 30.29 C +ATOM 1283 O VAL A 171 -22.694 80.307 13.829 1.00 29.86 O +ATOM 1284 CB VAL A 171 -24.431 80.546 16.216 1.00 28.42 C +ATOM 1285 CG1 VAL A 171 -23.277 80.924 17.126 1.00 25.58 C +ATOM 1286 CG2 VAL A 171 -25.735 80.665 16.983 1.00 31.36 C +ATOM 1287 N ILE A 172 -22.451 82.512 14.156 1.00 30.03 N +ATOM 1288 CA ILE A 172 -21.144 82.565 13.535 1.00 29.18 C +ATOM 1289 C ILE A 172 -20.200 83.050 14.609 1.00 30.62 C +ATOM 1290 O ILE A 172 -20.518 83.988 15.334 1.00 32.01 O +ATOM 1291 CB ILE A 172 -21.106 83.578 12.396 1.00 27.99 C +ATOM 1292 CG1 ILE A 172 -22.035 83.156 11.269 1.00 25.70 C +ATOM 1293 CG2 ILE A 172 -19.703 83.707 11.868 1.00 31.04 C +ATOM 1294 CD1 ILE A 172 -22.230 84.247 10.258 1.00 24.68 C +ATOM 1295 N THR A 173 -19.050 82.401 14.726 1.00 32.08 N +ATOM 1296 CA THR A 173 -18.065 82.797 15.722 1.00 31.95 C +ATOM 1297 C THR A 173 -16.712 82.992 15.067 1.00 32.50 C +ATOM 1298 O THR A 173 -16.398 82.345 14.068 1.00 35.53 O +ATOM 1299 CB THR A 173 -17.886 81.722 16.810 1.00 31.22 C +ATOM 1300 OG1 THR A 173 -17.222 80.577 16.259 1.00 35.86 O +ATOM 1301 CG2 THR A 173 -19.220 81.290 17.352 1.00 33.95 C +ATOM 1302 N TYR A 174 -15.929 83.918 15.601 1.00 32.27 N +ATOM 1303 CA TYR A 174 -14.590 84.130 15.088 1.00 31.55 C +ATOM 1304 C TYR A 174 -13.645 84.196 16.251 1.00 31.66 C +ATOM 1305 O TYR A 174 -13.696 85.126 17.059 1.00 33.16 O +ATOM 1306 CB TYR A 174 -14.447 85.399 14.269 1.00 30.45 C +ATOM 1307 CG TYR A 174 -13.037 85.521 13.741 1.00 31.52 C +ATOM 1308 CD1 TYR A 174 -12.546 84.610 12.799 1.00 30.75 C +ATOM 1309 CD2 TYR A 174 -12.165 86.500 14.230 1.00 32.81 C +ATOM 1310 CE1 TYR A 174 -11.221 84.664 12.356 1.00 30.92 C +ATOM 1311 CE2 TYR A 174 -10.833 86.565 13.796 1.00 32.34 C +ATOM 1312 CZ TYR A 174 -10.370 85.642 12.857 1.00 32.84 C +ATOM 1313 OH TYR A 174 -9.066 85.704 12.415 1.00 32.67 O +ATOM 1314 N ARG A 175 -12.775 83.201 16.322 1.00 31.94 N +ATOM 1315 CA ARG A 175 -11.804 83.121 17.390 1.00 35.17 C +ATOM 1316 C ARG A 175 -10.423 83.559 16.895 1.00 36.29 C +ATOM 1317 O ARG A 175 -9.672 82.769 16.303 1.00 36.89 O +ATOM 1318 CB ARG A 175 -11.814 81.700 17.957 1.00 38.04 C +ATOM 1319 CG ARG A 175 -13.129 81.380 18.683 1.00 43.22 C +ATOM 1320 CD ARG A 175 -13.308 79.891 18.997 1.00 48.70 C +ATOM 1321 NE ARG A 175 -14.229 79.648 20.120 1.00 52.10 N +ATOM 1322 CZ ARG A 175 -15.479 79.183 20.017 1.00 56.02 C +ATOM 1323 NH1 ARG A 175 -16.025 78.896 18.827 1.00 55.91 N +ATOM 1324 NH2 ARG A 175 -16.171 78.947 21.128 1.00 57.08 N +ATOM 1325 N ALA A 176 -10.112 84.834 17.133 1.00 35.92 N +ATOM 1326 CA ALA A 176 -8.848 85.442 16.713 1.00 38.45 C +ATOM 1327 C ALA A 176 -7.577 84.630 17.013 1.00 39.84 C +ATOM 1328 O ALA A 176 -6.729 84.451 16.133 1.00 41.60 O +ATOM 1329 CB ALA A 176 -8.726 86.849 17.281 1.00 36.68 C +ATOM 1330 N PRO A 177 -7.427 84.122 18.251 1.00 40.47 N +ATOM 1331 CA PRO A 177 -6.233 83.338 18.577 1.00 39.64 C +ATOM 1332 C PRO A 177 -5.954 82.215 17.583 1.00 39.75 C +ATOM 1333 O PRO A 177 -4.822 82.053 17.123 1.00 40.17 O +ATOM 1334 CB PRO A 177 -6.565 82.785 19.959 1.00 37.63 C +ATOM 1335 CG PRO A 177 -7.327 83.894 20.564 1.00 38.45 C +ATOM 1336 CD PRO A 177 -8.275 84.277 19.447 1.00 40.77 C +ATOM 1337 N THR A 178 -6.994 81.478 17.209 1.00 38.81 N +ATOM 1338 CA THR A 178 -6.813 80.367 16.287 1.00 38.81 C +ATOM 1339 C THR A 178 -7.237 80.661 14.858 1.00 40.12 C +ATOM 1340 O THR A 178 -7.344 79.741 14.038 1.00 40.84 O +ATOM 1341 CB THR A 178 -7.542 79.115 16.784 1.00 37.89 C +ATOM 1342 OG1 THR A 178 -8.959 79.311 16.696 1.00 40.18 O +ATOM 1343 CG2 THR A 178 -7.175 78.848 18.222 1.00 35.64 C +ATOM 1344 N LYS A 179 -7.518 81.930 14.575 1.00 40.65 N +ATOM 1345 CA LYS A 179 -7.923 82.365 13.236 1.00 42.38 C +ATOM 1346 C LYS A 179 -9.009 81.504 12.583 1.00 41.99 C +ATOM 1347 O LYS A 179 -9.007 81.336 11.364 1.00 44.33 O +ATOM 1348 CB LYS A 179 -6.690 82.416 12.322 1.00 42.65 C +ATOM 1349 CG LYS A 179 -5.579 83.306 12.852 1.00 46.47 C +ATOM 1350 CD LYS A 179 -4.329 83.177 12.009 1.00 52.36 C +ATOM 1351 CE LYS A 179 -3.209 84.069 12.548 1.00 54.87 C +ATOM 1352 NZ LYS A 179 -1.944 83.953 11.743 1.00 58.13 N +ATOM 1353 N SER A 180 -9.934 80.964 13.376 1.00 40.97 N +ATOM 1354 CA SER A 180 -10.982 80.119 12.811 1.00 41.22 C +ATOM 1355 C SER A 180 -12.372 80.737 12.812 1.00 40.27 C +ATOM 1356 O SER A 180 -12.785 81.405 13.767 1.00 41.32 O +ATOM 1357 CB SER A 180 -11.026 78.755 13.502 1.00 42.85 C +ATOM 1358 OG SER A 180 -11.730 78.828 14.729 1.00 46.89 O +ATOM 1359 N LEU A 181 -13.096 80.467 11.732 1.00 38.44 N +ATOM 1360 CA LEU A 181 -14.446 80.965 11.542 1.00 35.78 C +ATOM 1361 C LEU A 181 -15.410 79.783 11.527 1.00 34.08 C +ATOM 1362 O LEU A 181 -15.214 78.820 10.788 1.00 34.24 O +ATOM 1363 CB LEU A 181 -14.528 81.721 10.218 1.00 33.37 C +ATOM 1364 CG LEU A 181 -15.779 82.568 10.017 1.00 32.36 C +ATOM 1365 CD1 LEU A 181 -15.935 83.534 11.185 1.00 33.30 C +ATOM 1366 CD2 LEU A 181 -15.654 83.339 8.732 1.00 30.28 C +ATOM 1367 N THR A 182 -16.445 79.851 12.351 1.00 32.60 N +ATOM 1368 CA THR A 182 -17.404 78.762 12.398 1.00 32.69 C +ATOM 1369 C THR A 182 -18.844 79.218 12.202 1.00 33.17 C +ATOM 1370 O THR A 182 -19.360 80.059 12.949 1.00 32.77 O +ATOM 1371 CB THR A 182 -17.295 77.980 13.715 1.00 31.66 C +ATOM 1372 OG1 THR A 182 -15.931 77.621 13.934 1.00 32.99 O +ATOM 1373 CG2 THR A 182 -18.130 76.709 13.660 1.00 28.24 C +ATOM 1374 N VAL A 183 -19.461 78.677 11.156 1.00 31.98 N +ATOM 1375 CA VAL A 183 -20.839 78.963 10.835 1.00 32.82 C +ATOM 1376 C VAL A 183 -21.650 77.804 11.385 1.00 33.94 C +ATOM 1377 O VAL A 183 -21.398 76.640 11.068 1.00 31.79 O +ATOM 1378 CB VAL A 183 -21.060 79.075 9.335 1.00 32.53 C +ATOM 1379 CG1 VAL A 183 -22.525 79.365 9.046 1.00 33.07 C +ATOM 1380 CG2 VAL A 183 -20.180 80.169 8.773 1.00 32.20 C +ATOM 1381 N CYS A 184 -22.648 78.147 12.184 1.00 36.13 N +ATOM 1382 CA CYS A 184 -23.486 77.167 12.824 1.00 36.81 C +ATOM 1383 C CYS A 184 -24.960 77.406 12.526 1.00 36.71 C +ATOM 1384 O CYS A 184 -25.616 78.197 13.208 1.00 39.98 O +ATOM 1385 CB CYS A 184 -23.246 77.279 14.308 1.00 39.99 C +ATOM 1386 SG CYS A 184 -23.593 75.730 15.150 1.00 51.92 S +ATOM 1387 N LEU A 185 -25.495 76.696 11.538 1.00 35.09 N +ATOM 1388 CA LEU A 185 -26.896 76.864 11.145 1.00 33.70 C +ATOM 1389 C LEU A 185 -27.798 75.717 11.571 1.00 33.67 C +ATOM 1390 O LEU A 185 -27.410 74.559 11.513 1.00 32.77 O +ATOM 1391 CB LEU A 185 -26.992 77.061 9.625 1.00 34.10 C +ATOM 1392 CG LEU A 185 -28.337 77.421 8.979 1.00 32.87 C +ATOM 1393 CD1 LEU A 185 -28.095 78.180 7.707 1.00 32.02 C +ATOM 1394 CD2 LEU A 185 -29.182 76.184 8.718 1.00 33.93 C +ATOM 1395 N SER A 186 -29.025 76.045 11.957 1.00 34.86 N +ATOM 1396 CA SER A 186 -29.989 75.030 12.372 1.00 37.90 C +ATOM 1397 C SER A 186 -31.441 75.485 12.206 1.00 39.48 C +ATOM 1398 O SER A 186 -31.763 76.659 12.387 1.00 39.55 O +ATOM 1399 CB SER A 186 -29.755 74.638 13.832 1.00 36.61 C +ATOM 1400 OG SER A 186 -29.968 75.739 14.695 1.00 36.10 O +ATOM 1401 N TYR A 187 -32.301 74.544 11.833 1.00 41.16 N +ATOM 1402 CA TYR A 187 -33.724 74.805 11.665 1.00 41.28 C +ATOM 1403 C TYR A 187 -34.433 74.179 12.857 1.00 42.52 C +ATOM 1404 O TYR A 187 -34.557 72.963 12.951 1.00 42.68 O +ATOM 1405 CB TYR A 187 -34.241 74.167 10.374 1.00 39.26 C +ATOM 1406 CG TYR A 187 -33.837 74.900 9.122 1.00 36.73 C +ATOM 1407 CD1 TYR A 187 -34.463 76.095 8.766 1.00 35.09 C +ATOM 1408 CD2 TYR A 187 -32.836 74.400 8.286 1.00 34.23 C +ATOM 1409 CE1 TYR A 187 -34.111 76.774 7.614 1.00 34.11 C +ATOM 1410 CE2 TYR A 187 -32.473 75.075 7.126 1.00 32.32 C +ATOM 1411 CZ TYR A 187 -33.120 76.265 6.797 1.00 34.28 C +ATOM 1412 OH TYR A 187 -32.796 76.959 5.653 1.00 35.24 O +ATOM 1413 N PRO A 188 -34.907 75.010 13.792 1.00 44.27 N +ATOM 1414 CA PRO A 188 -35.584 74.491 14.983 1.00 45.20 C +ATOM 1415 C PRO A 188 -36.830 73.652 14.691 1.00 46.06 C +ATOM 1416 O PRO A 188 -37.151 72.719 15.438 1.00 47.07 O +ATOM 1417 CB PRO A 188 -35.907 75.770 15.767 1.00 43.89 C +ATOM 1418 CG PRO A 188 -36.022 76.811 14.705 1.00 44.06 C +ATOM 1419 CD PRO A 188 -34.881 76.478 13.790 1.00 43.94 C +ATOM 1420 N SER A 189 -37.489 73.944 13.575 1.00 46.81 N +ATOM 1421 CA SER A 189 -38.699 73.234 13.196 1.00 48.90 C +ATOM 1422 C SER A 189 -38.529 71.724 13.021 1.00 49.74 C +ATOM 1423 O SER A 189 -39.344 70.951 13.520 1.00 51.59 O +ATOM 1424 CB SER A 189 -39.290 73.835 11.924 1.00 49.73 C +ATOM 1425 OG SER A 189 -38.489 73.529 10.796 1.00 53.36 O +ATOM 1426 N ASP A 190 -37.475 71.303 12.323 1.00 50.75 N +ATOM 1427 CA ASP A 190 -37.247 69.874 12.087 1.00 50.65 C +ATOM 1428 C ASP A 190 -35.864 69.331 12.453 1.00 49.72 C +ATOM 1429 O ASP A 190 -35.454 68.286 11.948 1.00 51.53 O +ATOM 1430 CB ASP A 190 -37.582 69.508 10.633 1.00 52.57 C +ATOM 1431 CG ASP A 190 -36.550 70.008 9.637 1.00 54.21 C +ATOM 1432 OD1 ASP A 190 -35.782 70.941 9.954 1.00 57.83 O +ATOM 1433 OD2 ASP A 190 -36.506 69.455 8.523 1.00 54.34 O +ATOM 1434 N GLY A 191 -35.143 70.052 13.304 1.00 48.95 N +ATOM 1435 CA GLY A 191 -33.828 69.610 13.737 1.00 47.20 C +ATOM 1436 C GLY A 191 -32.709 69.598 12.708 1.00 46.72 C +ATOM 1437 O GLY A 191 -31.567 69.267 13.049 1.00 50.12 O +ATOM 1438 N THR A 192 -33.019 69.940 11.460 1.00 43.73 N +ATOM 1439 CA THR A 192 -32.017 69.977 10.394 1.00 41.22 C +ATOM 1440 C THR A 192 -30.946 71.028 10.694 1.00 40.68 C +ATOM 1441 O THR A 192 -31.264 72.193 10.936 1.00 41.38 O +ATOM 1442 CB THR A 192 -32.665 70.326 9.039 1.00 39.82 C +ATOM 1443 OG1 THR A 192 -33.663 69.351 8.726 1.00 41.82 O +ATOM 1444 CG2 THR A 192 -31.628 70.349 7.937 1.00 38.09 C +ATOM 1445 N SER A 193 -29.678 70.628 10.653 1.00 39.12 N +ATOM 1446 CA SER A 193 -28.588 71.564 10.919 1.00 36.99 C +ATOM 1447 C SER A 193 -27.329 71.315 10.086 1.00 35.75 C +ATOM 1448 O SER A 193 -27.046 70.189 9.695 1.00 35.59 O +ATOM 1449 CB SER A 193 -28.256 71.583 12.416 1.00 37.33 C +ATOM 1450 OG SER A 193 -28.014 70.287 12.926 1.00 34.18 O +ATOM 1451 N ASN A 194 -26.598 72.390 9.793 1.00 36.46 N +ATOM 1452 CA ASN A 194 -25.360 72.338 9.000 1.00 37.44 C +ATOM 1453 C ASN A 194 -24.252 73.137 9.690 1.00 36.08 C +ATOM 1454 O ASN A 194 -24.526 74.072 10.446 1.00 35.73 O +ATOM 1455 CB ASN A 194 -25.588 72.924 7.595 1.00 37.54 C +ATOM 1456 CG ASN A 194 -26.666 72.199 6.825 1.00 36.42 C +ATOM 1457 OD1 ASN A 194 -26.688 70.970 6.773 1.00 38.42 O +ATOM 1458 ND2 ASN A 194 -27.571 72.958 6.222 1.00 35.02 N +ATOM 1459 N ILE A 195 -23.002 72.804 9.394 1.00 35.05 N +ATOM 1460 CA ILE A 195 -21.890 73.514 10.015 1.00 36.11 C +ATOM 1461 C ILE A 195 -20.644 73.549 9.143 1.00 36.97 C +ATOM 1462 O ILE A 195 -20.365 72.607 8.388 1.00 37.86 O +ATOM 1463 CB ILE A 195 -21.512 72.902 11.394 1.00 35.32 C +ATOM 1464 CG1 ILE A 195 -20.508 73.811 12.118 1.00 33.60 C +ATOM 1465 CG2 ILE A 195 -20.937 71.494 11.210 1.00 32.44 C +ATOM 1466 CD1 ILE A 195 -20.204 73.400 13.534 1.00 31.81 C +ATOM 1467 N ILE A 196 -19.881 74.629 9.289 1.00 36.34 N +ATOM 1468 CA ILE A 196 -18.660 74.811 8.531 1.00 35.46 C +ATOM 1469 C ILE A 196 -17.644 75.664 9.294 1.00 36.39 C +ATOM 1470 O ILE A 196 -18.005 76.610 9.999 1.00 37.37 O +ATOM 1471 CB ILE A 196 -18.966 75.421 7.147 1.00 35.52 C +ATOM 1472 CG1 ILE A 196 -17.691 75.528 6.329 1.00 39.55 C +ATOM 1473 CG2 ILE A 196 -19.623 76.777 7.281 1.00 37.83 C +ATOM 1474 CD1 ILE A 196 -16.976 74.201 6.163 1.00 45.62 C +ATOM 1475 N THR A 197 -16.375 75.278 9.197 1.00 36.63 N +ATOM 1476 CA THR A 197 -15.294 76.003 9.857 1.00 35.41 C +ATOM 1477 C THR A 197 -14.187 76.223 8.860 1.00 35.50 C +ATOM 1478 O THR A 197 -13.949 75.363 8.014 1.00 37.43 O +ATOM 1479 CB THR A 197 -14.693 75.199 10.992 1.00 35.08 C +ATOM 1480 OG1 THR A 197 -15.717 74.865 11.931 1.00 37.40 O +ATOM 1481 CG2 THR A 197 -13.599 76.006 11.682 1.00 35.17 C +ATOM 1482 N ALA A 198 -13.490 77.349 8.981 1.00 35.01 N +ATOM 1483 CA ALA A 198 -12.393 77.661 8.074 1.00 37.47 C +ATOM 1484 C ALA A 198 -11.425 78.628 8.734 1.00 39.75 C +ATOM 1485 O ALA A 198 -11.820 79.388 9.623 1.00 40.04 O +ATOM 1486 CB ALA A 198 -12.933 78.255 6.787 1.00 35.46 C +ATOM 1487 N SER A 199 -10.157 78.579 8.321 1.00 40.79 N +ATOM 1488 CA SER A 199 -9.138 79.467 8.874 1.00 42.61 C +ATOM 1489 C SER A 199 -9.004 80.723 8.045 1.00 43.24 C +ATOM 1490 O SER A 199 -8.904 80.658 6.820 1.00 47.17 O +ATOM 1491 CB SER A 199 -7.797 78.760 8.981 1.00 43.20 C +ATOM 1492 OG SER A 199 -7.863 77.776 10.002 1.00 49.18 O +ATOM 1493 N VAL A 200 -9.038 81.870 8.714 1.00 41.44 N +ATOM 1494 CA VAL A 200 -8.935 83.150 8.040 1.00 42.12 C +ATOM 1495 C VAL A 200 -8.245 84.156 8.939 1.00 44.22 C +ATOM 1496 O VAL A 200 -8.537 84.223 10.132 1.00 44.97 O +ATOM 1497 CB VAL A 200 -10.319 83.738 7.744 1.00 42.92 C +ATOM 1498 CG1 VAL A 200 -10.184 84.936 6.839 1.00 43.38 C +ATOM 1499 CG2 VAL A 200 -11.235 82.703 7.137 1.00 42.58 C +ATOM 1500 N ASP A 201 -7.338 84.941 8.371 1.00 45.81 N +ATOM 1501 CA ASP A 201 -6.660 85.969 9.150 1.00 47.12 C +ATOM 1502 C ASP A 201 -7.202 87.328 8.745 1.00 46.97 C +ATOM 1503 O ASP A 201 -6.798 87.895 7.720 1.00 47.79 O +ATOM 1504 CB ASP A 201 -5.146 85.942 8.941 1.00 51.17 C +ATOM 1505 CG ASP A 201 -4.402 86.928 9.866 1.00 54.65 C +ATOM 1506 OD1 ASP A 201 -5.052 87.732 10.582 1.00 55.22 O +ATOM 1507 OD2 ASP A 201 -3.153 86.892 9.883 1.00 57.81 O +ATOM 1508 N LEU A 202 -8.090 87.861 9.574 1.00 45.62 N +ATOM 1509 CA LEU A 202 -8.699 89.155 9.301 1.00 45.55 C +ATOM 1510 C LEU A 202 -7.674 90.244 9.021 1.00 44.80 C +ATOM 1511 O LEU A 202 -7.839 91.040 8.093 1.00 44.67 O +ATOM 1512 CB LEU A 202 -9.558 89.588 10.481 1.00 45.97 C +ATOM 1513 CG LEU A 202 -10.637 88.634 10.972 1.00 46.40 C +ATOM 1514 CD1 LEU A 202 -11.382 89.299 12.123 1.00 45.88 C +ATOM 1515 CD2 LEU A 202 -11.593 88.295 9.835 1.00 46.62 C +ATOM 1516 N LYS A 203 -6.621 90.272 9.832 1.00 45.68 N +ATOM 1517 CA LYS A 203 -5.568 91.273 9.703 1.00 46.78 C +ATOM 1518 C LYS A 203 -5.003 91.299 8.279 1.00 47.20 C +ATOM 1519 O LYS A 203 -4.766 92.373 7.701 1.00 45.32 O +ATOM 1520 CB LYS A 203 -4.450 90.983 10.705 1.00 48.04 C +ATOM 1521 CG LYS A 203 -3.449 92.122 10.835 1.00 52.56 C +ATOM 1522 CD LYS A 203 -2.156 91.689 11.550 1.00 54.66 C +ATOM 1523 CE LYS A 203 -2.392 91.338 13.018 1.00 56.28 C +ATOM 1524 NZ LYS A 203 -1.137 90.978 13.738 1.00 55.72 N +ATOM 1525 N ALA A 204 -4.854 90.107 7.702 1.00 46.53 N +ATOM 1526 CA ALA A 204 -4.315 89.957 6.357 1.00 45.59 C +ATOM 1527 C ALA A 204 -5.307 90.261 5.238 1.00 46.51 C +ATOM 1528 O ALA A 204 -4.922 90.282 4.065 1.00 47.75 O +ATOM 1529 CB ALA A 204 -3.753 88.552 6.181 1.00 43.33 C +ATOM 1530 N ILE A 205 -6.569 90.526 5.578 1.00 46.62 N +ATOM 1531 CA ILE A 205 -7.573 90.783 4.542 1.00 45.48 C +ATOM 1532 C ILE A 205 -8.359 92.100 4.617 1.00 45.23 C +ATOM 1533 O ILE A 205 -8.517 92.801 3.606 1.00 45.00 O +ATOM 1534 CB ILE A 205 -8.538 89.582 4.434 1.00 43.34 C +ATOM 1535 CG1 ILE A 205 -7.753 88.349 3.978 1.00 44.03 C +ATOM 1536 CG2 ILE A 205 -9.658 89.877 3.444 1.00 41.05 C +ATOM 1537 CD1 ILE A 205 -8.221 87.049 4.589 1.00 45.69 C +ATOM 1538 N LEU A 206 -8.862 92.430 5.799 1.00 43.15 N +ATOM 1539 CA LEU A 206 -9.641 93.649 5.963 1.00 41.42 C +ATOM 1540 C LEU A 206 -8.792 94.751 6.578 1.00 40.74 C +ATOM 1541 O LEU A 206 -7.735 94.486 7.154 1.00 40.75 O +ATOM 1542 CB LEU A 206 -10.846 93.372 6.869 1.00 41.52 C +ATOM 1543 CG LEU A 206 -11.715 92.152 6.549 1.00 41.01 C +ATOM 1544 CD1 LEU A 206 -12.622 91.869 7.722 1.00 42.88 C +ATOM 1545 CD2 LEU A 206 -12.522 92.367 5.288 1.00 40.65 C +ATOM 1546 N PRO A 207 -9.198 96.014 6.381 1.00 40.18 N +ATOM 1547 CA PRO A 207 -8.494 97.138 7.003 1.00 40.19 C +ATOM 1548 C PRO A 207 -8.929 97.201 8.476 1.00 41.71 C +ATOM 1549 O PRO A 207 -9.858 96.498 8.884 1.00 41.11 O +ATOM 1550 CB PRO A 207 -9.005 98.337 6.206 1.00 37.93 C +ATOM 1551 CG PRO A 207 -10.404 97.941 5.874 1.00 38.35 C +ATOM 1552 CD PRO A 207 -10.246 96.493 5.460 1.00 39.43 C +ATOM 1553 N GLU A 208 -8.270 98.035 9.272 1.00 42.61 N +ATOM 1554 CA GLU A 208 -8.611 98.148 10.689 1.00 43.00 C +ATOM 1555 C GLU A 208 -10.097 98.394 10.961 1.00 41.62 C +ATOM 1556 O GLU A 208 -10.693 97.753 11.829 1.00 41.12 O +ATOM 1557 CB GLU A 208 -7.808 99.264 11.332 1.00 47.38 C +ATOM 1558 CG GLU A 208 -6.315 99.055 11.326 1.00 53.34 C +ATOM 1559 CD GLU A 208 -5.591 100.257 11.910 1.00 58.78 C +ATOM 1560 OE1 GLU A 208 -5.670 100.473 13.150 1.00 59.07 O +ATOM 1561 OE2 GLU A 208 -4.963 101.000 11.116 1.00 60.98 O +ATOM 1562 N TRP A 209 -10.685 99.331 10.222 1.00 39.61 N +ATOM 1563 CA TRP A 209 -12.089 99.670 10.395 1.00 38.23 C +ATOM 1564 C TRP A 209 -13.009 99.101 9.329 1.00 38.07 C +ATOM 1565 O TRP A 209 -12.939 99.483 8.163 1.00 39.90 O +ATOM 1566 CB TRP A 209 -12.249 101.177 10.457 1.00 37.93 C +ATOM 1567 CG TRP A 209 -11.587 101.752 11.639 1.00 40.88 C +ATOM 1568 CD1 TRP A 209 -10.310 102.209 11.717 1.00 40.88 C +ATOM 1569 CD2 TRP A 209 -12.150 101.906 12.942 1.00 44.26 C +ATOM 1570 NE1 TRP A 209 -10.034 102.641 12.993 1.00 44.29 N +ATOM 1571 CE2 TRP A 209 -11.152 102.467 13.769 1.00 45.88 C +ATOM 1572 CE3 TRP A 209 -13.412 101.628 13.497 1.00 43.40 C +ATOM 1573 CZ2 TRP A 209 -11.367 102.753 15.123 1.00 46.63 C +ATOM 1574 CZ3 TRP A 209 -13.627 101.912 14.839 1.00 43.31 C +ATOM 1575 CH2 TRP A 209 -12.610 102.471 15.638 1.00 45.55 C +ATOM 1576 N VAL A 210 -13.892 98.204 9.748 1.00 36.54 N +ATOM 1577 CA VAL A 210 -14.846 97.590 8.848 1.00 34.27 C +ATOM 1578 C VAL A 210 -16.289 97.978 9.187 1.00 36.04 C +ATOM 1579 O VAL A 210 -16.564 98.711 10.141 1.00 35.69 O +ATOM 1580 CB VAL A 210 -14.731 96.060 8.889 1.00 32.80 C +ATOM 1581 CG1 VAL A 210 -13.390 95.626 8.361 1.00 34.55 C +ATOM 1582 CG2 VAL A 210 -14.926 95.554 10.304 1.00 31.30 C +ATOM 1583 N SER A 211 -17.201 97.504 8.354 1.00 36.17 N +ATOM 1584 CA SER A 211 -18.624 97.727 8.526 1.00 37.01 C +ATOM 1585 C SER A 211 -19.229 96.355 8.340 1.00 36.62 C +ATOM 1586 O SER A 211 -18.826 95.620 7.435 1.00 35.78 O +ATOM 1587 CB SER A 211 -19.164 98.675 7.451 1.00 39.53 C +ATOM 1588 OG SER A 211 -19.393 99.979 7.975 1.00 46.58 O +ATOM 1589 N VAL A 212 -20.142 95.975 9.231 1.00 37.12 N +ATOM 1590 CA VAL A 212 -20.785 94.665 9.125 1.00 36.03 C +ATOM 1591 C VAL A 212 -22.254 94.775 8.758 1.00 36.16 C +ATOM 1592 O VAL A 212 -22.907 95.790 9.025 1.00 35.65 O +ATOM 1593 CB VAL A 212 -20.670 93.833 10.430 1.00 35.31 C +ATOM 1594 CG1 VAL A 212 -19.228 93.488 10.712 1.00 34.66 C +ATOM 1595 CG2 VAL A 212 -21.268 94.587 11.597 1.00 34.51 C +ATOM 1596 N GLY A 213 -22.768 93.716 8.148 1.00 35.97 N +ATOM 1597 CA GLY A 213 -24.161 93.705 7.764 1.00 35.04 C +ATOM 1598 C GLY A 213 -24.514 92.513 6.914 1.00 35.19 C +ATOM 1599 O GLY A 213 -23.770 91.528 6.842 1.00 35.86 O +ATOM 1600 N PHE A 214 -25.672 92.609 6.269 1.00 35.53 N +ATOM 1601 CA PHE A 214 -26.166 91.557 5.397 1.00 35.96 C +ATOM 1602 C PHE A 214 -26.383 92.085 3.986 1.00 36.72 C +ATOM 1603 O PHE A 214 -26.436 93.294 3.754 1.00 36.91 O +ATOM 1604 CB PHE A 214 -27.500 91.026 5.911 1.00 35.67 C +ATOM 1605 CG PHE A 214 -27.474 90.574 7.341 1.00 35.84 C +ATOM 1606 CD1 PHE A 214 -27.120 89.269 7.671 1.00 33.71 C +ATOM 1607 CD2 PHE A 214 -27.832 91.447 8.356 1.00 34.90 C +ATOM 1608 CE1 PHE A 214 -27.131 88.844 8.978 1.00 31.53 C +ATOM 1609 CE2 PHE A 214 -27.844 91.027 9.665 1.00 35.01 C +ATOM 1610 CZ PHE A 214 -27.492 89.721 9.978 1.00 34.38 C +ATOM 1611 N SER A 215 -26.502 91.157 3.046 1.00 38.64 N +ATOM 1612 CA SER A 215 -26.753 91.480 1.649 1.00 39.81 C +ATOM 1613 C SER A 215 -27.342 90.264 0.935 1.00 41.24 C +ATOM 1614 O SER A 215 -27.290 89.134 1.431 1.00 41.47 O +ATOM 1615 CB SER A 215 -25.478 91.951 0.946 1.00 37.73 C +ATOM 1616 OG SER A 215 -24.551 90.895 0.777 1.00 37.40 O +ATOM 1617 N GLY A 216 -27.937 90.512 -0.221 1.00 44.07 N +ATOM 1618 CA GLY A 216 -28.528 89.435 -0.983 1.00 46.52 C +ATOM 1619 C GLY A 216 -29.023 89.943 -2.315 1.00 47.59 C +ATOM 1620 O GLY A 216 -28.912 91.135 -2.619 1.00 46.60 O +ATOM 1621 N GLY A 217 -29.583 89.036 -3.107 1.00 48.63 N +ATOM 1622 CA GLY A 217 -30.094 89.411 -4.408 1.00 48.92 C +ATOM 1623 C GLY A 217 -31.053 88.406 -5.005 1.00 50.41 C +ATOM 1624 O GLY A 217 -31.265 87.317 -4.461 1.00 49.44 O +ATOM 1625 N VAL A 218 -31.660 88.814 -6.118 1.00 53.22 N +ATOM 1626 CA VAL A 218 -32.616 88.014 -6.890 1.00 54.61 C +ATOM 1627 C VAL A 218 -32.359 88.422 -8.343 1.00 56.44 C +ATOM 1628 O VAL A 218 -32.774 89.501 -8.774 1.00 57.50 O +ATOM 1629 CB VAL A 218 -34.086 88.348 -6.503 1.00 52.61 C +ATOM 1630 CG1 VAL A 218 -35.047 87.604 -7.397 1.00 51.91 C +ATOM 1631 CG2 VAL A 218 -34.355 87.981 -5.058 1.00 51.68 C +ATOM 1632 N GLY A 219 -31.640 87.577 -9.080 1.00 58.64 N +ATOM 1633 CA GLY A 219 -31.297 87.888 -10.463 1.00 61.69 C +ATOM 1634 C GLY A 219 -32.303 87.496 -11.523 1.00 61.94 C +ATOM 1635 O GLY A 219 -32.058 87.684 -12.725 1.00 63.85 O +ATOM 1636 N ASN A 220 -33.446 86.985 -11.075 1.00 61.69 N +ATOM 1637 CA ASN A 220 -34.507 86.539 -11.969 1.00 61.18 C +ATOM 1638 C ASN A 220 -35.843 86.476 -11.233 1.00 56.87 C +ATOM 1639 O ASN A 220 -36.099 85.551 -10.463 1.00 55.21 O +ATOM 1640 CB ASN A 220 -34.145 85.160 -12.555 1.00 65.38 C +ATOM 1641 CG ASN A 220 -35.312 84.490 -13.268 1.00 67.57 C +ATOM 1642 OD1 ASN A 220 -35.543 83.292 -13.099 1.00 69.17 O +ATOM 1643 ND2 ASN A 220 -36.051 85.257 -14.063 1.00 69.66 N +ATOM 1644 N ALA A 221 -36.705 87.443 -11.536 1.00 52.43 N +ATOM 1645 CA ALA A 221 -38.026 87.555 -10.929 1.00 49.72 C +ATOM 1646 C ALA A 221 -38.880 86.302 -11.047 1.00 50.11 C +ATOM 1647 O ALA A 221 -39.843 86.136 -10.302 1.00 48.65 O +ATOM 1648 CB ALA A 221 -38.761 88.729 -11.532 1.00 47.81 C +ATOM 1649 N ALA A 222 -38.522 85.426 -11.981 1.00 53.16 N +ATOM 1650 CA ALA A 222 -39.261 84.194 -12.214 1.00 55.37 C +ATOM 1651 C ALA A 222 -39.082 83.215 -11.062 1.00 57.33 C +ATOM 1652 O ALA A 222 -40.044 82.585 -10.618 1.00 57.56 O +ATOM 1653 CB ALA A 222 -38.821 83.560 -13.525 1.00 55.70 C +ATOM 1654 N GLU A 223 -37.847 83.093 -10.584 1.00 58.14 N +ATOM 1655 CA GLU A 223 -37.537 82.197 -9.478 1.00 60.13 C +ATOM 1656 C GLU A 223 -37.345 82.955 -8.156 1.00 58.28 C +ATOM 1657 O GLU A 223 -36.351 82.777 -7.453 1.00 57.45 O +ATOM 1658 CB GLU A 223 -36.307 81.357 -9.811 1.00 64.81 C +ATOM 1659 CG GLU A 223 -36.531 80.331 -10.914 1.00 73.07 C +ATOM 1660 CD GLU A 223 -35.339 79.397 -11.088 1.00 79.48 C +ATOM 1661 OE1 GLU A 223 -34.319 79.842 -11.672 1.00 81.74 O +ATOM 1662 OE2 GLU A 223 -35.421 78.224 -10.634 1.00 82.20 O +ATOM 1663 N PHE A 224 -38.351 83.754 -7.811 1.00 55.94 N +ATOM 1664 CA PHE A 224 -38.374 84.581 -6.606 1.00 52.72 C +ATOM 1665 C PHE A 224 -38.392 83.864 -5.251 1.00 51.83 C +ATOM 1666 O PHE A 224 -39.034 82.824 -5.083 1.00 53.78 O +ATOM 1667 CB PHE A 224 -39.580 85.526 -6.682 1.00 51.49 C +ATOM 1668 CG PHE A 224 -39.782 86.374 -5.452 1.00 49.48 C +ATOM 1669 CD1 PHE A 224 -40.550 85.905 -4.396 1.00 50.04 C +ATOM 1670 CD2 PHE A 224 -39.205 87.643 -5.354 1.00 48.15 C +ATOM 1671 CE1 PHE A 224 -40.744 86.684 -3.264 1.00 51.35 C +ATOM 1672 CE2 PHE A 224 -39.394 88.432 -4.224 1.00 48.06 C +ATOM 1673 CZ PHE A 224 -40.160 87.952 -3.178 1.00 50.43 C +ATOM 1674 N GLU A 225 -37.731 84.493 -4.279 1.00 49.27 N +ATOM 1675 CA GLU A 225 -37.658 84.030 -2.900 1.00 46.21 C +ATOM 1676 C GLU A 225 -37.297 85.231 -2.034 1.00 45.31 C +ATOM 1677 O GLU A 225 -36.682 86.189 -2.507 1.00 43.90 O +ATOM 1678 CB GLU A 225 -36.602 82.939 -2.725 1.00 46.98 C +ATOM 1679 CG GLU A 225 -35.183 83.452 -2.699 1.00 45.49 C +ATOM 1680 CD GLU A 225 -34.139 82.356 -2.648 1.00 46.34 C +ATOM 1681 OE1 GLU A 225 -34.474 81.148 -2.725 1.00 45.10 O +ATOM 1682 OE2 GLU A 225 -32.955 82.721 -2.535 1.00 48.25 O +ATOM 1683 N THR A 226 -37.710 85.198 -0.773 1.00 45.56 N +ATOM 1684 CA THR A 226 -37.397 86.296 0.132 1.00 44.66 C +ATOM 1685 C THR A 226 -36.043 86.080 0.783 1.00 45.76 C +ATOM 1686 O THR A 226 -35.461 84.992 0.695 1.00 45.42 O +ATOM 1687 CB THR A 226 -38.454 86.464 1.233 1.00 42.96 C +ATOM 1688 OG1 THR A 226 -38.679 85.211 1.894 1.00 38.61 O +ATOM 1689 CG2 THR A 226 -39.747 86.994 0.642 1.00 42.39 C +ATOM 1690 N HIS A 227 -35.518 87.150 1.372 1.00 46.10 N +ATOM 1691 CA HIS A 227 -34.233 87.122 2.072 1.00 44.58 C +ATOM 1692 C HIS A 227 -34.453 88.023 3.268 1.00 44.63 C +ATOM 1693 O HIS A 227 -33.982 89.168 3.316 1.00 44.10 O +ATOM 1694 CB HIS A 227 -33.126 87.632 1.156 1.00 42.83 C +ATOM 1695 CG HIS A 227 -32.936 86.788 -0.066 1.00 42.24 C +ATOM 1696 ND1 HIS A 227 -32.232 85.610 -0.055 1.00 43.63 N +ATOM 1697 CD2 HIS A 227 -33.411 86.930 -1.332 1.00 40.49 C +ATOM 1698 CE1 HIS A 227 -32.273 85.053 -1.251 1.00 40.05 C +ATOM 1699 NE2 HIS A 227 -32.984 85.836 -2.042 1.00 41.46 N +ATOM 1700 N ASP A 228 -35.261 87.493 4.190 1.00 43.43 N +ATOM 1701 CA ASP A 228 -35.676 88.190 5.397 1.00 41.03 C +ATOM 1702 C ASP A 228 -34.921 87.778 6.637 1.00 37.86 C +ATOM 1703 O ASP A 228 -34.905 86.604 7.009 1.00 36.41 O +ATOM 1704 CB ASP A 228 -37.175 87.955 5.652 1.00 43.32 C +ATOM 1705 CG ASP A 228 -38.069 88.416 4.502 1.00 45.06 C +ATOM 1706 OD1 ASP A 228 -37.590 89.028 3.516 1.00 48.86 O +ATOM 1707 OD2 ASP A 228 -39.281 88.156 4.594 1.00 46.46 O +ATOM 1708 N VAL A 229 -34.286 88.755 7.269 1.00 35.25 N +ATOM 1709 CA VAL A 229 -33.576 88.514 8.513 1.00 33.81 C +ATOM 1710 C VAL A 229 -34.487 89.089 9.615 1.00 32.55 C +ATOM 1711 O VAL A 229 -34.974 90.223 9.523 1.00 26.83 O +ATOM 1712 CB VAL A 229 -32.136 89.096 8.494 1.00 31.52 C +ATOM 1713 CG1 VAL A 229 -32.023 90.153 7.454 1.00 36.06 C +ATOM 1714 CG2 VAL A 229 -31.743 89.640 9.850 1.00 32.52 C +ATOM 1715 N LEU A 230 -34.780 88.235 10.595 1.00 33.21 N +ATOM 1716 CA LEU A 230 -35.675 88.528 11.715 1.00 33.91 C +ATOM 1717 C LEU A 230 -35.091 89.163 12.967 1.00 34.70 C +ATOM 1718 O LEU A 230 -35.766 89.960 13.627 1.00 34.76 O +ATOM 1719 CB LEU A 230 -36.378 87.244 12.138 1.00 34.69 C +ATOM 1720 CG LEU A 230 -37.562 86.724 11.326 1.00 35.03 C +ATOM 1721 CD1 LEU A 230 -37.316 86.810 9.833 1.00 36.53 C +ATOM 1722 CD2 LEU A 230 -37.817 85.298 11.755 1.00 34.90 C +ATOM 1723 N SER A 231 -33.880 88.750 13.333 1.00 35.91 N +ATOM 1724 CA SER A 231 -33.202 89.256 14.526 1.00 35.13 C +ATOM 1725 C SER A 231 -31.685 89.233 14.324 1.00 35.29 C +ATOM 1726 O SER A 231 -31.166 88.463 13.500 1.00 34.85 O +ATOM 1727 CB SER A 231 -33.586 88.410 15.748 1.00 35.51 C +ATOM 1728 OG SER A 231 -33.202 87.050 15.572 1.00 39.14 O +ATOM 1729 N TRP A 232 -30.977 90.050 15.104 1.00 34.12 N +ATOM 1730 CA TRP A 232 -29.530 90.138 14.981 1.00 31.81 C +ATOM 1731 C TRP A 232 -28.792 90.551 16.245 1.00 31.24 C +ATOM 1732 O TRP A 232 -29.024 91.616 16.808 1.00 30.42 O +ATOM 1733 CB TRP A 232 -29.194 91.111 13.868 1.00 31.68 C +ATOM 1734 CG TRP A 232 -27.767 91.182 13.489 1.00 33.32 C +ATOM 1735 CD1 TRP A 232 -26.829 90.191 13.587 1.00 31.66 C +ATOM 1736 CD2 TRP A 232 -27.123 92.288 12.858 1.00 35.82 C +ATOM 1737 NE1 TRP A 232 -25.641 90.615 13.038 1.00 31.56 N +ATOM 1738 CE2 TRP A 232 -25.793 91.896 12.578 1.00 34.27 C +ATOM 1739 CE3 TRP A 232 -27.548 93.578 12.482 1.00 35.72 C +ATOM 1740 CZ2 TRP A 232 -24.884 92.747 11.944 1.00 34.95 C +ATOM 1741 CZ3 TRP A 232 -26.649 94.421 11.854 1.00 34.13 C +ATOM 1742 CH2 TRP A 232 -25.328 94.001 11.588 1.00 36.36 C +ATOM 1743 N TYR A 233 -27.861 89.704 16.644 1.00 30.69 N +ATOM 1744 CA TYR A 233 -27.041 89.946 17.803 1.00 29.97 C +ATOM 1745 C TYR A 233 -25.601 90.026 17.331 1.00 29.08 C +ATOM 1746 O TYR A 233 -25.144 89.182 16.563 1.00 26.87 O +ATOM 1747 CB TYR A 233 -27.179 88.796 18.797 1.00 34.61 C +ATOM 1748 CG TYR A 233 -26.220 88.914 19.958 1.00 40.55 C +ATOM 1749 CD1 TYR A 233 -26.490 89.788 21.006 1.00 42.75 C +ATOM 1750 CD2 TYR A 233 -25.010 88.202 19.980 1.00 40.62 C +ATOM 1751 CE1 TYR A 233 -25.592 89.964 22.041 1.00 45.09 C +ATOM 1752 CE2 TYR A 233 -24.105 88.370 21.012 1.00 42.71 C +ATOM 1753 CZ TYR A 233 -24.406 89.258 22.042 1.00 45.56 C +ATOM 1754 OH TYR A 233 -23.533 89.469 23.085 1.00 49.10 O +ATOM 1755 N PHE A 234 -24.880 91.032 17.800 1.00 28.86 N +ATOM 1756 CA PHE A 234 -23.484 91.173 17.423 1.00 30.71 C +ATOM 1757 C PHE A 234 -22.618 91.688 18.556 1.00 31.98 C +ATOM 1758 O PHE A 234 -22.965 92.645 19.245 1.00 32.40 O +ATOM 1759 CB PHE A 234 -23.322 92.085 16.212 1.00 29.06 C +ATOM 1760 CG PHE A 234 -21.928 92.128 15.686 1.00 28.34 C +ATOM 1761 CD1 PHE A 234 -21.503 91.199 14.749 1.00 31.56 C +ATOM 1762 CD2 PHE A 234 -21.018 93.056 16.166 1.00 29.30 C +ATOM 1763 CE1 PHE A 234 -20.181 91.193 14.297 1.00 33.47 C +ATOM 1764 CE2 PHE A 234 -19.691 93.061 15.721 1.00 30.27 C +ATOM 1765 CZ PHE A 234 -19.272 92.127 14.788 1.00 30.71 C +ATOM 1766 N THR A 235 -21.481 91.036 18.738 1.00 33.60 N +ATOM 1767 CA THR A 235 -20.539 91.430 19.764 1.00 34.90 C +ATOM 1768 C THR A 235 -19.138 91.214 19.227 1.00 35.62 C +ATOM 1769 O THR A 235 -18.847 90.187 18.608 1.00 34.17 O +ATOM 1770 CB THR A 235 -20.725 90.628 21.061 1.00 35.10 C +ATOM 1771 OG1 THR A 235 -19.913 91.202 22.088 1.00 38.53 O +ATOM 1772 CG2 THR A 235 -20.314 89.186 20.869 1.00 33.77 C +ATOM 1773 N SER A 236 -18.299 92.223 19.423 1.00 38.32 N +ATOM 1774 CA SER A 236 -16.913 92.198 18.979 1.00 40.42 C +ATOM 1775 C SER A 236 -16.038 92.630 20.136 1.00 43.36 C +ATOM 1776 O SER A 236 -16.483 93.381 21.011 1.00 42.35 O +ATOM 1777 CB SER A 236 -16.718 93.172 17.827 1.00 40.45 C +ATOM 1778 OG SER A 236 -15.549 93.953 18.010 1.00 43.39 O +ATOM 1779 N ASN A 237 -14.779 92.203 20.110 1.00 46.53 N +ATOM 1780 CA ASN A 237 -13.861 92.564 21.179 1.00 50.47 C +ATOM 1781 C ASN A 237 -12.405 92.369 20.794 1.00 50.79 C +ATOM 1782 O ASN A 237 -12.022 91.303 20.309 1.00 49.78 O +ATOM 1783 CB ASN A 237 -14.193 91.766 22.443 1.00 53.95 C +ATOM 1784 CG ASN A 237 -13.258 92.070 23.593 1.00 56.91 C +ATOM 1785 OD1 ASN A 237 -12.329 91.308 23.854 1.00 59.64 O +ATOM 1786 ND2 ASN A 237 -13.501 93.182 24.293 1.00 57.78 N +ATOM 1787 N LEU A 238 -11.607 93.411 21.037 1.00 52.30 N +ATOM 1788 CA LEU A 238 -10.169 93.426 20.747 1.00 53.95 C +ATOM 1789 C LEU A 238 -9.266 92.727 21.778 1.00 56.41 C +ATOM 1790 O LEU A 238 -9.007 93.274 22.863 1.00 57.54 O +ATOM 1791 CB LEU A 238 -9.700 94.865 20.568 1.00 51.24 C +ATOM 1792 CG LEU A 238 -9.772 95.361 19.128 1.00 51.10 C +ATOM 1793 CD1 LEU A 238 -9.483 96.849 19.079 1.00 51.86 C +ATOM 1794 CD2 LEU A 238 -8.782 94.587 18.275 1.00 48.37 C +ATOM 1795 N GLU A 239 -8.739 91.555 21.410 1.00 55.26 N +TER 1796 GLU A 239 +ATOM 1797 N SER B 3 -29.020 93.796 31.810 1.00 85.41 N +ATOM 1798 CA SER B 3 -28.280 92.536 31.500 1.00 85.75 C +ATOM 1799 C SER B 3 -29.090 91.266 31.832 1.00 85.29 C +ATOM 1800 O SER B 3 -30.218 91.343 32.336 1.00 85.77 O +ATOM 1801 CB SER B 3 -26.933 92.526 32.238 1.00 84.58 C +ATOM 1802 N ASP B 4 -28.499 90.103 31.543 1.00 83.43 N +ATOM 1803 CA ASP B 4 -29.127 88.798 31.776 1.00 79.24 C +ATOM 1804 C ASP B 4 -29.070 88.361 33.236 1.00 74.34 C +ATOM 1805 O ASP B 4 -28.328 88.928 34.033 1.00 74.79 O +ATOM 1806 CB ASP B 4 -28.449 87.730 30.908 1.00 83.08 C +ATOM 1807 CG ASP B 4 -28.438 88.094 29.432 1.00 87.20 C +ATOM 1808 OD1 ASP B 4 -27.478 88.766 28.993 1.00 90.87 O +ATOM 1809 OD2 ASP B 4 -29.386 87.714 28.711 1.00 88.05 O +ATOM 1810 N ASP B 5 -29.828 87.324 33.571 1.00 68.52 N +ATOM 1811 CA ASP B 5 -29.857 86.802 34.932 1.00 63.12 C +ATOM 1812 C ASP B 5 -28.490 86.350 35.429 1.00 58.96 C +ATOM 1813 O ASP B 5 -28.042 86.809 36.470 1.00 58.20 O +ATOM 1814 CB ASP B 5 -30.885 85.677 35.056 1.00 65.01 C +ATOM 1815 CG ASP B 5 -32.307 86.204 35.107 1.00 68.17 C +ATOM 1816 OD1 ASP B 5 -32.808 86.684 34.067 1.00 70.90 O +ATOM 1817 OD2 ASP B 5 -32.920 86.171 36.196 1.00 69.97 O +ATOM 1818 N LEU B 6 -27.829 85.463 34.687 1.00 54.84 N +ATOM 1819 CA LEU B 6 -26.500 84.980 35.067 1.00 49.05 C +ATOM 1820 C LEU B 6 -25.540 84.966 33.896 1.00 46.55 C +ATOM 1821 O LEU B 6 -25.925 84.738 32.757 1.00 47.39 O +ATOM 1822 CB LEU B 6 -26.554 83.572 35.662 1.00 47.93 C +ATOM 1823 CG LEU B 6 -25.195 83.081 36.183 1.00 45.79 C +ATOM 1824 CD1 LEU B 6 -24.763 83.908 37.368 1.00 46.26 C +ATOM 1825 CD2 LEU B 6 -25.251 81.630 36.570 1.00 46.90 C +ATOM 1826 N SER B 7 -24.267 85.142 34.202 1.00 45.54 N +ATOM 1827 CA SER B 7 -23.235 85.157 33.182 1.00 43.21 C +ATOM 1828 C SER B 7 -21.867 85.001 33.850 1.00 41.41 C +ATOM 1829 O SER B 7 -21.534 85.752 34.766 1.00 42.35 O +ATOM 1830 CB SER B 7 -23.316 86.479 32.411 1.00 42.98 C +ATOM 1831 OG SER B 7 -22.296 86.572 31.441 1.00 45.53 O +ATOM 1832 N PHE B 8 -21.115 83.982 33.452 1.00 38.76 N +ATOM 1833 CA PHE B 8 -19.786 83.780 34.010 1.00 37.25 C +ATOM 1834 C PHE B 8 -18.802 83.202 33.020 1.00 39.09 C +ATOM 1835 O PHE B 8 -19.130 82.321 32.215 1.00 38.38 O +ATOM 1836 CB PHE B 8 -19.809 82.951 35.296 1.00 33.40 C +ATOM 1837 CG PHE B 8 -20.267 81.530 35.121 1.00 32.54 C +ATOM 1838 CD1 PHE B 8 -19.438 80.576 34.539 1.00 33.54 C +ATOM 1839 CD2 PHE B 8 -21.520 81.127 35.579 1.00 31.92 C +ATOM 1840 CE1 PHE B 8 -19.848 79.231 34.418 1.00 30.87 C +ATOM 1841 CE2 PHE B 8 -21.936 79.796 35.466 1.00 29.49 C +ATOM 1842 CZ PHE B 8 -21.097 78.847 34.883 1.00 28.52 C +ATOM 1843 N ASN B 9 -17.582 83.717 33.092 1.00 42.03 N +ATOM 1844 CA ASN B 9 -16.507 83.285 32.216 1.00 42.47 C +ATOM 1845 C ASN B 9 -15.287 82.798 32.996 1.00 42.40 C +ATOM 1846 O ASN B 9 -14.892 83.389 34.006 1.00 41.65 O +ATOM 1847 CB ASN B 9 -16.109 84.434 31.293 1.00 42.19 C +ATOM 1848 CG ASN B 9 -15.110 84.013 30.249 1.00 44.90 C +ATOM 1849 OD1 ASN B 9 -15.424 83.211 29.364 1.00 47.47 O +ATOM 1850 ND2 ASN B 9 -13.891 84.542 30.347 1.00 44.28 N +ATOM 1851 N PHE B 10 -14.723 81.689 32.533 1.00 42.42 N +ATOM 1852 CA PHE B 10 -13.530 81.103 33.130 1.00 43.27 C +ATOM 1853 C PHE B 10 -12.514 80.896 31.996 1.00 44.29 C +ATOM 1854 O PHE B 10 -12.648 79.950 31.216 1.00 44.23 O +ATOM 1855 CB PHE B 10 -13.868 79.757 33.776 1.00 42.00 C +ATOM 1856 CG PHE B 10 -14.720 79.862 35.008 1.00 43.08 C +ATOM 1857 CD1 PHE B 10 -14.522 80.888 35.930 1.00 45.74 C +ATOM 1858 CD2 PHE B 10 -15.697 78.902 35.276 1.00 43.58 C +ATOM 1859 CE1 PHE B 10 -15.288 80.956 37.109 1.00 45.53 C +ATOM 1860 CE2 PHE B 10 -16.470 78.960 36.455 1.00 42.54 C +ATOM 1861 CZ PHE B 10 -16.261 79.987 37.368 1.00 42.24 C +ATOM 1862 N ASP B 11 -11.542 81.804 31.870 1.00 46.08 N +ATOM 1863 CA ASP B 11 -10.511 81.710 30.822 1.00 48.67 C +ATOM 1864 C ASP B 11 -9.620 80.505 31.074 1.00 48.62 C +ATOM 1865 O ASP B 11 -9.151 79.849 30.140 1.00 48.42 O +ATOM 1866 CB ASP B 11 -9.646 82.970 30.802 1.00 53.68 C +ATOM 1867 CG ASP B 11 -10.431 84.207 30.419 1.00 61.00 C +ATOM 1868 OD1 ASP B 11 -10.947 84.243 29.272 1.00 60.90 O +ATOM 1869 OD2 ASP B 11 -10.532 85.135 31.267 1.00 64.43 O +ATOM 1870 N LYS B 12 -9.385 80.263 32.360 1.00 49.65 N +ATOM 1871 CA LYS B 12 -8.580 79.163 32.882 1.00 49.83 C +ATOM 1872 C LYS B 12 -9.137 78.843 34.268 1.00 47.87 C +ATOM 1873 O LYS B 12 -9.861 79.648 34.873 1.00 46.59 O +ATOM 1874 CB LYS B 12 -7.093 79.562 32.989 1.00 52.79 C +ATOM 1875 CG LYS B 12 -6.811 81.003 33.520 1.00 61.82 C +ATOM 1876 CD LYS B 12 -6.950 81.182 35.059 1.00 67.25 C +ATOM 1877 CE LYS B 12 -7.019 82.674 35.505 1.00 70.17 C +ATOM 1878 NZ LYS B 12 -8.338 83.370 35.227 1.00 70.78 N +ATOM 1879 N PHE B 13 -8.837 77.651 34.755 1.00 45.83 N +ATOM 1880 CA PHE B 13 -9.293 77.268 36.073 1.00 46.61 C +ATOM 1881 C PHE B 13 -8.092 77.334 37.000 1.00 48.73 C +ATOM 1882 O PHE B 13 -6.952 77.327 36.540 1.00 49.32 O +ATOM 1883 CB PHE B 13 -9.854 75.851 36.051 1.00 45.43 C +ATOM 1884 CG PHE B 13 -11.011 75.671 35.116 1.00 45.76 C +ATOM 1885 CD1 PHE B 13 -12.319 75.902 35.546 1.00 44.96 C +ATOM 1886 CD2 PHE B 13 -10.800 75.248 33.808 1.00 45.87 C +ATOM 1887 CE1 PHE B 13 -13.404 75.711 34.685 1.00 44.01 C +ATOM 1888 CE2 PHE B 13 -11.881 75.051 32.934 1.00 46.75 C +ATOM 1889 CZ PHE B 13 -13.186 75.283 33.376 1.00 45.36 C +ATOM 1890 N VAL B 14 -8.345 77.474 38.294 1.00 50.75 N +ATOM 1891 CA VAL B 14 -7.266 77.513 39.274 1.00 53.34 C +ATOM 1892 C VAL B 14 -7.426 76.276 40.171 1.00 55.53 C +ATOM 1893 O VAL B 14 -8.532 75.738 40.293 1.00 52.47 O +ATOM 1894 CB VAL B 14 -7.305 78.809 40.136 1.00 52.95 C +ATOM 1895 CG1 VAL B 14 -7.348 80.042 39.249 1.00 53.60 C +ATOM 1896 CG2 VAL B 14 -8.490 78.789 41.089 1.00 55.05 C +ATOM 1897 N PRO B 15 -6.311 75.768 40.750 1.00 59.50 N +ATOM 1898 CA PRO B 15 -6.419 74.595 41.632 1.00 61.37 C +ATOM 1899 C PRO B 15 -7.268 74.898 42.866 1.00 62.81 C +ATOM 1900 O PRO B 15 -7.069 75.922 43.537 1.00 61.23 O +ATOM 1901 CB PRO B 15 -4.955 74.284 41.974 1.00 60.48 C +ATOM 1902 CG PRO B 15 -4.270 75.614 41.833 1.00 60.89 C +ATOM 1903 CD PRO B 15 -4.903 76.172 40.587 1.00 59.58 C +ATOM 1904 N ASN B 16 -8.239 74.015 43.120 1.00 65.61 N +ATOM 1905 CA ASN B 16 -9.175 74.141 44.244 1.00 68.83 C +ATOM 1906 C ASN B 16 -9.937 75.462 44.145 1.00 67.52 C +ATOM 1907 O ASN B 16 -9.834 76.331 45.021 1.00 69.79 O +ATOM 1908 CB ASN B 16 -8.441 74.051 45.585 1.00 74.26 C +ATOM 1909 CG ASN B 16 -7.647 72.767 45.728 1.00 80.28 C +ATOM 1910 OD1 ASN B 16 -6.410 72.787 45.776 1.00 83.49 O +ATOM 1911 ND2 ASN B 16 -8.351 71.634 45.781 1.00 82.51 N +ATOM 1912 N GLN B 17 -10.657 75.617 43.037 1.00 62.31 N +ATOM 1913 CA GLN B 17 -11.443 76.806 42.765 1.00 55.13 C +ATOM 1914 C GLN B 17 -12.626 76.765 43.716 1.00 53.23 C +ATOM 1915 O GLN B 17 -13.265 75.725 43.857 1.00 53.64 O +ATOM 1916 CB GLN B 17 -11.907 76.749 41.318 1.00 53.04 C +ATOM 1917 CG GLN B 17 -12.218 78.082 40.698 1.00 51.93 C +ATOM 1918 CD GLN B 17 -12.014 78.059 39.206 1.00 51.70 C +ATOM 1919 OE1 GLN B 17 -11.751 79.090 38.584 1.00 54.81 O +ATOM 1920 NE2 GLN B 17 -12.091 76.869 38.623 1.00 51.66 N +ATOM 1921 N LYS B 18 -12.898 77.879 44.389 1.00 50.66 N +ATOM 1922 CA LYS B 18 -13.992 77.930 45.348 1.00 48.44 C +ATOM 1923 C LYS B 18 -15.404 77.985 44.793 1.00 46.19 C +ATOM 1924 O LYS B 18 -16.354 77.666 45.514 1.00 46.69 O +ATOM 1925 CB LYS B 18 -13.805 79.082 46.320 1.00 50.80 C +ATOM 1926 CG LYS B 18 -13.418 78.653 47.708 1.00 54.00 C +ATOM 1927 CD LYS B 18 -11.995 78.126 47.738 1.00 58.65 C +ATOM 1928 CE LYS B 18 -11.536 77.867 49.180 1.00 61.11 C +ATOM 1929 NZ LYS B 18 -11.598 79.090 50.038 1.00 59.28 N +ATOM 1930 N ASN B 19 -15.564 78.417 43.545 1.00 42.96 N +ATOM 1931 CA ASN B 19 -16.907 78.489 42.970 1.00 40.14 C +ATOM 1932 C ASN B 19 -17.253 77.312 42.089 1.00 37.16 C +ATOM 1933 O ASN B 19 -18.152 77.377 41.256 1.00 37.61 O +ATOM 1934 CB ASN B 19 -17.156 79.816 42.240 1.00 39.34 C +ATOM 1935 CG ASN B 19 -16.123 80.112 41.197 1.00 38.07 C +ATOM 1936 OD1 ASN B 19 -15.336 79.240 40.809 1.00 38.17 O +ATOM 1937 ND2 ASN B 19 -16.101 81.356 40.736 1.00 36.42 N +ATOM 1938 N ILE B 20 -16.532 76.225 42.282 1.00 35.77 N +ATOM 1939 CA ILE B 20 -16.794 75.018 41.526 1.00 33.84 C +ATOM 1940 C ILE B 20 -16.845 73.880 42.514 1.00 33.88 C +ATOM 1941 O ILE B 20 -16.035 73.802 43.435 1.00 34.15 O +ATOM 1942 CB ILE B 20 -15.716 74.756 40.466 1.00 31.66 C +ATOM 1943 CG1 ILE B 20 -15.912 75.717 39.302 1.00 31.21 C +ATOM 1944 CG2 ILE B 20 -15.794 73.327 39.973 1.00 32.07 C +ATOM 1945 CD1 ILE B 20 -15.005 75.453 38.162 1.00 32.42 C +ATOM 1946 N ILE B 21 -17.852 73.039 42.361 1.00 34.86 N +ATOM 1947 CA ILE B 21 -18.022 71.900 43.239 1.00 37.96 C +ATOM 1948 C ILE B 21 -17.424 70.664 42.564 1.00 40.30 C +ATOM 1949 O ILE B 21 -17.832 70.276 41.463 1.00 42.86 O +ATOM 1950 CB ILE B 21 -19.513 71.676 43.566 1.00 38.48 C +ATOM 1951 CG1 ILE B 21 -20.071 72.885 44.319 1.00 37.32 C +ATOM 1952 CG2 ILE B 21 -19.692 70.417 44.400 1.00 37.69 C +ATOM 1953 CD1 ILE B 21 -21.567 72.817 44.537 1.00 38.74 C +ATOM 1954 N PHE B 22 -16.418 70.078 43.205 1.00 40.15 N +ATOM 1955 CA PHE B 22 -15.766 68.896 42.664 1.00 39.80 C +ATOM 1956 C PHE B 22 -16.348 67.638 43.269 1.00 41.63 C +ATOM 1957 O PHE B 22 -16.436 67.517 44.492 1.00 44.77 O +ATOM 1958 CB PHE B 22 -14.268 68.947 42.940 1.00 37.77 C +ATOM 1959 CG PHE B 22 -13.580 70.111 42.303 1.00 38.21 C +ATOM 1960 CD1 PHE B 22 -13.147 70.035 40.984 1.00 39.26 C +ATOM 1961 CD2 PHE B 22 -13.379 71.295 43.012 1.00 36.79 C +ATOM 1962 CE1 PHE B 22 -12.523 71.126 40.370 1.00 38.50 C +ATOM 1963 CE2 PHE B 22 -12.755 72.393 42.412 1.00 37.90 C +ATOM 1964 CZ PHE B 22 -12.325 72.309 41.086 1.00 38.14 C +ATOM 1965 N GLN B 23 -16.760 66.714 42.407 1.00 42.99 N +ATOM 1966 CA GLN B 23 -17.325 65.431 42.824 1.00 44.83 C +ATOM 1967 C GLN B 23 -16.550 64.327 42.104 1.00 47.77 C +ATOM 1968 O GLN B 23 -16.308 64.427 40.898 1.00 49.55 O +ATOM 1969 CB GLN B 23 -18.798 65.332 42.424 1.00 44.46 C +ATOM 1970 CG GLN B 23 -19.691 66.452 42.932 1.00 45.09 C +ATOM 1971 CD GLN B 23 -21.133 66.308 42.462 1.00 44.68 C +ATOM 1972 OE1 GLN B 23 -21.402 65.951 41.308 1.00 43.20 O +ATOM 1973 NE2 GLN B 23 -22.068 66.585 43.359 1.00 42.97 N +ATOM 1974 N GLY B 24 -16.193 63.267 42.829 1.00 49.32 N +ATOM 1975 CA GLY B 24 -15.446 62.169 42.233 1.00 49.90 C +ATOM 1976 C GLY B 24 -13.978 62.525 42.070 1.00 52.18 C +ATOM 1977 O GLY B 24 -13.413 63.244 42.898 1.00 52.88 O +ATOM 1978 N ASP B 25 -13.369 62.061 40.980 1.00 52.37 N +ATOM 1979 CA ASP B 25 -11.959 62.323 40.706 1.00 53.46 C +ATOM 1980 C ASP B 25 -11.689 63.668 40.033 1.00 53.07 C +ATOM 1981 O ASP B 25 -10.540 63.994 39.709 1.00 53.68 O +ATOM 1982 CB ASP B 25 -11.384 61.192 39.855 1.00 58.50 C +ATOM 1983 CG ASP B 25 -11.390 59.852 40.581 1.00 63.71 C +ATOM 1984 OD1 ASP B 25 -10.442 59.611 41.363 1.00 65.26 O +ATOM 1985 OD2 ASP B 25 -12.336 59.047 40.374 1.00 66.47 O +ATOM 1986 N ALA B 26 -12.746 64.445 39.818 1.00 52.16 N +ATOM 1987 CA ALA B 26 -12.621 65.750 39.182 1.00 52.28 C +ATOM 1988 C ALA B 26 -11.672 66.661 39.963 1.00 52.96 C +ATOM 1989 O ALA B 26 -11.736 66.748 41.193 1.00 54.33 O +ATOM 1990 CB ALA B 26 -13.980 66.387 39.050 1.00 51.81 C +ATOM 1991 N SER B 27 -10.784 67.333 39.241 1.00 52.30 N +ATOM 1992 CA SER B 27 -9.808 68.222 39.859 1.00 51.34 C +ATOM 1993 C SER B 27 -9.230 69.148 38.807 1.00 52.19 C +ATOM 1994 O SER B 27 -9.489 68.989 37.607 1.00 52.45 O +ATOM 1995 CB SER B 27 -8.675 67.401 40.463 1.00 51.66 C +ATOM 1996 OG SER B 27 -8.136 66.522 39.485 1.00 54.77 O +ATOM 1997 N VAL B 28 -8.415 70.095 39.254 1.00 51.96 N +ATOM 1998 CA VAL B 28 -7.791 71.048 38.341 1.00 52.56 C +ATOM 1999 C VAL B 28 -6.272 71.080 38.539 1.00 52.39 C +ATOM 2000 O VAL B 28 -5.778 71.396 39.621 1.00 53.20 O +ATOM 2001 CB VAL B 28 -8.448 72.458 38.467 1.00 50.47 C +ATOM 2002 CG1 VAL B 28 -8.764 72.757 39.908 1.00 53.73 C +ATOM 2003 CG2 VAL B 28 -7.548 73.532 37.888 1.00 48.83 C +ATOM 2004 N SER B 29 -5.544 70.700 37.490 1.00 53.09 N +ATOM 2005 CA SER B 29 -4.087 70.660 37.521 1.00 54.70 C +ATOM 2006 C SER B 29 -3.473 72.051 37.674 1.00 56.04 C +ATOM 2007 O SER B 29 -4.135 73.055 37.418 1.00 56.31 O +ATOM 2008 CB SER B 29 -3.550 69.976 36.256 1.00 54.39 C +ATOM 2009 OG SER B 29 -3.700 70.799 35.116 1.00 50.11 O +ATOM 2010 N THR B 30 -2.203 72.098 38.081 1.00 59.29 N +ATOM 2011 CA THR B 30 -1.477 73.364 38.289 1.00 60.73 C +ATOM 2012 C THR B 30 -1.204 74.164 37.013 1.00 60.15 C +ATOM 2013 O THR B 30 -0.681 75.280 37.074 1.00 59.08 O +ATOM 2014 CB THR B 30 -0.142 73.158 39.070 1.00 60.72 C +ATOM 2015 OG1 THR B 30 0.591 72.064 38.496 1.00 58.90 O +ATOM 2016 CG2 THR B 30 -0.424 72.891 40.561 1.00 58.85 C +ATOM 2017 N THR B 31 -1.539 73.579 35.864 1.00 58.68 N +ATOM 2018 CA THR B 31 -1.377 74.254 34.582 1.00 57.49 C +ATOM 2019 C THR B 31 -2.672 75.029 34.281 1.00 54.90 C +ATOM 2020 O THR B 31 -2.771 75.739 33.279 1.00 55.36 O +ATOM 2021 CB THR B 31 -1.085 73.246 33.451 1.00 59.44 C +ATOM 2022 OG1 THR B 31 -2.031 72.170 33.523 1.00 62.18 O +ATOM 2023 CG2 THR B 31 0.338 72.680 33.573 1.00 59.64 C +ATOM 2024 N GLY B 32 -3.665 74.861 35.156 1.00 51.52 N +ATOM 2025 CA GLY B 32 -4.931 75.553 35.016 1.00 47.45 C +ATOM 2026 C GLY B 32 -6.040 74.864 34.242 1.00 46.44 C +ATOM 2027 O GLY B 32 -6.996 75.522 33.833 1.00 47.78 O +ATOM 2028 N VAL B 33 -5.933 73.554 34.042 1.00 44.57 N +ATOM 2029 CA VAL B 33 -6.957 72.814 33.307 1.00 42.40 C +ATOM 2030 C VAL B 33 -7.797 71.898 34.196 1.00 40.15 C +ATOM 2031 O VAL B 33 -7.282 71.229 35.088 1.00 39.15 O +ATOM 2032 CB VAL B 33 -6.348 72.023 32.091 1.00 42.68 C +ATOM 2033 CG1 VAL B 33 -5.015 71.427 32.450 1.00 45.34 C +ATOM 2034 CG2 VAL B 33 -7.283 70.901 31.638 1.00 44.59 C +ATOM 2035 N LEU B 34 -9.104 71.899 33.948 1.00 39.86 N +ATOM 2036 CA LEU B 34 -10.040 71.078 34.699 1.00 38.02 C +ATOM 2037 C LEU B 34 -10.081 69.675 34.132 1.00 38.69 C +ATOM 2038 O LEU B 34 -10.610 69.448 33.044 1.00 40.00 O +ATOM 2039 CB LEU B 34 -11.436 71.689 34.646 1.00 36.47 C +ATOM 2040 CG LEU B 34 -12.550 70.803 35.198 1.00 37.72 C +ATOM 2041 CD1 LEU B 34 -12.364 70.584 36.683 1.00 40.08 C +ATOM 2042 CD2 LEU B 34 -13.886 71.453 34.928 1.00 40.12 C +ATOM 2043 N GLN B 35 -9.499 68.736 34.865 1.00 39.99 N +ATOM 2044 CA GLN B 35 -9.482 67.344 34.439 1.00 42.78 C +ATOM 2045 C GLN B 35 -10.644 66.634 35.131 1.00 44.43 C +ATOM 2046 O GLN B 35 -10.530 66.232 36.302 1.00 44.06 O +ATOM 2047 CB GLN B 35 -8.159 66.694 34.841 1.00 43.91 C +ATOM 2048 CG GLN B 35 -6.939 67.558 34.563 1.00 46.91 C +ATOM 2049 CD GLN B 35 -5.629 66.905 34.988 1.00 48.07 C +ATOM 2050 OE1 GLN B 35 -4.577 67.187 34.414 1.00 50.35 O +ATOM 2051 NE2 GLN B 35 -5.687 66.031 35.995 1.00 46.39 N +ATOM 2052 N VAL B 36 -11.770 66.499 34.428 1.00 46.15 N +ATOM 2053 CA VAL B 36 -12.936 65.845 35.026 1.00 49.66 C +ATOM 2054 C VAL B 36 -12.630 64.375 35.285 1.00 52.04 C +ATOM 2055 O VAL B 36 -13.253 63.730 36.131 1.00 52.06 O +ATOM 2056 CB VAL B 36 -14.209 65.975 34.144 1.00 48.35 C +ATOM 2057 CG1 VAL B 36 -14.400 67.416 33.711 1.00 49.07 C +ATOM 2058 CG2 VAL B 36 -14.132 65.071 32.945 1.00 48.64 C +ATOM 2059 N THR B 37 -11.638 63.872 34.560 1.00 55.29 N +ATOM 2060 CA THR B 37 -11.202 62.493 34.672 1.00 58.22 C +ATOM 2061 C THR B 37 -9.784 62.461 35.241 1.00 62.42 C +ATOM 2062 O THR B 37 -8.938 63.285 34.864 1.00 64.45 O +ATOM 2063 CB THR B 37 -11.298 61.804 33.289 1.00 56.78 C +ATOM 2064 OG1 THR B 37 -12.419 60.911 33.297 1.00 52.98 O +ATOM 2065 CG2 THR B 37 -9.999 61.064 32.901 1.00 55.63 C +ATOM 2066 N LYS B 38 -9.542 61.525 36.158 1.00 65.36 N +ATOM 2067 CA LYS B 38 -8.238 61.383 36.800 1.00 68.65 C +ATOM 2068 C LYS B 38 -7.114 61.088 35.809 1.00 70.27 C +ATOM 2069 O LYS B 38 -7.190 60.142 35.016 1.00 70.58 O +ATOM 2070 CB LYS B 38 -8.282 60.289 37.868 1.00 69.75 C +ATOM 2071 CG LYS B 38 -7.036 60.239 38.735 1.00 72.37 C +ATOM 2072 CD LYS B 38 -7.161 59.204 39.849 1.00 75.38 C +ATOM 2073 CE LYS B 38 -6.051 59.364 40.897 1.00 76.71 C +ATOM 2074 NZ LYS B 38 -6.077 60.708 41.558 1.00 77.24 N +ATOM 2075 N VAL B 39 -6.077 61.916 35.856 1.00 70.76 N +ATOM 2076 CA VAL B 39 -4.934 61.750 34.974 1.00 72.71 C +ATOM 2077 C VAL B 39 -3.740 61.316 35.827 1.00 75.24 C +ATOM 2078 O VAL B 39 -3.077 62.151 36.449 1.00 74.76 O +ATOM 2079 CB VAL B 39 -4.611 63.074 34.246 1.00 72.08 C +ATOM 2080 CG1 VAL B 39 -3.538 62.851 33.206 1.00 72.28 C +ATOM 2081 CG2 VAL B 39 -5.864 63.639 33.594 1.00 71.33 C +ATOM 2082 N SER B 40 -3.483 60.007 35.878 1.00 78.72 N +ATOM 2083 CA SER B 40 -2.373 59.482 36.677 1.00 82.31 C +ATOM 2084 C SER B 40 -1.594 58.306 36.094 1.00 85.21 C +ATOM 2085 O SER B 40 -2.051 57.629 35.166 1.00 86.68 O +ATOM 2086 CB SER B 40 -2.856 59.110 38.077 1.00 81.19 C +ATOM 2087 OG SER B 40 -3.136 60.277 38.823 1.00 82.86 O +ATOM 2088 N LYS B 41 -0.400 58.094 36.648 1.00 86.96 N +ATOM 2089 CA LYS B 41 0.487 57.008 36.240 1.00 86.79 C +ATOM 2090 C LYS B 41 0.762 56.136 37.472 1.00 86.98 C +ATOM 2091 O LYS B 41 1.292 56.612 38.480 1.00 86.28 O +ATOM 2092 CB LYS B 41 1.796 57.564 35.660 1.00 84.92 C +ATOM 2093 N PRO B 42 0.339 54.863 37.427 1.00 86.99 N +ATOM 2094 CA PRO B 42 -0.368 54.266 36.287 1.00 86.70 C +ATOM 2095 C PRO B 42 -1.823 54.733 36.152 1.00 85.92 C +ATOM 2096 O PRO B 42 -2.394 55.322 37.077 1.00 86.26 O +ATOM 2097 CB PRO B 42 -0.269 52.768 36.573 1.00 86.28 C +ATOM 2098 CG PRO B 42 -0.309 52.723 38.060 1.00 87.27 C +ATOM 2099 CD PRO B 42 0.610 53.850 38.464 1.00 86.48 C +ATOM 2100 N THR B 43 -2.395 54.493 34.977 1.00 84.92 N +ATOM 2101 CA THR B 43 -3.774 54.870 34.674 1.00 83.33 C +ATOM 2102 C THR B 43 -4.783 54.046 35.497 1.00 83.40 C +ATOM 2103 O THR B 43 -4.680 52.819 35.569 1.00 83.79 O +ATOM 2104 CB THR B 43 -4.047 54.717 33.153 1.00 82.50 C +ATOM 2105 OG1 THR B 43 -3.958 53.337 32.775 1.00 81.65 O +ATOM 2106 CG2 THR B 43 -3.012 55.507 32.352 1.00 79.60 C +ATOM 2107 N THR B 44 -5.747 54.725 36.120 1.00 82.56 N +ATOM 2108 CA THR B 44 -6.758 54.060 36.950 1.00 80.54 C +ATOM 2109 C THR B 44 -8.217 54.324 36.516 1.00 78.76 C +ATOM 2110 O THR B 44 -8.514 55.356 35.916 1.00 78.60 O +ATOM 2111 CB THR B 44 -6.570 54.459 38.445 1.00 79.93 C +ATOM 2112 OG1 THR B 44 -7.563 53.811 39.248 1.00 81.14 O +ATOM 2113 CG2 THR B 44 -6.676 55.974 38.627 1.00 77.26 C +ATOM 2114 N THR B 45 -9.109 53.373 36.811 1.00 76.64 N +ATOM 2115 CA THR B 45 -10.542 53.477 36.493 1.00 73.58 C +ATOM 2116 C THR B 45 -11.057 54.745 37.218 1.00 70.39 C +ATOM 2117 O THR B 45 -10.712 54.974 38.384 1.00 70.04 O +ATOM 2118 CB THR B 45 -11.307 52.142 36.918 1.00 75.64 C +ATOM 2119 OG1 THR B 45 -12.516 51.995 36.161 1.00 76.66 O +ATOM 2120 CG2 THR B 45 -11.641 52.107 38.423 1.00 76.92 C +ATOM 2121 N SER B 46 -11.847 55.577 36.537 1.00 65.75 N +ATOM 2122 CA SER B 46 -12.294 56.836 37.147 1.00 61.68 C +ATOM 2123 C SER B 46 -13.638 57.452 36.716 1.00 59.13 C +ATOM 2124 O SER B 46 -14.137 57.189 35.625 1.00 59.35 O +ATOM 2125 CB SER B 46 -11.180 57.871 36.941 1.00 60.69 C +ATOM 2126 OG SER B 46 -11.566 59.168 37.341 1.00 59.59 O +ATOM 2127 N ILE B 47 -14.199 58.283 37.597 1.00 55.99 N +ATOM 2128 CA ILE B 47 -15.459 59.010 37.367 1.00 52.22 C +ATOM 2129 C ILE B 47 -15.402 60.363 38.090 1.00 50.43 C +ATOM 2130 O ILE B 47 -15.036 60.433 39.268 1.00 50.90 O +ATOM 2131 CB ILE B 47 -16.698 58.242 37.888 1.00 51.13 C +ATOM 2132 CG1 ILE B 47 -16.900 56.951 37.093 1.00 52.81 C +ATOM 2133 CG2 ILE B 47 -17.943 59.113 37.767 1.00 47.44 C +ATOM 2134 CD1 ILE B 47 -18.020 56.077 37.610 1.00 55.14 C +ATOM 2135 N GLY B 48 -15.781 61.429 37.392 1.00 46.83 N +ATOM 2136 CA GLY B 48 -15.754 62.750 37.995 1.00 43.70 C +ATOM 2137 C GLY B 48 -16.756 63.727 37.409 1.00 41.96 C +ATOM 2138 O GLY B 48 -17.200 63.572 36.272 1.00 39.97 O +ATOM 2139 N ARG B 49 -17.139 64.720 38.212 1.00 40.49 N +ATOM 2140 CA ARG B 49 -18.086 65.755 37.799 1.00 38.12 C +ATOM 2141 C ARG B 49 -17.714 67.090 38.455 1.00 37.70 C +ATOM 2142 O ARG B 49 -17.305 67.127 39.616 1.00 38.63 O +ATOM 2143 CB ARG B 49 -19.516 65.393 38.216 1.00 37.97 C +ATOM 2144 CG ARG B 49 -19.952 63.971 37.915 1.00 38.29 C +ATOM 2145 CD ARG B 49 -21.471 63.846 37.900 1.00 39.23 C +ATOM 2146 NE ARG B 49 -22.104 64.426 39.086 1.00 38.46 N +ATOM 2147 CZ ARG B 49 -23.416 64.413 39.321 1.00 38.74 C +ATOM 2148 NH1 ARG B 49 -24.253 63.849 38.454 1.00 38.38 N +ATOM 2149 NH2 ARG B 49 -23.892 64.964 40.430 1.00 36.36 N +ATOM 2150 N ALA B 50 -17.839 68.182 37.709 1.00 36.30 N +ATOM 2151 CA ALA B 50 -17.545 69.512 38.238 1.00 35.95 C +ATOM 2152 C ALA B 50 -18.749 70.405 37.939 1.00 35.53 C +ATOM 2153 O ALA B 50 -19.222 70.451 36.799 1.00 35.77 O +ATOM 2154 CB ALA B 50 -16.287 70.073 37.599 1.00 31.63 C +ATOM 2155 N LEU B 51 -19.270 71.073 38.967 1.00 34.12 N +ATOM 2156 CA LEU B 51 -20.432 71.941 38.799 1.00 34.02 C +ATOM 2157 C LEU B 51 -20.185 73.336 39.323 1.00 34.50 C +ATOM 2158 O LEU B 51 -19.408 73.530 40.259 1.00 36.34 O +ATOM 2159 CB LEU B 51 -21.635 71.385 39.554 1.00 33.79 C +ATOM 2160 CG LEU B 51 -21.637 69.916 39.959 1.00 36.67 C +ATOM 2161 CD1 LEU B 51 -22.764 69.653 40.918 1.00 37.44 C +ATOM 2162 CD2 LEU B 51 -21.768 69.043 38.742 1.00 39.16 C +ATOM 2163 N TYR B 52 -20.853 74.310 38.719 1.00 32.81 N +ATOM 2164 CA TYR B 52 -20.738 75.683 39.173 1.00 33.52 C +ATOM 2165 C TYR B 52 -21.460 75.694 40.527 1.00 35.11 C +ATOM 2166 O TYR B 52 -22.579 75.167 40.646 1.00 37.22 O +ATOM 2167 CB TYR B 52 -21.412 76.623 38.176 1.00 32.02 C +ATOM 2168 CG TYR B 52 -21.430 78.064 38.616 1.00 32.37 C +ATOM 2169 CD1 TYR B 52 -20.249 78.781 38.768 1.00 32.45 C +ATOM 2170 CD2 TYR B 52 -22.632 78.699 38.932 1.00 33.69 C +ATOM 2171 CE1 TYR B 52 -20.265 80.089 39.231 1.00 33.99 C +ATOM 2172 CE2 TYR B 52 -22.656 80.008 39.396 1.00 33.83 C +ATOM 2173 CZ TYR B 52 -21.470 80.692 39.548 1.00 33.27 C +ATOM 2174 OH TYR B 52 -21.484 81.960 40.061 1.00 36.14 O +ATOM 2175 N ALA B 53 -20.810 76.273 41.536 1.00 34.91 N +ATOM 2176 CA ALA B 53 -21.340 76.324 42.901 1.00 37.61 C +ATOM 2177 C ALA B 53 -22.782 76.801 43.131 1.00 40.67 C +ATOM 2178 O ALA B 53 -23.505 76.204 43.940 1.00 44.37 O +ATOM 2179 CB ALA B 53 -20.385 77.087 43.796 1.00 37.14 C +ATOM 2180 N ALA B 54 -23.194 77.879 42.464 1.00 41.17 N +ATOM 2181 CA ALA B 54 -24.559 78.400 42.619 1.00 40.79 C +ATOM 2182 C ALA B 54 -25.551 77.701 41.685 1.00 41.90 C +ATOM 2183 O ALA B 54 -25.228 77.374 40.541 1.00 44.59 O +ATOM 2184 CB ALA B 54 -24.588 79.911 42.372 1.00 39.21 C +ATOM 2185 N PRO B 55 -26.754 77.394 42.188 1.00 41.26 N +ATOM 2186 CA PRO B 55 -27.774 76.772 41.343 1.00 40.71 C +ATOM 2187 C PRO B 55 -28.304 77.831 40.399 1.00 39.35 C +ATOM 2188 O PRO B 55 -28.124 79.026 40.641 1.00 38.76 O +ATOM 2189 CB PRO B 55 -28.853 76.379 42.350 1.00 39.99 C +ATOM 2190 CG PRO B 55 -28.087 76.176 43.605 1.00 42.16 C +ATOM 2191 CD PRO B 55 -27.160 77.359 43.597 1.00 42.13 C +ATOM 2192 N ILE B 56 -28.937 77.398 39.316 1.00 39.35 N +ATOM 2193 CA ILE B 56 -29.516 78.329 38.347 1.00 39.88 C +ATOM 2194 C ILE B 56 -31.027 78.117 38.275 1.00 39.19 C +ATOM 2195 O ILE B 56 -31.497 76.978 38.324 1.00 38.74 O +ATOM 2196 CB ILE B 56 -28.937 78.124 36.907 1.00 40.53 C +ATOM 2197 CG1 ILE B 56 -27.500 78.631 36.802 1.00 40.37 C +ATOM 2198 CG2 ILE B 56 -29.762 78.869 35.889 1.00 40.95 C +ATOM 2199 CD1 ILE B 56 -26.464 77.626 37.208 1.00 46.12 C +ATOM 2200 N GLN B 57 -31.789 79.209 38.221 1.00 39.53 N +ATOM 2201 CA GLN B 57 -33.238 79.091 38.083 1.00 41.52 C +ATOM 2202 C GLN B 57 -33.456 78.936 36.595 1.00 40.12 C +ATOM 2203 O GLN B 57 -33.327 79.900 35.842 1.00 39.56 O +ATOM 2204 CB GLN B 57 -33.966 80.337 38.575 1.00 45.23 C +ATOM 2205 CG GLN B 57 -35.438 80.353 38.198 1.00 51.83 C +ATOM 2206 CD GLN B 57 -36.312 81.091 39.202 1.00 56.37 C +ATOM 2207 OE1 GLN B 57 -37.404 80.626 39.552 1.00 58.37 O +ATOM 2208 NE2 GLN B 57 -35.842 82.244 39.670 1.00 59.50 N +ATOM 2209 N ILE B 58 -33.754 77.717 36.166 1.00 39.72 N +ATOM 2210 CA ILE B 58 -33.935 77.448 34.752 1.00 38.42 C +ATOM 2211 C ILE B 58 -35.329 77.768 34.205 1.00 39.56 C +ATOM 2212 O ILE B 58 -35.482 77.985 33.010 1.00 38.81 O +ATOM 2213 CB ILE B 58 -33.469 76.017 34.414 1.00 38.67 C +ATOM 2214 CG1 ILE B 58 -32.874 75.987 33.011 1.00 37.74 C +ATOM 2215 CG2 ILE B 58 -34.583 75.016 34.607 1.00 37.22 C +ATOM 2216 CD1 ILE B 58 -31.580 76.762 32.901 1.00 37.63 C +ATOM 2217 N TRP B 59 -36.335 77.779 35.079 1.00 41.20 N +ATOM 2218 CA TRP B 59 -37.711 78.130 34.710 1.00 44.33 C +ATOM 2219 C TRP B 59 -38.453 78.585 35.966 1.00 47.60 C +ATOM 2220 O TRP B 59 -38.038 78.260 37.077 1.00 47.94 O +ATOM 2221 CB TRP B 59 -38.449 76.995 33.978 1.00 46.47 C +ATOM 2222 CG TRP B 59 -38.712 75.728 34.771 1.00 50.36 C +ATOM 2223 CD1 TRP B 59 -37.840 74.706 34.999 1.00 51.22 C +ATOM 2224 CD2 TRP B 59 -39.937 75.367 35.421 1.00 51.61 C +ATOM 2225 NE1 TRP B 59 -38.438 73.728 35.754 1.00 51.17 N +ATOM 2226 CE2 TRP B 59 -39.722 74.105 36.034 1.00 51.82 C +ATOM 2227 CE3 TRP B 59 -41.185 75.972 35.563 1.00 53.05 C +ATOM 2228 CZ2 TRP B 59 -40.714 73.452 36.768 1.00 52.24 C +ATOM 2229 CZ3 TRP B 59 -42.172 75.320 36.295 1.00 54.09 C +ATOM 2230 CH2 TRP B 59 -41.926 74.073 36.891 1.00 53.16 C +ATOM 2231 N ASP B 60 -39.523 79.360 35.794 1.00 51.10 N +ATOM 2232 CA ASP B 60 -40.286 79.896 36.925 1.00 54.96 C +ATOM 2233 C ASP B 60 -41.713 79.358 37.011 1.00 56.52 C +ATOM 2234 O ASP B 60 -42.522 79.639 36.136 1.00 56.55 O +ATOM 2235 CB ASP B 60 -40.324 81.426 36.815 1.00 57.88 C +ATOM 2236 CG ASP B 60 -40.739 82.112 38.113 1.00 62.41 C +ATOM 2237 OD1 ASP B 60 -40.960 81.422 39.138 1.00 66.29 O +ATOM 2238 OD2 ASP B 60 -40.823 83.360 38.110 1.00 62.14 O +ATOM 2239 N SER B 61 -42.031 78.639 38.091 1.00 58.95 N +ATOM 2240 CA SER B 61 -43.372 78.067 38.282 1.00 60.11 C +ATOM 2241 C SER B 61 -44.423 79.164 38.417 1.00 60.91 C +ATOM 2242 O SER B 61 -45.556 79.019 37.961 1.00 61.15 O +ATOM 2243 CB SER B 61 -43.415 77.141 39.508 1.00 59.73 C +ATOM 2244 OG SER B 61 -43.116 77.837 40.707 1.00 58.44 O +ATOM 2245 N ILE B 62 -44.017 80.280 39.005 1.00 62.14 N +ATOM 2246 CA ILE B 62 -44.897 81.424 39.210 1.00 62.25 C +ATOM 2247 C ILE B 62 -45.336 82.068 37.894 1.00 61.17 C +ATOM 2248 O ILE B 62 -46.509 82.380 37.726 1.00 61.99 O +ATOM 2249 CB ILE B 62 -44.203 82.493 40.094 1.00 63.00 C +ATOM 2250 CG1 ILE B 62 -43.821 81.886 41.449 1.00 64.71 C +ATOM 2251 CG2 ILE B 62 -45.106 83.688 40.293 1.00 61.95 C +ATOM 2252 CD1 ILE B 62 -42.957 82.787 42.325 1.00 66.41 C +ATOM 2253 N THR B 63 -44.409 82.210 36.947 1.00 60.49 N +ATOM 2254 CA THR B 63 -44.704 82.852 35.661 1.00 58.91 C +ATOM 2255 C THR B 63 -44.751 81.980 34.409 1.00 58.56 C +ATOM 2256 O THR B 63 -45.161 82.451 33.345 1.00 57.31 O +ATOM 2257 CB THR B 63 -43.709 83.985 35.375 1.00 59.30 C +ATOM 2258 OG1 THR B 63 -42.380 83.451 35.325 1.00 61.52 O +ATOM 2259 CG2 THR B 63 -43.780 85.049 36.458 1.00 59.53 C +ATOM 2260 N GLY B 64 -44.286 80.738 34.514 1.00 59.25 N +ATOM 2261 CA GLY B 64 -44.287 79.842 33.364 1.00 59.43 C +ATOM 2262 C GLY B 64 -43.161 80.070 32.360 1.00 58.79 C +ATOM 2263 O GLY B 64 -43.009 79.280 31.427 1.00 59.46 O +ATOM 2264 N LYS B 65 -42.386 81.143 32.550 1.00 57.59 N +ATOM 2265 CA LYS B 65 -41.261 81.499 31.678 1.00 55.62 C +ATOM 2266 C LYS B 65 -40.122 80.484 31.746 1.00 52.38 C +ATOM 2267 O LYS B 65 -39.775 80.001 32.820 1.00 51.53 O +ATOM 2268 CB LYS B 65 -40.682 82.863 32.074 1.00 59.11 C +ATOM 2269 CG LYS B 65 -41.612 84.055 31.916 1.00 64.39 C +ATOM 2270 CD LYS B 65 -41.139 85.257 32.780 1.00 68.45 C +ATOM 2271 CE LYS B 65 -39.779 85.837 32.347 1.00 68.64 C +ATOM 2272 NZ LYS B 65 -39.358 87.005 33.190 1.00 65.83 N +ATOM 2273 N VAL B 66 -39.527 80.183 30.598 1.00 48.37 N +ATOM 2274 CA VAL B 66 -38.411 79.258 30.546 1.00 45.91 C +ATOM 2275 C VAL B 66 -37.177 80.050 30.132 1.00 43.09 C +ATOM 2276 O VAL B 66 -37.248 80.935 29.284 1.00 45.33 O +ATOM 2277 CB VAL B 66 -38.666 78.114 29.553 1.00 47.73 C +ATOM 2278 CG1 VAL B 66 -37.481 77.161 29.533 1.00 48.06 C +ATOM 2279 CG2 VAL B 66 -39.931 77.365 29.935 1.00 47.52 C +ATOM 2280 N ALA B 67 -36.052 79.754 30.761 1.00 39.80 N +ATOM 2281 CA ALA B 67 -34.810 80.446 30.463 1.00 37.55 C +ATOM 2282 C ALA B 67 -34.139 79.968 29.183 1.00 36.09 C +ATOM 2283 O ALA B 67 -34.290 78.821 28.779 1.00 37.24 O +ATOM 2284 CB ALA B 67 -33.849 80.291 31.624 1.00 36.89 C +ATOM 2285 N SER B 68 -33.452 80.875 28.509 1.00 34.41 N +ATOM 2286 CA SER B 68 -32.706 80.518 27.311 1.00 34.39 C +ATOM 2287 C SER B 68 -31.261 80.641 27.759 1.00 35.54 C +ATOM 2288 O SER B 68 -30.898 81.613 28.424 1.00 38.70 O +ATOM 2289 CB SER B 68 -32.961 81.498 26.165 1.00 29.68 C +ATOM 2290 OG SER B 68 -34.285 81.408 25.704 1.00 30.86 O +ATOM 2291 N PHE B 69 -30.443 79.644 27.475 1.00 34.55 N +ATOM 2292 CA PHE B 69 -29.053 79.743 27.879 1.00 32.86 C +ATOM 2293 C PHE B 69 -28.129 79.478 26.710 1.00 33.30 C +ATOM 2294 O PHE B 69 -28.570 79.129 25.610 1.00 33.50 O +ATOM 2295 CB PHE B 69 -28.736 78.817 29.064 1.00 33.96 C +ATOM 2296 CG PHE B 69 -28.794 77.358 28.736 1.00 35.26 C +ATOM 2297 CD1 PHE B 69 -27.673 76.704 28.227 1.00 35.60 C +ATOM 2298 CD2 PHE B 69 -29.975 76.640 28.904 1.00 33.79 C +ATOM 2299 CE1 PHE B 69 -27.732 75.356 27.891 1.00 35.49 C +ATOM 2300 CE2 PHE B 69 -30.041 75.293 28.571 1.00 33.95 C +ATOM 2301 CZ PHE B 69 -28.917 74.649 28.062 1.00 34.87 C +ATOM 2302 N ALA B 70 -26.845 79.704 26.952 1.00 33.51 N +ATOM 2303 CA ALA B 70 -25.803 79.499 25.953 1.00 32.83 C +ATOM 2304 C ALA B 70 -24.524 79.249 26.719 1.00 32.17 C +ATOM 2305 O ALA B 70 -24.254 79.906 27.730 1.00 33.63 O +ATOM 2306 CB ALA B 70 -25.645 80.728 25.073 1.00 28.01 C +ATOM 2307 N THR B 71 -23.775 78.249 26.280 1.00 30.82 N +ATOM 2308 CA THR B 71 -22.524 77.925 26.924 1.00 28.35 C +ATOM 2309 C THR B 71 -21.495 77.637 25.877 1.00 29.13 C +ATOM 2310 O THR B 71 -21.794 77.114 24.805 1.00 29.97 O +ATOM 2311 CB THR B 71 -22.631 76.721 27.879 1.00 27.14 C +ATOM 2312 OG1 THR B 71 -21.403 76.599 28.609 1.00 27.77 O +ATOM 2313 CG2 THR B 71 -22.883 75.440 27.119 1.00 22.63 C +ATOM 2314 N SER B 72 -20.276 78.031 26.181 1.00 30.52 N +ATOM 2315 CA SER B 72 -19.187 77.816 25.274 1.00 32.12 C +ATOM 2316 C SER B 72 -18.045 77.286 26.096 1.00 33.67 C +ATOM 2317 O SER B 72 -17.832 77.721 27.228 1.00 33.50 O +ATOM 2318 CB SER B 72 -18.780 79.124 24.624 1.00 32.41 C +ATOM 2319 OG SER B 72 -17.737 78.889 23.701 1.00 38.61 O +ATOM 2320 N PHE B 73 -17.332 76.318 25.538 1.00 34.63 N +ATOM 2321 CA PHE B 73 -16.190 75.742 26.216 1.00 34.75 C +ATOM 2322 C PHE B 73 -15.288 75.035 25.231 1.00 36.14 C +ATOM 2323 O PHE B 73 -15.685 74.762 24.090 1.00 36.52 O +ATOM 2324 CB PHE B 73 -16.626 74.795 27.347 1.00 36.70 C +ATOM 2325 CG PHE B 73 -17.510 73.649 26.906 1.00 38.36 C +ATOM 2326 CD1 PHE B 73 -16.958 72.446 26.460 1.00 38.58 C +ATOM 2327 CD2 PHE B 73 -18.896 73.757 26.972 1.00 40.05 C +ATOM 2328 CE1 PHE B 73 -17.769 71.372 26.086 1.00 35.61 C +ATOM 2329 CE2 PHE B 73 -19.719 72.678 26.598 1.00 38.81 C +ATOM 2330 CZ PHE B 73 -19.145 71.488 26.155 1.00 36.55 C +ATOM 2331 N SER B 74 -14.060 74.777 25.671 1.00 36.90 N +ATOM 2332 CA SER B 74 -13.059 74.097 24.849 1.00 35.64 C +ATOM 2333 C SER B 74 -12.507 72.918 25.630 1.00 35.60 C +ATOM 2334 O SER B 74 -12.183 73.045 26.813 1.00 36.35 O +ATOM 2335 CB SER B 74 -11.927 75.057 24.498 1.00 34.21 C +ATOM 2336 OG SER B 74 -12.435 76.233 23.892 1.00 36.66 O +ATOM 2337 N PHE B 75 -12.424 71.764 24.985 1.00 34.35 N +ATOM 2338 CA PHE B 75 -11.915 70.596 25.674 1.00 34.52 C +ATOM 2339 C PHE B 75 -10.977 69.801 24.808 1.00 35.56 C +ATOM 2340 O PHE B 75 -10.859 70.045 23.606 1.00 34.78 O +ATOM 2341 CB PHE B 75 -13.056 69.702 26.183 1.00 33.69 C +ATOM 2342 CG PHE B 75 -13.818 69.000 25.101 1.00 32.76 C +ATOM 2343 CD1 PHE B 75 -14.879 69.627 24.465 1.00 34.32 C +ATOM 2344 CD2 PHE B 75 -13.500 67.695 24.745 1.00 32.83 C +ATOM 2345 CE1 PHE B 75 -15.626 68.953 23.495 1.00 36.75 C +ATOM 2346 CE2 PHE B 75 -14.236 67.009 23.778 1.00 34.72 C +ATOM 2347 CZ PHE B 75 -15.300 67.638 23.150 1.00 36.00 C +ATOM 2348 N VAL B 76 -10.300 68.856 25.451 1.00 37.83 N +ATOM 2349 CA VAL B 76 -9.337 67.975 24.807 1.00 38.72 C +ATOM 2350 C VAL B 76 -9.529 66.568 25.339 1.00 41.26 C +ATOM 2351 O VAL B 76 -9.755 66.375 26.545 1.00 42.99 O +ATOM 2352 CB VAL B 76 -7.883 68.352 25.176 1.00 36.14 C +ATOM 2353 CG1 VAL B 76 -6.913 67.454 24.421 1.00 35.36 C +ATOM 2354 CG2 VAL B 76 -7.613 69.819 24.903 1.00 35.92 C +ATOM 2355 N VAL B 77 -9.444 65.592 24.444 1.00 42.63 N +ATOM 2356 CA VAL B 77 -9.543 64.191 24.832 1.00 44.89 C +ATOM 2357 C VAL B 77 -8.350 63.510 24.177 1.00 47.33 C +ATOM 2358 O VAL B 77 -8.313 63.345 22.951 1.00 47.73 O +ATOM 2359 CB VAL B 77 -10.873 63.539 24.383 1.00 44.22 C +ATOM 2360 CG1 VAL B 77 -10.784 62.026 24.492 1.00 44.39 C +ATOM 2361 CG2 VAL B 77 -12.014 64.031 25.259 1.00 42.43 C +ATOM 2362 N LYS B 78 -7.342 63.201 24.995 1.00 50.01 N +ATOM 2363 CA LYS B 78 -6.123 62.560 24.517 1.00 52.37 C +ATOM 2364 C LYS B 78 -5.996 61.108 24.961 1.00 54.71 C +ATOM 2365 O LYS B 78 -6.002 60.818 26.159 1.00 55.44 O +ATOM 2366 CB LYS B 78 -4.897 63.343 24.975 1.00 51.45 C +ATOM 2367 CG LYS B 78 -3.593 62.751 24.475 1.00 53.78 C +ATOM 2368 CD LYS B 78 -2.416 63.639 24.836 1.00 56.50 C +ATOM 2369 CE LYS B 78 -1.104 63.078 24.289 1.00 59.12 C +ATOM 2370 NZ LYS B 78 0.066 63.987 24.535 1.00 59.59 N +ATOM 2371 N ALA B 79 -5.879 60.209 23.984 1.00 56.61 N +ATOM 2372 CA ALA B 79 -5.736 58.776 24.233 1.00 58.23 C +ATOM 2373 C ALA B 79 -4.300 58.359 23.952 1.00 60.74 C +ATOM 2374 O ALA B 79 -3.665 58.872 23.022 1.00 62.04 O +ATOM 2375 CB ALA B 79 -6.693 57.983 23.348 1.00 54.58 C +ATOM 2376 N ASP B 80 -3.772 57.466 24.786 1.00 63.08 N +ATOM 2377 CA ASP B 80 -2.409 56.971 24.606 1.00 66.79 C +ATOM 2378 C ASP B 80 -2.410 56.107 23.355 1.00 68.22 C +ATOM 2379 O ASP B 80 -1.529 56.232 22.497 1.00 68.17 O +ATOM 2380 CB ASP B 80 -1.970 56.152 25.818 1.00 67.49 C +ATOM 2381 CG ASP B 80 -1.973 56.962 27.097 1.00 68.34 C +ATOM 2382 OD1 ASP B 80 -1.559 58.143 27.065 1.00 68.66 O +ATOM 2383 OD2 ASP B 80 -2.394 56.416 28.136 1.00 68.51 O +ATOM 2384 N LYS B 81 -3.418 55.237 23.260 1.00 69.34 N +ATOM 2385 CA LYS B 81 -3.594 54.369 22.099 1.00 70.26 C +ATOM 2386 C LYS B 81 -4.315 55.174 21.024 1.00 69.60 C +ATOM 2387 O LYS B 81 -4.338 56.406 21.055 1.00 69.54 O +ATOM 2388 CB LYS B 81 -4.439 53.133 22.446 1.00 71.61 C +ATOM 2389 CG LYS B 81 -3.654 51.911 22.913 1.00 73.69 C +ATOM 2390 CD LYS B 81 -3.009 52.137 24.272 1.00 78.12 C +ATOM 2391 CE LYS B 81 -2.401 50.850 24.828 1.00 78.93 C +ATOM 2392 NZ LYS B 81 -1.675 51.077 26.114 1.00 78.78 N +ATOM 2393 N SER B 82 -4.909 54.467 20.074 1.00 68.90 N +ATOM 2394 CA SER B 82 -5.642 55.106 18.995 1.00 67.93 C +ATOM 2395 C SER B 82 -7.099 55.286 19.417 1.00 67.00 C +ATOM 2396 O SER B 82 -7.796 56.153 18.905 1.00 66.91 O +ATOM 2397 CB SER B 82 -5.554 54.253 17.721 1.00 67.87 C +ATOM 2398 OG SER B 82 -6.103 52.958 17.928 1.00 67.99 O +ATOM 2399 N ASP B 83 -7.547 54.453 20.349 1.00 66.90 N +ATOM 2400 CA ASP B 83 -8.916 54.510 20.842 1.00 66.29 C +ATOM 2401 C ASP B 83 -8.909 54.832 22.334 1.00 64.78 C +ATOM 2402 O ASP B 83 -7.882 54.679 23.006 1.00 66.05 O +ATOM 2403 CB ASP B 83 -9.626 53.178 20.582 1.00 68.38 C +ATOM 2404 CG ASP B 83 -10.964 53.360 19.886 1.00 71.82 C +ATOM 2405 OD1 ASP B 83 -10.969 53.528 18.648 1.00 72.22 O +ATOM 2406 OD2 ASP B 83 -12.009 53.341 20.574 1.00 74.09 O +ATOM 2407 N GLY B 84 -10.049 55.290 22.844 1.00 62.45 N +ATOM 2408 CA GLY B 84 -10.141 55.635 24.254 1.00 58.53 C +ATOM 2409 C GLY B 84 -11.539 55.542 24.838 1.00 55.94 C +ATOM 2410 O GLY B 84 -12.519 55.350 24.115 1.00 56.62 O +ATOM 2411 N VAL B 85 -11.628 55.671 26.158 1.00 52.67 N +ATOM 2412 CA VAL B 85 -12.904 55.602 26.866 1.00 51.90 C +ATOM 2413 C VAL B 85 -12.919 56.606 28.032 1.00 51.86 C +ATOM 2414 O VAL B 85 -11.860 56.984 28.532 1.00 51.60 O +ATOM 2415 CB VAL B 85 -13.167 54.170 27.413 1.00 51.99 C +ATOM 2416 CG1 VAL B 85 -13.154 53.142 26.282 1.00 48.91 C +ATOM 2417 CG2 VAL B 85 -12.150 53.814 28.498 1.00 51.69 C +ATOM 2418 N ASP B 86 -14.102 57.033 28.487 1.00 51.94 N +ATOM 2419 CA ASP B 86 -15.409 56.619 27.952 1.00 51.94 C +ATOM 2420 C ASP B 86 -16.168 57.763 27.298 1.00 51.28 C +ATOM 2421 O ASP B 86 -17.098 57.532 26.509 1.00 50.73 O +ATOM 2422 CB ASP B 86 -16.299 56.085 29.073 1.00 53.82 C +ATOM 2423 CG ASP B 86 -16.226 54.597 29.213 1.00 57.06 C +ATOM 2424 OD1 ASP B 86 -16.823 53.898 28.368 1.00 58.94 O +ATOM 2425 OD2 ASP B 86 -15.585 54.125 30.172 1.00 58.78 O +ATOM 2426 N GLY B 87 -15.818 58.985 27.694 1.00 49.20 N +ATOM 2427 CA GLY B 87 -16.478 60.153 27.162 1.00 46.76 C +ATOM 2428 C GLY B 87 -16.607 61.299 28.149 1.00 46.98 C +ATOM 2429 O GLY B 87 -16.312 61.180 29.349 1.00 47.60 O +ATOM 2430 N LEU B 88 -17.098 62.415 27.624 1.00 45.57 N +ATOM 2431 CA LEU B 88 -17.289 63.648 28.376 1.00 41.52 C +ATOM 2432 C LEU B 88 -18.749 64.086 28.245 1.00 38.28 C +ATOM 2433 O LEU B 88 -19.422 63.733 27.284 1.00 37.53 O +ATOM 2434 CB LEU B 88 -16.392 64.713 27.764 1.00 42.33 C +ATOM 2435 CG LEU B 88 -16.395 66.061 28.452 1.00 44.14 C +ATOM 2436 CD1 LEU B 88 -15.688 65.898 29.783 1.00 46.10 C +ATOM 2437 CD2 LEU B 88 -15.694 67.095 27.580 1.00 44.24 C +ATOM 2438 N ALA B 89 -19.233 64.878 29.189 1.00 35.53 N +ATOM 2439 CA ALA B 89 -20.611 65.333 29.116 1.00 35.29 C +ATOM 2440 C ALA B 89 -20.873 66.661 29.797 1.00 37.02 C +ATOM 2441 O ALA B 89 -20.330 66.955 30.868 1.00 38.68 O +ATOM 2442 CB ALA B 89 -21.548 64.287 29.690 1.00 31.35 C +ATOM 2443 N PHE B 90 -21.655 67.497 29.130 1.00 37.40 N +ATOM 2444 CA PHE B 90 -22.045 68.759 29.728 1.00 36.79 C +ATOM 2445 C PHE B 90 -23.467 68.478 30.184 1.00 35.94 C +ATOM 2446 O PHE B 90 -24.258 67.909 29.419 1.00 36.02 O +ATOM 2447 CB PHE B 90 -22.039 69.890 28.717 1.00 36.64 C +ATOM 2448 CG PHE B 90 -22.704 71.121 29.224 1.00 36.16 C +ATOM 2449 CD1 PHE B 90 -22.063 71.942 30.144 1.00 35.68 C +ATOM 2450 CD2 PHE B 90 -24.001 71.430 28.827 1.00 35.54 C +ATOM 2451 CE1 PHE B 90 -22.712 73.060 30.670 1.00 37.33 C +ATOM 2452 CE2 PHE B 90 -24.658 72.538 29.343 1.00 34.31 C +ATOM 2453 CZ PHE B 90 -24.016 73.358 30.266 1.00 35.59 C +ATOM 2454 N PHE B 91 -23.825 68.917 31.387 1.00 34.39 N +ATOM 2455 CA PHE B 91 -25.162 68.596 31.861 1.00 34.92 C +ATOM 2456 C PHE B 91 -25.847 69.568 32.800 1.00 35.59 C +ATOM 2457 O PHE B 91 -25.212 70.396 33.471 1.00 34.00 O +ATOM 2458 CB PHE B 91 -25.120 67.234 32.565 1.00 35.19 C +ATOM 2459 CG PHE B 91 -24.398 67.266 33.891 1.00 35.00 C +ATOM 2460 CD1 PHE B 91 -23.008 67.186 33.954 1.00 34.36 C +ATOM 2461 CD2 PHE B 91 -25.109 67.444 35.076 1.00 36.71 C +ATOM 2462 CE1 PHE B 91 -22.347 67.293 35.177 1.00 35.27 C +ATOM 2463 CE2 PHE B 91 -24.456 67.553 36.299 1.00 35.61 C +ATOM 2464 CZ PHE B 91 -23.074 67.477 36.347 1.00 35.50 C +ATOM 2465 N LEU B 92 -27.166 69.390 32.867 1.00 36.16 N +ATOM 2466 CA LEU B 92 -28.042 70.143 33.753 1.00 35.82 C +ATOM 2467 C LEU B 92 -28.726 69.088 34.611 1.00 35.94 C +ATOM 2468 O LEU B 92 -29.324 68.147 34.090 1.00 36.19 O +ATOM 2469 CB LEU B 92 -29.102 70.920 32.982 1.00 34.01 C +ATOM 2470 CG LEU B 92 -28.566 72.115 32.219 1.00 34.81 C +ATOM 2471 CD1 LEU B 92 -28.233 71.692 30.800 1.00 36.43 C +ATOM 2472 CD2 LEU B 92 -29.609 73.208 32.228 1.00 34.49 C +ATOM 2473 N ALA B 93 -28.596 69.226 35.923 1.00 36.19 N +ATOM 2474 CA ALA B 93 -29.191 68.290 36.863 1.00 35.05 C +ATOM 2475 C ALA B 93 -29.814 69.089 37.992 1.00 35.42 C +ATOM 2476 O ALA B 93 -29.587 70.292 38.103 1.00 34.78 O +ATOM 2477 CB ALA B 93 -28.128 67.364 37.400 1.00 35.33 C +ATOM 2478 N PRO B 94 -30.645 68.446 38.824 1.00 36.80 N +ATOM 2479 CA PRO B 94 -31.273 69.161 39.939 1.00 38.28 C +ATOM 2480 C PRO B 94 -30.200 69.809 40.796 1.00 40.16 C +ATOM 2481 O PRO B 94 -29.083 69.299 40.864 1.00 42.62 O +ATOM 2482 CB PRO B 94 -31.994 68.048 40.683 1.00 35.48 C +ATOM 2483 CG PRO B 94 -32.422 67.156 39.566 1.00 36.33 C +ATOM 2484 CD PRO B 94 -31.161 67.070 38.735 1.00 37.39 C +ATOM 2485 N ALA B 95 -30.527 70.953 41.390 1.00 42.29 N +ATOM 2486 CA ALA B 95 -29.601 71.706 42.233 1.00 43.60 C +ATOM 2487 C ALA B 95 -28.856 70.831 43.226 1.00 46.05 C +ATOM 2488 O ALA B 95 -29.458 70.098 44.008 1.00 44.36 O +ATOM 2489 CB ALA B 95 -30.338 72.811 42.959 1.00 43.30 C +ATOM 2490 N ASN B 96 -27.530 70.890 43.145 1.00 51.19 N +ATOM 2491 CA ASN B 96 -26.635 70.121 44.012 1.00 55.64 C +ATOM 2492 C ASN B 96 -26.841 68.607 43.939 1.00 56.36 C +ATOM 2493 O ASN B 96 -26.904 67.924 44.957 1.00 56.60 O +ATOM 2494 CB ASN B 96 -26.724 70.627 45.457 1.00 59.57 C +ATOM 2495 CG ASN B 96 -26.403 72.120 45.573 1.00 64.55 C +ATOM 2496 OD1 ASN B 96 -25.665 72.686 44.753 1.00 67.43 O +ATOM 2497 ND2 ASN B 96 -26.972 72.765 46.583 1.00 64.93 N +ATOM 2498 N SER B 97 -26.940 68.099 42.715 1.00 57.19 N +ATOM 2499 CA SER B 97 -27.116 66.675 42.465 1.00 58.51 C +ATOM 2500 C SER B 97 -25.841 65.930 42.875 1.00 59.02 C +ATOM 2501 O SER B 97 -24.726 66.431 42.701 1.00 58.07 O +ATOM 2502 CB SER B 97 -27.405 66.445 40.968 1.00 58.25 C +ATOM 2503 OG SER B 97 -27.248 65.087 40.577 1.00 60.02 O +ATOM 2504 N GLN B 98 -26.018 64.748 43.453 1.00 59.35 N +ATOM 2505 CA GLN B 98 -24.895 63.921 43.860 1.00 59.66 C +ATOM 2506 C GLN B 98 -24.695 62.841 42.810 1.00 58.11 C +ATOM 2507 O GLN B 98 -25.611 62.539 42.052 1.00 58.84 O +ATOM 2508 CB GLN B 98 -25.192 63.270 45.209 1.00 63.58 C +ATOM 2509 CG GLN B 98 -25.364 64.258 46.343 1.00 68.90 C +ATOM 2510 CD GLN B 98 -24.106 65.077 46.601 1.00 72.55 C +ATOM 2511 OE1 GLN B 98 -23.103 64.951 45.892 1.00 74.16 O +ATOM 2512 NE2 GLN B 98 -24.155 65.922 47.623 1.00 75.13 N +ATOM 2513 N ILE B 99 -23.499 62.269 42.743 1.00 56.81 N +ATOM 2514 CA ILE B 99 -23.254 61.206 41.781 1.00 55.87 C +ATOM 2515 C ILE B 99 -24.121 60.006 42.157 1.00 58.70 C +ATOM 2516 O ILE B 99 -23.963 59.431 43.235 1.00 59.92 O +ATOM 2517 CB ILE B 99 -21.781 60.779 41.764 1.00 53.12 C +ATOM 2518 CG1 ILE B 99 -20.911 61.937 41.279 1.00 52.35 C +ATOM 2519 CG2 ILE B 99 -21.599 59.566 40.870 1.00 51.24 C +ATOM 2520 CD1 ILE B 99 -19.445 61.594 41.142 1.00 49.57 C +ATOM 2521 N PRO B 100 -25.065 59.630 41.280 1.00 60.59 N +ATOM 2522 CA PRO B 100 -25.984 58.505 41.494 1.00 61.07 C +ATOM 2523 C PRO B 100 -25.247 57.276 41.992 1.00 62.10 C +ATOM 2524 O PRO B 100 -24.187 56.922 41.470 1.00 62.00 O +ATOM 2525 CB PRO B 100 -26.556 58.266 40.101 1.00 60.91 C +ATOM 2526 CG PRO B 100 -26.613 59.637 39.537 1.00 62.85 C +ATOM 2527 CD PRO B 100 -25.276 60.222 39.946 1.00 62.51 C +ATOM 2528 N SER B 101 -25.803 56.649 43.023 1.00 63.78 N +ATOM 2529 CA SER B 101 -25.212 55.451 43.609 1.00 64.54 C +ATOM 2530 C SER B 101 -25.110 54.334 42.575 1.00 63.70 C +ATOM 2531 O SER B 101 -26.050 54.106 41.789 1.00 63.69 O +ATOM 2532 CB SER B 101 -26.049 54.976 44.797 1.00 65.53 C +ATOM 2533 OG SER B 101 -25.504 53.791 45.346 1.00 69.28 O +ATOM 2534 N GLY B 102 -23.961 53.658 42.574 1.00 61.30 N +ATOM 2535 CA GLY B 102 -23.735 52.570 41.638 1.00 59.93 C +ATOM 2536 C GLY B 102 -23.748 53.012 40.186 1.00 59.28 C +ATOM 2537 O GLY B 102 -24.442 52.432 39.343 1.00 57.13 O +ATOM 2538 N SER B 103 -23.006 54.074 39.900 1.00 60.29 N +ATOM 2539 CA SER B 103 -22.920 54.589 38.541 1.00 61.21 C +ATOM 2540 C SER B 103 -21.738 53.911 37.853 1.00 61.84 C +ATOM 2541 O SER B 103 -21.109 53.022 38.423 1.00 63.30 O +ATOM 2542 CB SER B 103 -22.733 56.108 38.556 1.00 60.07 C +ATOM 2543 OG SER B 103 -23.135 56.679 37.321 1.00 58.41 O +ATOM 2544 N SER B 104 -21.453 54.306 36.620 1.00 61.32 N +ATOM 2545 CA SER B 104 -20.342 53.719 35.884 1.00 61.95 C +ATOM 2546 C SER B 104 -19.862 54.696 34.827 1.00 61.89 C +ATOM 2547 O SER B 104 -20.603 55.598 34.431 1.00 62.51 O +ATOM 2548 CB SER B 104 -20.767 52.410 35.221 1.00 61.90 C +ATOM 2549 OG SER B 104 -21.774 52.641 34.251 1.00 60.16 O +ATOM 2550 N ALA B 105 -18.629 54.499 34.367 1.00 60.55 N +ATOM 2551 CA ALA B 105 -18.025 55.358 33.358 1.00 58.90 C +ATOM 2552 C ALA B 105 -18.913 55.553 32.125 1.00 57.83 C +ATOM 2553 O ALA B 105 -19.000 56.657 31.589 1.00 58.81 O +ATOM 2554 CB ALA B 105 -16.697 54.804 32.958 1.00 58.70 C +ATOM 2555 N GLY B 106 -19.584 54.490 31.693 1.00 54.81 N +ATOM 2556 CA GLY B 106 -20.454 54.600 30.537 1.00 52.43 C +ATOM 2557 C GLY B 106 -21.693 55.458 30.755 1.00 51.18 C +ATOM 2558 O GLY B 106 -22.389 55.798 29.793 1.00 52.82 O +ATOM 2559 N MET B 107 -21.994 55.779 32.013 1.00 49.80 N +ATOM 2560 CA MET B 107 -23.160 56.600 32.352 1.00 48.30 C +ATOM 2561 C MET B 107 -22.710 57.989 32.832 1.00 46.84 C +ATOM 2562 O MET B 107 -23.486 58.757 33.411 1.00 46.90 O +ATOM 2563 CB MET B 107 -24.037 55.876 33.387 1.00 48.76 C +ATOM 2564 CG MET B 107 -24.469 54.478 32.921 1.00 50.29 C +ATOM 2565 SD MET B 107 -25.566 53.550 34.037 1.00 52.32 S +ATOM 2566 CE MET B 107 -24.454 53.300 35.501 1.00 56.48 C +ATOM 2567 N PHE B 108 -21.438 58.282 32.568 1.00 44.12 N +ATOM 2568 CA PHE B 108 -20.777 59.544 32.892 1.00 43.28 C +ATOM 2569 C PHE B 108 -21.073 60.126 34.259 1.00 43.17 C +ATOM 2570 O PHE B 108 -20.979 61.338 34.454 1.00 43.04 O +ATOM 2571 CB PHE B 108 -21.079 60.581 31.810 1.00 43.02 C +ATOM 2572 CG PHE B 108 -20.924 60.054 30.411 1.00 43.48 C +ATOM 2573 CD1 PHE B 108 -19.658 59.773 29.892 1.00 44.33 C +ATOM 2574 CD2 PHE B 108 -22.045 59.818 29.619 1.00 42.94 C +ATOM 2575 CE1 PHE B 108 -19.509 59.263 28.603 1.00 44.76 C +ATOM 2576 CE2 PHE B 108 -21.912 59.310 28.331 1.00 44.79 C +ATOM 2577 CZ PHE B 108 -20.642 59.030 27.819 1.00 45.92 C +ATOM 2578 N GLY B 109 -21.414 59.252 35.205 1.00 44.49 N +ATOM 2579 CA GLY B 109 -21.720 59.679 36.563 1.00 45.38 C +ATOM 2580 C GLY B 109 -23.031 60.431 36.674 1.00 46.22 C +ATOM 2581 O GLY B 109 -23.246 61.186 37.629 1.00 45.31 O +ATOM 2582 N LEU B 110 -23.915 60.210 35.703 1.00 46.86 N +ATOM 2583 CA LEU B 110 -25.206 60.885 35.678 1.00 48.45 C +ATOM 2584 C LEU B 110 -26.375 59.923 35.862 1.00 50.13 C +ATOM 2585 O LEU B 110 -27.451 60.334 36.301 1.00 51.16 O +ATOM 2586 CB LEU B 110 -25.374 61.662 34.359 1.00 45.65 C +ATOM 2587 CG LEU B 110 -24.238 62.591 33.903 1.00 42.71 C +ATOM 2588 CD1 LEU B 110 -24.548 63.131 32.530 1.00 38.88 C +ATOM 2589 CD2 LEU B 110 -24.028 63.735 34.889 1.00 41.85 C +ATOM 2590 N PHE B 111 -26.164 58.646 35.550 1.00 52.23 N +ATOM 2591 CA PHE B 111 -27.238 57.663 35.673 1.00 55.57 C +ATOM 2592 C PHE B 111 -26.924 56.427 36.519 1.00 58.30 C +ATOM 2593 O PHE B 111 -25.799 55.922 36.521 1.00 57.67 O +ATOM 2594 CB PHE B 111 -27.717 57.230 34.285 1.00 53.91 C +ATOM 2595 CG PHE B 111 -28.194 58.368 33.429 1.00 53.57 C +ATOM 2596 CD1 PHE B 111 -29.468 58.902 33.602 1.00 54.15 C +ATOM 2597 CD2 PHE B 111 -27.362 58.919 32.457 1.00 52.32 C +ATOM 2598 CE1 PHE B 111 -29.905 59.974 32.821 1.00 53.22 C +ATOM 2599 CE2 PHE B 111 -27.788 59.986 31.674 1.00 51.29 C +ATOM 2600 CZ PHE B 111 -29.062 60.513 31.855 1.00 52.68 C +ATOM 2601 N SER B 112 -27.948 55.954 37.230 1.00 62.76 N +ATOM 2602 CA SER B 112 -27.873 54.774 38.099 1.00 64.32 C +ATOM 2603 C SER B 112 -28.099 53.499 37.255 1.00 65.65 C +ATOM 2604 O SER B 112 -27.596 52.434 37.605 1.00 65.20 O +ATOM 2605 CB SER B 112 -28.947 54.889 39.206 1.00 65.54 C +ATOM 2606 OG SER B 112 -28.497 54.428 40.470 1.00 63.70 O +ATOM 2607 N SER B 113 -28.841 53.626 36.147 1.00 66.29 N +ATOM 2608 CA SER B 113 -29.153 52.511 35.233 1.00 68.45 C +ATOM 2609 C SER B 113 -29.427 52.994 33.798 1.00 69.08 C +ATOM 2610 O SER B 113 -29.362 54.186 33.513 1.00 70.67 O +ATOM 2611 CB SER B 113 -30.375 51.727 35.724 1.00 68.87 C +ATOM 2612 OG SER B 113 -31.582 52.385 35.362 1.00 68.41 O +ATOM 2613 N SER B 114 -29.806 52.073 32.913 1.00 70.78 N +ATOM 2614 CA SER B 114 -30.069 52.419 31.511 1.00 73.22 C +ATOM 2615 C SER B 114 -31.532 52.694 31.147 1.00 75.75 C +ATOM 2616 O SER B 114 -31.903 52.652 29.967 1.00 75.07 O +ATOM 2617 CB SER B 114 -29.511 51.335 30.582 1.00 72.47 C +ATOM 2618 OG SER B 114 -30.209 50.112 30.748 1.00 71.98 O +ATOM 2619 N ASP B 115 -32.350 52.993 32.154 1.00 79.01 N +ATOM 2620 CA ASP B 115 -33.767 53.275 31.939 1.00 82.13 C +ATOM 2621 C ASP B 115 -34.024 54.727 31.586 1.00 82.30 C +ATOM 2622 O ASP B 115 -33.128 55.564 31.679 1.00 83.56 O +ATOM 2623 CB ASP B 115 -34.578 52.933 33.190 1.00 86.39 C +ATOM 2624 CG ASP B 115 -34.532 51.460 33.530 1.00 92.12 C +ATOM 2625 OD1 ASP B 115 -34.686 50.624 32.607 1.00 94.21 O +ATOM 2626 OD2 ASP B 115 -34.343 51.139 34.725 1.00 95.43 O +ATOM 2627 N SER B 116 -35.266 55.013 31.205 1.00 82.07 N +ATOM 2628 CA SER B 116 -35.694 56.362 30.851 1.00 82.49 C +ATOM 2629 C SER B 116 -36.673 56.901 31.911 1.00 82.43 C +ATOM 2630 O SER B 116 -37.817 57.243 31.607 1.00 83.46 O +ATOM 2631 CB SER B 116 -36.345 56.357 29.462 1.00 82.74 C +ATOM 2632 OG SER B 116 -36.703 57.668 29.056 1.00 82.92 O +ATOM 2633 N LYS B 117 -36.203 56.983 33.156 1.00 81.95 N +ATOM 2634 CA LYS B 117 -37.014 57.462 34.276 1.00 81.28 C +ATOM 2635 C LYS B 117 -37.058 58.983 34.370 1.00 79.34 C +ATOM 2636 O LYS B 117 -36.026 59.634 34.532 1.00 79.88 O +ATOM 2637 CB LYS B 117 -36.492 56.874 35.593 1.00 83.80 C +ATOM 2638 CG LYS B 117 -36.495 55.350 35.615 1.00 87.97 C +ATOM 2639 CD LYS B 117 -35.908 54.773 36.900 1.00 91.11 C +ATOM 2640 CE LYS B 117 -35.945 53.245 36.856 1.00 92.56 C +ATOM 2641 NZ LYS B 117 -35.436 52.596 38.098 1.00 93.23 N +ATOM 2642 N SER B 118 -38.263 59.540 34.304 1.00 76.64 N +ATOM 2643 CA SER B 118 -38.450 60.988 34.380 1.00 73.72 C +ATOM 2644 C SER B 118 -37.954 61.562 35.700 1.00 70.57 C +ATOM 2645 O SER B 118 -37.825 62.777 35.846 1.00 70.27 O +ATOM 2646 CB SER B 118 -39.926 61.345 34.200 1.00 74.30 C +ATOM 2647 OG SER B 118 -40.701 60.889 35.294 1.00 73.49 O +ATOM 2648 N SER B 119 -37.682 60.675 36.652 1.00 68.30 N +ATOM 2649 CA SER B 119 -37.205 61.054 37.974 1.00 67.42 C +ATOM 2650 C SER B 119 -35.753 61.504 37.967 1.00 66.09 C +ATOM 2651 O SER B 119 -35.340 62.273 38.835 1.00 66.12 O +ATOM 2652 CB SER B 119 -37.375 59.890 38.954 1.00 67.24 C +ATOM 2653 OG SER B 119 -36.655 58.742 38.527 1.00 68.73 O +ATOM 2654 N ASN B 120 -34.986 61.018 36.994 1.00 64.77 N +ATOM 2655 CA ASN B 120 -33.574 61.374 36.870 1.00 63.78 C +ATOM 2656 C ASN B 120 -33.406 62.883 36.749 1.00 62.48 C +ATOM 2657 O ASN B 120 -32.446 63.456 37.274 1.00 64.08 O +ATOM 2658 CB ASN B 120 -32.955 60.693 35.649 1.00 63.95 C +ATOM 2659 CG ASN B 120 -33.047 59.188 35.718 1.00 63.42 C +ATOM 2660 OD1 ASN B 120 -33.434 58.534 34.750 1.00 61.77 O +ATOM 2661 ND2 ASN B 120 -32.700 58.627 36.872 1.00 64.42 N +ATOM 2662 N GLN B 121 -34.364 63.511 36.068 1.00 59.44 N +ATOM 2663 CA GLN B 121 -34.380 64.949 35.843 1.00 55.59 C +ATOM 2664 C GLN B 121 -33.022 65.434 35.388 1.00 55.46 C +ATOM 2665 O GLN B 121 -32.408 66.305 36.016 1.00 56.46 O +ATOM 2666 CB GLN B 121 -34.796 65.674 37.105 1.00 53.46 C +ATOM 2667 CG GLN B 121 -36.152 65.289 37.588 1.00 51.63 C +ATOM 2668 CD GLN B 121 -36.585 66.148 38.733 1.00 52.59 C +ATOM 2669 OE1 GLN B 121 -37.489 66.968 38.594 1.00 53.91 O +ATOM 2670 NE2 GLN B 121 -35.922 65.995 39.872 1.00 51.18 N +ATOM 2671 N ILE B 122 -32.549 64.844 34.298 1.00 52.85 N +ATOM 2672 CA ILE B 122 -31.253 65.190 33.746 1.00 49.51 C +ATOM 2673 C ILE B 122 -31.296 65.365 32.247 1.00 48.37 C +ATOM 2674 O ILE B 122 -31.937 64.601 31.532 1.00 50.82 O +ATOM 2675 CB ILE B 122 -30.192 64.125 34.114 1.00 48.41 C +ATOM 2676 CG1 ILE B 122 -29.728 64.349 35.548 1.00 49.27 C +ATOM 2677 CG2 ILE B 122 -29.008 64.172 33.161 1.00 45.29 C +ATOM 2678 CD1 ILE B 122 -28.717 63.351 36.015 1.00 53.61 C +ATOM 2679 N ILE B 123 -30.670 66.440 31.794 1.00 46.80 N +ATOM 2680 CA ILE B 123 -30.551 66.739 30.379 1.00 44.39 C +ATOM 2681 C ILE B 123 -29.052 66.933 30.216 1.00 41.72 C +ATOM 2682 O ILE B 123 -28.426 67.693 30.974 1.00 41.39 O +ATOM 2683 CB ILE B 123 -31.309 68.022 29.989 1.00 46.37 C +ATOM 2684 CG1 ILE B 123 -32.816 67.777 30.080 1.00 48.54 C +ATOM 2685 CG2 ILE B 123 -30.930 68.459 28.585 1.00 43.61 C +ATOM 2686 CD1 ILE B 123 -33.653 69.001 29.797 1.00 51.82 C +ATOM 2687 N ALA B 124 -28.461 66.204 29.277 1.00 37.62 N +ATOM 2688 CA ALA B 124 -27.028 66.316 29.079 1.00 35.04 C +ATOM 2689 C ALA B 124 -26.611 66.126 27.657 1.00 33.13 C +ATOM 2690 O ALA B 124 -27.316 65.507 26.871 1.00 34.31 O +ATOM 2691 CB ALA B 124 -26.309 65.321 29.943 1.00 35.67 C +ATOM 2692 N VAL B 125 -25.456 66.684 27.335 1.00 31.88 N +ATOM 2693 CA VAL B 125 -24.885 66.570 26.008 1.00 31.26 C +ATOM 2694 C VAL B 125 -23.637 65.714 26.200 1.00 33.00 C +ATOM 2695 O VAL B 125 -22.683 66.115 26.875 1.00 32.86 O +ATOM 2696 CB VAL B 125 -24.509 67.952 25.425 1.00 29.62 C +ATOM 2697 CG1 VAL B 125 -23.987 67.801 24.016 1.00 27.86 C +ATOM 2698 CG2 VAL B 125 -25.707 68.869 25.430 1.00 26.63 C +ATOM 2699 N GLU B 126 -23.676 64.512 25.645 1.00 34.12 N +ATOM 2700 CA GLU B 126 -22.569 63.589 25.775 1.00 35.34 C +ATOM 2701 C GLU B 126 -21.652 63.568 24.578 1.00 37.53 C +ATOM 2702 O GLU B 126 -22.080 63.752 23.438 1.00 38.92 O +ATOM 2703 CB GLU B 126 -23.078 62.167 26.034 1.00 36.66 C +ATOM 2704 CG GLU B 126 -23.931 61.579 24.911 1.00 39.20 C +ATOM 2705 CD GLU B 126 -24.233 60.096 25.104 1.00 43.38 C +ATOM 2706 OE1 GLU B 126 -24.485 59.658 26.247 1.00 43.05 O +ATOM 2707 OE2 GLU B 126 -24.221 59.354 24.102 1.00 47.08 O +ATOM 2708 N PHE B 127 -20.376 63.337 24.871 1.00 40.14 N +ATOM 2709 CA PHE B 127 -19.304 63.223 23.885 1.00 39.55 C +ATOM 2710 C PHE B 127 -18.720 61.844 24.146 1.00 39.27 C +ATOM 2711 O PHE B 127 -17.681 61.703 24.788 1.00 39.07 O +ATOM 2712 CB PHE B 127 -18.268 64.316 24.115 1.00 39.07 C +ATOM 2713 CG PHE B 127 -18.816 65.689 23.921 1.00 43.37 C +ATOM 2714 CD1 PHE B 127 -18.852 66.258 22.649 1.00 45.04 C +ATOM 2715 CD2 PHE B 127 -19.337 66.403 24.996 1.00 43.07 C +ATOM 2716 CE1 PHE B 127 -19.400 67.519 22.454 1.00 44.44 C +ATOM 2717 CE2 PHE B 127 -19.887 67.665 24.811 1.00 42.24 C +ATOM 2718 CZ PHE B 127 -19.919 68.224 23.541 1.00 43.74 C +ATOM 2719 N ASP B 128 -19.483 60.838 23.717 1.00 40.58 N +ATOM 2720 CA ASP B 128 -19.201 59.406 23.870 1.00 41.84 C +ATOM 2721 C ASP B 128 -18.045 58.924 22.997 1.00 44.03 C +ATOM 2722 O ASP B 128 -18.127 59.006 21.771 1.00 46.51 O +ATOM 2723 CB ASP B 128 -20.464 58.645 23.461 1.00 40.86 C +ATOM 2724 CG ASP B 128 -20.846 57.575 24.428 1.00 39.77 C +ATOM 2725 OD1 ASP B 128 -19.945 56.866 24.922 1.00 41.74 O +ATOM 2726 OD2 ASP B 128 -22.062 57.439 24.672 1.00 39.36 O +ATOM 2727 N THR B 129 -16.980 58.411 23.615 1.00 45.87 N +ATOM 2728 CA THR B 129 -15.825 57.895 22.862 1.00 47.33 C +ATOM 2729 C THR B 129 -15.896 56.372 22.753 1.00 50.28 C +ATOM 2730 O THR B 129 -15.270 55.764 21.872 1.00 52.09 O +ATOM 2731 CB THR B 129 -14.484 58.248 23.524 1.00 45.61 C +ATOM 2732 OG1 THR B 129 -14.554 57.948 24.919 1.00 45.94 O +ATOM 2733 CG2 THR B 129 -14.153 59.700 23.337 1.00 44.59 C +ATOM 2734 N TYR B 130 -16.629 55.761 23.681 1.00 51.37 N +ATOM 2735 CA TYR B 130 -16.796 54.321 23.693 1.00 52.92 C +ATOM 2736 C TYR B 130 -18.228 53.939 23.332 1.00 53.99 C +ATOM 2737 O TYR B 130 -19.191 54.373 23.980 1.00 52.77 O +ATOM 2738 CB TYR B 130 -16.434 53.758 25.055 1.00 55.72 C +ATOM 2739 CG TYR B 130 -16.714 52.286 25.152 1.00 58.54 C +ATOM 2740 CD1 TYR B 130 -15.865 51.359 24.555 1.00 59.20 C +ATOM 2741 CD2 TYR B 130 -17.871 51.820 25.781 1.00 59.69 C +ATOM 2742 CE1 TYR B 130 -16.164 50.000 24.576 1.00 61.59 C +ATOM 2743 CE2 TYR B 130 -18.183 50.465 25.808 1.00 60.47 C +ATOM 2744 CZ TYR B 130 -17.328 49.558 25.203 1.00 61.52 C +ATOM 2745 OH TYR B 130 -17.645 48.214 25.203 1.00 63.17 O +ATOM 2746 N PHE B 131 -18.347 53.047 22.353 1.00 55.22 N +ATOM 2747 CA PHE B 131 -19.648 52.611 21.863 1.00 56.89 C +ATOM 2748 C PHE B 131 -19.808 51.095 21.732 1.00 58.64 C +ATOM 2749 O PHE B 131 -20.786 50.630 21.127 1.00 60.68 O +ATOM 2750 CB PHE B 131 -19.892 53.248 20.504 1.00 55.60 C +ATOM 2751 CG PHE B 131 -18.815 52.951 19.505 1.00 55.45 C +ATOM 2752 CD1 PHE B 131 -17.558 53.554 19.614 1.00 55.40 C +ATOM 2753 CD2 PHE B 131 -19.057 52.078 18.447 1.00 54.31 C +ATOM 2754 CE1 PHE B 131 -16.558 53.295 18.683 1.00 54.83 C +ATOM 2755 CE2 PHE B 131 -18.069 51.810 17.510 1.00 53.48 C +ATOM 2756 CZ PHE B 131 -16.815 52.421 17.624 1.00 54.45 C +ATOM 2757 N GLY B 132 -18.850 50.339 22.269 1.00 59.17 N +ATOM 2758 CA GLY B 132 -18.903 48.883 22.204 1.00 60.33 C +ATOM 2759 C GLY B 132 -20.175 48.303 22.798 1.00 62.01 C +ATOM 2760 O GLY B 132 -20.552 48.638 23.924 1.00 61.74 O +ATOM 2761 N LYS B 133 -20.824 47.412 22.048 1.00 63.18 N +ATOM 2762 CA LYS B 133 -22.074 46.796 22.481 1.00 63.97 C +ATOM 2763 C LYS B 133 -22.000 45.782 23.627 1.00 63.67 C +ATOM 2764 O LYS B 133 -23.021 45.447 24.241 1.00 62.92 O +ATOM 2765 CB LYS B 133 -22.826 46.231 21.277 1.00 65.59 C +ATOM 2766 CG LYS B 133 -23.538 47.316 20.474 1.00 71.15 C +ATOM 2767 CD LYS B 133 -24.373 46.723 19.353 1.00 75.82 C +ATOM 2768 CE LYS B 133 -25.383 47.733 18.825 1.00 78.66 C +ATOM 2769 NZ LYS B 133 -26.368 48.140 19.878 1.00 80.65 N +ATOM 2770 N ALA B 134 -20.795 45.314 23.938 1.00 63.37 N +ATOM 2771 CA ALA B 134 -20.618 44.371 25.035 1.00 62.83 C +ATOM 2772 C ALA B 134 -21.044 45.039 26.362 1.00 64.17 C +ATOM 2773 O ALA B 134 -21.798 44.456 27.145 1.00 64.15 O +ATOM 2774 CB ALA B 134 -19.161 43.902 25.101 1.00 57.98 C +ATOM 2775 N TYR B 135 -20.627 46.291 26.571 1.00 65.73 N +ATOM 2776 CA TYR B 135 -20.948 47.022 27.803 1.00 66.33 C +ATOM 2777 C TYR B 135 -21.850 48.250 27.623 1.00 64.96 C +ATOM 2778 O TYR B 135 -22.432 48.730 28.594 1.00 65.31 O +ATOM 2779 CB TYR B 135 -19.661 47.430 28.531 1.00 70.72 C +ATOM 2780 CG TYR B 135 -18.672 46.296 28.714 1.00 77.64 C +ATOM 2781 CD1 TYR B 135 -18.773 45.414 29.796 1.00 79.55 C +ATOM 2782 CD2 TYR B 135 -17.635 46.100 27.797 1.00 80.90 C +ATOM 2783 CE1 TYR B 135 -17.859 44.357 29.958 1.00 83.23 C +ATOM 2784 CE2 TYR B 135 -16.720 45.051 27.944 1.00 85.10 C +ATOM 2785 CZ TYR B 135 -16.833 44.183 29.026 1.00 85.45 C +ATOM 2786 OH TYR B 135 -15.915 43.156 29.163 1.00 86.57 O +ATOM 2787 N ASN B 136 -21.939 48.773 26.400 1.00 62.67 N +ATOM 2788 CA ASN B 136 -22.782 49.937 26.090 1.00 59.74 C +ATOM 2789 C ASN B 136 -23.702 49.562 24.936 1.00 57.53 C +ATOM 2790 O ASN B 136 -23.507 50.010 23.810 1.00 57.26 O +ATOM 2791 CB ASN B 136 -21.929 51.135 25.645 1.00 62.35 C +ATOM 2792 CG ASN B 136 -21.303 51.895 26.800 1.00 62.16 C +ATOM 2793 OD1 ASN B 136 -20.871 53.037 26.627 1.00 64.86 O +ATOM 2794 ND2 ASN B 136 -21.237 51.274 27.971 1.00 64.04 N +ATOM 2795 N PRO B 137 -24.729 48.742 25.202 1.00 56.99 N +ATOM 2796 CA PRO B 137 -25.648 48.289 24.146 1.00 57.10 C +ATOM 2797 C PRO B 137 -26.542 49.361 23.500 1.00 57.68 C +ATOM 2798 O PRO B 137 -26.983 49.199 22.360 1.00 57.24 O +ATOM 2799 CB PRO B 137 -26.470 47.215 24.861 1.00 56.13 C +ATOM 2800 CG PRO B 137 -26.526 47.730 26.265 1.00 56.07 C +ATOM 2801 CD PRO B 137 -25.109 48.187 26.510 1.00 55.90 C +ATOM 2802 N TRP B 138 -26.780 50.457 24.221 1.00 57.08 N +ATOM 2803 CA TRP B 138 -27.622 51.560 23.754 1.00 56.02 C +ATOM 2804 C TRP B 138 -26.979 52.437 22.676 1.00 56.16 C +ATOM 2805 O TRP B 138 -27.679 52.964 21.818 1.00 56.81 O +ATOM 2806 CB TRP B 138 -28.016 52.432 24.941 1.00 55.17 C +ATOM 2807 CG TRP B 138 -26.820 52.862 25.742 1.00 56.79 C +ATOM 2808 CD1 TRP B 138 -25.932 53.851 25.424 1.00 57.17 C +ATOM 2809 CD2 TRP B 138 -26.346 52.283 26.971 1.00 56.75 C +ATOM 2810 NE1 TRP B 138 -24.934 53.918 26.364 1.00 58.68 N +ATOM 2811 CE2 TRP B 138 -25.168 52.968 27.324 1.00 57.61 C +ATOM 2812 CE3 TRP B 138 -26.814 51.257 27.800 1.00 56.63 C +ATOM 2813 CZ2 TRP B 138 -24.438 52.655 28.483 1.00 58.47 C +ATOM 2814 CZ3 TRP B 138 -26.088 50.948 28.952 1.00 56.38 C +ATOM 2815 CH2 TRP B 138 -24.915 51.647 29.280 1.00 57.52 C +ATOM 2816 N ASP B 139 -25.657 52.604 22.747 1.00 56.29 N +ATOM 2817 CA ASP B 139 -24.900 53.429 21.799 1.00 56.54 C +ATOM 2818 C ASP B 139 -24.912 52.906 20.360 1.00 55.75 C +ATOM 2819 O ASP B 139 -25.043 51.707 20.113 1.00 55.38 O +ATOM 2820 CB ASP B 139 -23.432 53.584 22.260 1.00 57.25 C +ATOM 2821 CG ASP B 139 -23.259 54.566 23.413 1.00 59.90 C +ATOM 2822 OD1 ASP B 139 -24.058 55.528 23.532 1.00 63.87 O +ATOM 2823 OD2 ASP B 139 -22.292 54.388 24.188 1.00 60.06 O +ATOM 2824 N PRO B 140 -24.798 53.819 19.389 1.00 56.07 N +ATOM 2825 CA PRO B 140 -24.729 53.483 17.967 1.00 57.15 C +ATOM 2826 C PRO B 140 -23.343 52.945 17.598 1.00 58.48 C +ATOM 2827 O PRO B 140 -22.443 52.873 18.441 1.00 57.39 O +ATOM 2828 CB PRO B 140 -25.001 54.825 17.296 1.00 57.64 C +ATOM 2829 CG PRO B 140 -24.403 55.798 18.253 1.00 56.37 C +ATOM 2830 CD PRO B 140 -24.908 55.276 19.569 1.00 56.48 C +ATOM 2831 N ASP B 141 -23.162 52.619 16.321 1.00 60.50 N +ATOM 2832 CA ASP B 141 -21.901 52.061 15.843 1.00 62.41 C +ATOM 2833 C ASP B 141 -20.747 53.014 15.578 1.00 61.46 C +ATOM 2834 O ASP B 141 -19.968 52.785 14.649 1.00 62.50 O +ATOM 2835 CB ASP B 141 -22.149 51.209 14.602 1.00 66.53 C +ATOM 2836 CG ASP B 141 -22.861 49.923 14.926 1.00 72.11 C +ATOM 2837 OD1 ASP B 141 -22.434 49.230 15.884 1.00 73.90 O +ATOM 2838 OD2 ASP B 141 -23.852 49.613 14.228 1.00 75.59 O +ATOM 2839 N PHE B 142 -20.597 54.046 16.406 1.00 59.65 N +ATOM 2840 CA PHE B 142 -19.502 55.013 16.224 1.00 57.05 C +ATOM 2841 C PHE B 142 -19.378 56.014 17.357 1.00 55.01 C +ATOM 2842 O PHE B 142 -20.280 56.139 18.192 1.00 54.71 O +ATOM 2843 CB PHE B 142 -19.663 55.778 14.901 1.00 56.20 C +ATOM 2844 CG PHE B 142 -21.070 56.253 14.637 1.00 55.20 C +ATOM 2845 CD1 PHE B 142 -21.768 57.002 15.584 1.00 54.70 C +ATOM 2846 CD2 PHE B 142 -21.704 55.929 13.447 1.00 54.45 C +ATOM 2847 CE1 PHE B 142 -23.074 57.413 15.348 1.00 54.13 C +ATOM 2848 CE2 PHE B 142 -23.014 56.338 13.203 1.00 54.88 C +ATOM 2849 CZ PHE B 142 -23.699 57.080 14.154 1.00 53.57 C +ATOM 2850 N LYS B 143 -18.240 56.702 17.400 1.00 52.44 N +ATOM 2851 CA LYS B 143 -18.043 57.726 18.414 1.00 51.53 C +ATOM 2852 C LYS B 143 -19.099 58.780 18.073 1.00 51.16 C +ATOM 2853 O LYS B 143 -19.292 59.132 16.899 1.00 51.28 O +ATOM 2854 CB LYS B 143 -16.620 58.289 18.353 1.00 51.07 C +ATOM 2855 CG LYS B 143 -15.572 57.324 18.895 1.00 49.32 C +ATOM 2856 CD LYS B 143 -14.159 57.862 18.749 1.00 47.48 C +ATOM 2857 CE LYS B 143 -13.125 56.782 19.065 1.00 48.11 C +ATOM 2858 NZ LYS B 143 -12.961 56.518 20.520 1.00 47.70 N +ATOM 2859 N HIS B 144 -19.806 59.258 19.091 1.00 49.62 N +ATOM 2860 CA HIS B 144 -20.883 60.202 18.853 1.00 46.57 C +ATOM 2861 C HIS B 144 -21.049 61.354 19.834 1.00 45.19 C +ATOM 2862 O HIS B 144 -20.404 61.411 20.880 1.00 43.99 O +ATOM 2863 CB HIS B 144 -22.186 59.410 18.824 1.00 44.66 C +ATOM 2864 CG HIS B 144 -22.407 58.578 20.057 1.00 43.94 C +ATOM 2865 ND1 HIS B 144 -21.789 57.372 20.252 1.00 44.47 N +ATOM 2866 CD2 HIS B 144 -23.181 58.796 21.148 1.00 45.86 C +ATOM 2867 CE1 HIS B 144 -22.174 56.867 21.420 1.00 44.67 C +ATOM 2868 NE2 HIS B 144 -23.015 57.712 21.980 1.00 41.75 N +ATOM 2869 N ILE B 145 -21.883 62.306 19.421 1.00 44.32 N +ATOM 2870 CA ILE B 145 -22.267 63.451 20.239 1.00 41.98 C +ATOM 2871 C ILE B 145 -23.730 63.119 20.427 1.00 41.42 C +ATOM 2872 O ILE B 145 -24.408 62.765 19.457 1.00 40.32 O +ATOM 2873 CB ILE B 145 -22.205 64.792 19.482 1.00 40.95 C +ATOM 2874 CG1 ILE B 145 -20.762 65.192 19.209 1.00 40.98 C +ATOM 2875 CG2 ILE B 145 -22.882 65.887 20.294 1.00 39.34 C +ATOM 2876 CD1 ILE B 145 -20.643 66.509 18.475 1.00 40.77 C +ATOM 2877 N GLY B 146 -24.217 63.191 21.657 1.00 41.36 N +ATOM 2878 CA GLY B 146 -25.613 62.866 21.868 1.00 40.92 C +ATOM 2879 C GLY B 146 -26.331 63.746 22.857 1.00 41.14 C +ATOM 2880 O GLY B 146 -25.724 64.296 23.781 1.00 41.01 O +ATOM 2881 N ILE B 147 -27.621 63.934 22.603 1.00 40.73 N +ATOM 2882 CA ILE B 147 -28.478 64.708 23.490 1.00 41.91 C +ATOM 2883 C ILE B 147 -29.168 63.654 24.372 1.00 42.49 C +ATOM 2884 O ILE B 147 -29.870 62.767 23.860 1.00 41.67 O +ATOM 2885 CB ILE B 147 -29.558 65.483 22.714 1.00 42.20 C +ATOM 2886 CG1 ILE B 147 -28.936 66.242 21.533 1.00 43.29 C +ATOM 2887 CG2 ILE B 147 -30.292 66.427 23.652 1.00 39.84 C +ATOM 2888 CD1 ILE B 147 -28.107 67.445 21.908 1.00 44.23 C +ATOM 2889 N ASP B 148 -28.928 63.721 25.680 1.00 40.21 N +ATOM 2890 CA ASP B 148 -29.513 62.766 26.607 1.00 39.09 C +ATOM 2891 C ASP B 148 -30.574 63.410 27.454 1.00 40.18 C +ATOM 2892 O ASP B 148 -30.328 64.438 28.093 1.00 41.10 O +ATOM 2893 CB ASP B 148 -28.437 62.187 27.517 1.00 37.12 C +ATOM 2894 CG ASP B 148 -27.356 61.474 26.753 1.00 36.28 C +ATOM 2895 OD1 ASP B 148 -27.577 61.101 25.583 1.00 38.04 O +ATOM 2896 OD2 ASP B 148 -26.270 61.288 27.327 1.00 35.67 O +ATOM 2897 N VAL B 149 -31.749 62.790 27.477 1.00 41.65 N +ATOM 2898 CA VAL B 149 -32.857 63.314 28.264 1.00 42.31 C +ATOM 2899 C VAL B 149 -33.420 62.235 29.163 1.00 43.33 C +ATOM 2900 O VAL B 149 -34.108 61.325 28.697 1.00 45.21 O +ATOM 2901 CB VAL B 149 -33.993 63.827 27.381 1.00 42.04 C +ATOM 2902 CG1 VAL B 149 -35.035 64.501 28.242 1.00 40.83 C +ATOM 2903 CG2 VAL B 149 -33.464 64.783 26.318 1.00 41.16 C +ATOM 2904 N ASN B 150 -33.113 62.345 30.452 1.00 43.89 N +ATOM 2905 CA ASN B 150 -33.561 61.394 31.459 1.00 44.15 C +ATOM 2906 C ASN B 150 -33.065 59.966 31.262 1.00 44.89 C +ATOM 2907 O ASN B 150 -33.404 59.085 32.044 1.00 46.21 O +ATOM 2908 CB ASN B 150 -35.087 61.411 31.559 1.00 44.71 C +ATOM 2909 CG ASN B 150 -35.593 62.553 32.398 1.00 46.00 C +ATOM 2910 OD1 ASN B 150 -36.711 63.036 32.215 1.00 46.43 O +ATOM 2911 ND2 ASN B 150 -34.772 62.989 33.345 1.00 47.31 N +ATOM 2912 N SER B 151 -32.230 59.747 30.251 1.00 45.83 N +ATOM 2913 CA SER B 151 -31.708 58.417 29.953 1.00 47.92 C +ATOM 2914 C SER B 151 -30.426 58.492 29.156 1.00 48.95 C +ATOM 2915 O SER B 151 -30.293 59.328 28.261 1.00 50.07 O +ATOM 2916 CB SER B 151 -32.735 57.612 29.146 1.00 49.25 C +ATOM 2917 OG SER B 151 -32.176 56.406 28.638 1.00 50.06 O +ATOM 2918 N ILE B 152 -29.519 57.563 29.441 1.00 50.53 N +ATOM 2919 CA ILE B 152 -28.226 57.485 28.765 1.00 52.04 C +ATOM 2920 C ILE B 152 -28.381 57.077 27.288 1.00 52.76 C +ATOM 2921 O ILE B 152 -27.424 57.147 26.495 1.00 53.57 O +ATOM 2922 CB ILE B 152 -27.277 56.514 29.508 1.00 52.39 C +ATOM 2923 CG1 ILE B 152 -25.839 56.641 28.989 1.00 51.80 C +ATOM 2924 CG2 ILE B 152 -27.790 55.092 29.384 1.00 53.94 C +ATOM 2925 CD1 ILE B 152 -25.171 57.963 29.313 1.00 50.39 C +ATOM 2926 N LYS B 153 -29.578 56.612 26.935 1.00 52.91 N +ATOM 2927 CA LYS B 153 -29.873 56.258 25.553 1.00 52.08 C +ATOM 2928 C LYS B 153 -30.314 57.582 24.908 1.00 50.49 C +ATOM 2929 O LYS B 153 -31.459 58.027 25.080 1.00 49.47 O +ATOM 2930 CB LYS B 153 -30.984 55.203 25.486 1.00 53.35 C +ATOM 2931 CG LYS B 153 -31.245 54.690 24.072 1.00 57.56 C +ATOM 2932 CD LYS B 153 -32.162 53.467 24.054 1.00 59.63 C +ATOM 2933 CE LYS B 153 -32.525 53.050 22.625 1.00 60.97 C +ATOM 2934 NZ LYS B 153 -31.321 52.846 21.766 1.00 62.84 N +ATOM 2935 N SER B 154 -29.363 58.243 24.247 1.00 47.97 N +ATOM 2936 CA SER B 154 -29.593 59.528 23.595 1.00 46.39 C +ATOM 2937 C SER B 154 -30.854 59.510 22.748 1.00 47.20 C +ATOM 2938 O SER B 154 -31.218 58.480 22.185 1.00 48.08 O +ATOM 2939 CB SER B 154 -28.404 59.894 22.711 1.00 44.77 C +ATOM 2940 OG SER B 154 -27.173 59.605 23.348 1.00 44.69 O +ATOM 2941 N ILE B 155 -31.540 60.646 22.687 1.00 46.42 N +ATOM 2942 CA ILE B 155 -32.761 60.746 21.893 1.00 45.82 C +ATOM 2943 C ILE B 155 -32.399 61.109 20.453 1.00 46.64 C +ATOM 2944 O ILE B 155 -33.242 61.031 19.549 1.00 47.49 O +ATOM 2945 CB ILE B 155 -33.718 61.808 22.452 1.00 43.17 C +ATOM 2946 CG1 ILE B 155 -33.115 63.200 22.260 1.00 42.90 C +ATOM 2947 CG2 ILE B 155 -33.980 61.539 23.917 1.00 43.99 C +ATOM 2948 CD1 ILE B 155 -34.045 64.312 22.608 1.00 41.28 C +ATOM 2949 N LYS B 156 -31.156 61.547 20.262 1.00 44.85 N +ATOM 2950 CA LYS B 156 -30.648 61.911 18.950 1.00 45.28 C +ATOM 2951 C LYS B 156 -29.144 61.976 19.052 1.00 45.21 C +ATOM 2952 O LYS B 156 -28.603 62.490 20.028 1.00 47.22 O +ATOM 2953 CB LYS B 156 -31.207 63.264 18.483 1.00 44.80 C +ATOM 2954 CG LYS B 156 -30.983 63.537 16.990 1.00 46.16 C +ATOM 2955 CD LYS B 156 -31.787 64.731 16.493 1.00 46.81 C +ATOM 2956 CE LYS B 156 -31.533 65.004 15.015 1.00 46.25 C +ATOM 2957 NZ LYS B 156 -32.200 66.262 14.569 1.00 47.06 N +ATOM 2958 N THR B 157 -28.471 61.401 18.066 1.00 45.64 N +ATOM 2959 CA THR B 157 -27.015 61.395 18.034 1.00 47.30 C +ATOM 2960 C THR B 157 -26.533 61.785 16.650 1.00 48.27 C +ATOM 2961 O THR B 157 -27.321 61.902 15.710 1.00 49.82 O +ATOM 2962 CB THR B 157 -26.426 59.992 18.358 1.00 47.69 C +ATOM 2963 OG1 THR B 157 -27.037 59.000 17.524 1.00 46.73 O +ATOM 2964 CG2 THR B 157 -26.653 59.631 19.803 1.00 49.42 C +ATOM 2965 N VAL B 158 -25.229 62.000 16.540 1.00 48.91 N +ATOM 2966 CA VAL B 158 -24.597 62.346 15.275 1.00 48.60 C +ATOM 2967 C VAL B 158 -23.158 61.869 15.416 1.00 49.64 C +ATOM 2968 O VAL B 158 -22.584 61.886 16.520 1.00 48.23 O +ATOM 2969 CB VAL B 158 -24.648 63.871 14.976 1.00 47.18 C +ATOM 2970 CG1 VAL B 158 -23.903 64.657 16.047 1.00 48.82 C +ATOM 2971 CG2 VAL B 158 -24.051 64.162 13.608 1.00 48.56 C +ATOM 2972 N LYS B 159 -22.602 61.377 14.315 1.00 50.69 N +ATOM 2973 CA LYS B 159 -21.237 60.886 14.326 1.00 51.65 C +ATOM 2974 C LYS B 159 -20.269 61.990 14.714 1.00 50.18 C +ATOM 2975 O LYS B 159 -20.316 63.105 14.176 1.00 49.32 O +ATOM 2976 CB LYS B 159 -20.848 60.320 12.962 1.00 54.47 C +ATOM 2977 CG LYS B 159 -19.466 59.705 12.955 1.00 58.01 C +ATOM 2978 CD LYS B 159 -19.046 59.306 11.564 1.00 61.80 C +ATOM 2979 CE LYS B 159 -17.635 58.747 11.584 1.00 65.37 C +ATOM 2980 NZ LYS B 159 -17.127 58.470 10.210 1.00 67.50 N +ATOM 2981 N TRP B 160 -19.408 61.668 15.670 1.00 47.67 N +ATOM 2982 CA TRP B 160 -18.403 62.599 16.153 1.00 46.77 C +ATOM 2983 C TRP B 160 -17.059 62.280 15.505 1.00 47.53 C +ATOM 2984 O TRP B 160 -16.505 61.192 15.708 1.00 49.32 O +ATOM 2985 CB TRP B 160 -18.297 62.499 17.682 1.00 45.12 C +ATOM 2986 CG TRP B 160 -17.254 63.387 18.297 1.00 40.70 C +ATOM 2987 CD1 TRP B 160 -16.631 64.457 17.718 1.00 39.87 C +ATOM 2988 CD2 TRP B 160 -16.705 63.270 19.611 1.00 39.92 C +ATOM 2989 NE1 TRP B 160 -15.723 65.010 18.584 1.00 37.33 N +ATOM 2990 CE2 TRP B 160 -15.748 64.303 19.758 1.00 38.90 C +ATOM 2991 CE3 TRP B 160 -16.927 62.392 20.678 1.00 40.07 C +ATOM 2992 CZ2 TRP B 160 -15.012 64.485 20.932 1.00 37.90 C +ATOM 2993 CZ3 TRP B 160 -16.195 62.572 21.845 1.00 39.71 C +ATOM 2994 CH2 TRP B 160 -15.247 63.615 21.961 1.00 39.36 C +ATOM 2995 N ASP B 161 -16.550 63.220 14.710 1.00 47.18 N +ATOM 2996 CA ASP B 161 -15.259 63.045 14.046 1.00 46.87 C +ATOM 2997 C ASP B 161 -14.122 63.446 14.982 1.00 45.85 C +ATOM 2998 O ASP B 161 -13.358 64.368 14.689 1.00 46.08 O +ATOM 2999 CB ASP B 161 -15.193 63.857 12.746 1.00 48.56 C +ATOM 3000 CG ASP B 161 -16.129 63.318 11.666 1.00 50.06 C +ATOM 3001 OD1 ASP B 161 -16.016 62.121 11.312 1.00 50.15 O +ATOM 3002 OD2 ASP B 161 -16.968 64.097 11.160 1.00 49.05 O +ATOM 3003 N TRP B 162 -14.019 62.727 16.099 1.00 44.69 N +ATOM 3004 CA TRP B 162 -13.006 62.958 17.122 1.00 44.08 C +ATOM 3005 C TRP B 162 -11.583 62.996 16.607 1.00 43.99 C +ATOM 3006 O TRP B 162 -11.181 62.141 15.826 1.00 46.13 O +ATOM 3007 CB TRP B 162 -13.102 61.870 18.181 1.00 47.13 C +ATOM 3008 CG TRP B 162 -11.978 61.876 19.185 1.00 51.50 C +ATOM 3009 CD1 TRP B 162 -11.670 62.866 20.088 1.00 52.29 C +ATOM 3010 CD2 TRP B 162 -11.055 60.812 19.438 1.00 53.79 C +ATOM 3011 NE1 TRP B 162 -10.619 62.474 20.889 1.00 52.12 N +ATOM 3012 CE2 TRP B 162 -10.224 61.220 20.509 1.00 53.28 C +ATOM 3013 CE3 TRP B 162 -10.855 59.552 18.858 1.00 54.90 C +ATOM 3014 CZ2 TRP B 162 -9.213 60.406 21.020 1.00 54.45 C +ATOM 3015 CZ3 TRP B 162 -9.849 58.742 19.369 1.00 56.17 C +ATOM 3016 CH2 TRP B 162 -9.039 59.174 20.439 1.00 57.07 C +ATOM 3017 N ARG B 163 -10.831 63.993 17.058 1.00 43.49 N +ATOM 3018 CA ARG B 163 -9.427 64.142 16.694 1.00 44.52 C +ATOM 3019 C ARG B 163 -8.634 63.968 17.986 1.00 44.79 C +ATOM 3020 O ARG B 163 -8.715 64.800 18.903 1.00 44.19 O +ATOM 3021 CB ARG B 163 -9.152 65.519 16.090 1.00 45.06 C +ATOM 3022 CG ARG B 163 -9.866 65.783 14.780 1.00 48.71 C +ATOM 3023 CD ARG B 163 -9.476 64.776 13.720 1.00 53.61 C +ATOM 3024 NE ARG B 163 -10.003 65.127 12.400 1.00 59.54 N +ATOM 3025 CZ ARG B 163 -10.739 64.315 11.638 1.00 63.59 C +ATOM 3026 NH1 ARG B 163 -11.045 63.091 12.062 1.00 65.52 N +ATOM 3027 NH2 ARG B 163 -11.165 64.720 10.442 1.00 64.19 N +ATOM 3028 N ASN B 164 -7.913 62.854 18.077 1.00 44.97 N +ATOM 3029 CA ASN B 164 -7.125 62.557 19.265 1.00 45.37 C +ATOM 3030 C ASN B 164 -6.155 63.677 19.633 1.00 44.64 C +ATOM 3031 O ASN B 164 -5.368 64.128 18.800 1.00 43.73 O +ATOM 3032 CB ASN B 164 -6.363 61.235 19.095 1.00 46.95 C +ATOM 3033 CG ASN B 164 -5.558 60.849 20.341 1.00 49.92 C +ATOM 3034 OD1 ASN B 164 -4.496 60.242 20.240 1.00 54.61 O +ATOM 3035 ND2 ASN B 164 -6.063 61.208 21.515 1.00 49.40 N +ATOM 3036 N GLY B 165 -6.259 64.135 20.880 1.00 44.92 N +ATOM 3037 CA GLY B 165 -5.388 65.180 21.390 1.00 43.72 C +ATOM 3038 C GLY B 165 -5.676 66.589 20.910 1.00 44.72 C +ATOM 3039 O GLY B 165 -5.096 67.549 21.425 1.00 43.36 O +ATOM 3040 N GLU B 166 -6.542 66.729 19.909 1.00 45.58 N +ATOM 3041 CA GLU B 166 -6.863 68.049 19.402 1.00 43.77 C +ATOM 3042 C GLU B 166 -7.917 68.724 20.242 1.00 42.93 C +ATOM 3043 O GLU B 166 -8.761 68.058 20.862 1.00 41.79 O +ATOM 3044 CB GLU B 166 -7.296 67.992 17.940 1.00 46.28 C +ATOM 3045 CG GLU B 166 -6.149 67.742 16.982 1.00 50.82 C +ATOM 3046 CD GLU B 166 -4.973 68.687 17.211 1.00 54.96 C +ATOM 3047 OE1 GLU B 166 -5.161 69.843 17.674 1.00 57.86 O +ATOM 3048 OE2 GLU B 166 -3.842 68.258 16.923 1.00 59.07 O +ATOM 3049 N VAL B 167 -7.817 70.051 20.285 1.00 42.08 N +ATOM 3050 CA VAL B 167 -8.733 70.907 21.035 1.00 39.49 C +ATOM 3051 C VAL B 167 -10.014 71.161 20.256 1.00 40.01 C +ATOM 3052 O VAL B 167 -9.976 71.550 19.079 1.00 41.27 O +ATOM 3053 CB VAL B 167 -8.098 72.275 21.318 1.00 37.34 C +ATOM 3054 CG1 VAL B 167 -9.050 73.141 22.117 1.00 36.26 C +ATOM 3055 CG2 VAL B 167 -6.799 72.097 22.056 1.00 38.88 C +ATOM 3056 N ALA B 168 -11.144 70.959 20.929 1.00 39.62 N +ATOM 3057 CA ALA B 168 -12.459 71.181 20.331 1.00 39.07 C +ATOM 3058 C ALA B 168 -13.138 72.390 20.965 1.00 39.26 C +ATOM 3059 O ALA B 168 -13.045 72.605 22.181 1.00 41.43 O +ATOM 3060 CB ALA B 168 -13.344 69.943 20.502 1.00 36.02 C +ATOM 3061 N ASP B 169 -13.768 73.205 20.126 1.00 38.40 N +ATOM 3062 CA ASP B 169 -14.507 74.371 20.592 1.00 39.02 C +ATOM 3063 C ASP B 169 -15.991 74.018 20.483 1.00 38.27 C +ATOM 3064 O ASP B 169 -16.492 73.708 19.387 1.00 39.99 O +ATOM 3065 CB ASP B 169 -14.196 75.597 19.724 1.00 40.94 C +ATOM 3066 CG ASP B 169 -12.805 76.167 19.978 1.00 43.58 C +ATOM 3067 OD1 ASP B 169 -12.308 76.074 21.128 1.00 45.02 O +ATOM 3068 OD2 ASP B 169 -12.217 76.733 19.026 1.00 43.49 O +ATOM 3069 N VAL B 170 -16.681 74.001 21.616 1.00 34.42 N +ATOM 3070 CA VAL B 170 -18.092 73.680 21.596 1.00 33.83 C +ATOM 3071 C VAL B 170 -18.915 74.890 21.985 1.00 34.64 C +ATOM 3072 O VAL B 170 -18.531 75.687 22.849 1.00 35.82 O +ATOM 3073 CB VAL B 170 -18.451 72.530 22.548 1.00 34.57 C +ATOM 3074 CG1 VAL B 170 -19.824 71.999 22.219 1.00 34.29 C +ATOM 3075 CG2 VAL B 170 -17.442 71.419 22.451 1.00 34.48 C +ATOM 3076 N VAL B 171 -20.021 75.051 21.281 1.00 33.14 N +ATOM 3077 CA VAL B 171 -20.956 76.130 21.535 1.00 31.75 C +ATOM 3078 C VAL B 171 -22.306 75.447 21.578 1.00 32.35 C +ATOM 3079 O VAL B 171 -22.713 74.778 20.622 1.00 33.79 O +ATOM 3080 CB VAL B 171 -20.966 77.178 20.407 1.00 28.89 C +ATOM 3081 CG1 VAL B 171 -22.119 78.129 20.600 1.00 24.64 C +ATOM 3082 CG2 VAL B 171 -19.669 77.951 20.400 1.00 30.61 C +ATOM 3083 N ILE B 172 -22.958 75.537 22.723 1.00 31.33 N +ATOM 3084 CA ILE B 172 -24.269 74.939 22.874 1.00 30.61 C +ATOM 3085 C ILE B 172 -25.212 76.084 23.132 1.00 31.65 C +ATOM 3086 O ILE B 172 -24.889 76.988 23.905 1.00 32.58 O +ATOM 3087 CB ILE B 172 -24.328 74.006 24.070 1.00 28.28 C +ATOM 3088 CG1 ILE B 172 -23.389 72.824 23.871 1.00 27.92 C +ATOM 3089 CG2 ILE B 172 -25.737 73.513 24.266 1.00 29.87 C +ATOM 3090 CD1 ILE B 172 -23.206 72.004 25.129 1.00 27.93 C +ATOM 3091 N THR B 173 -26.362 76.067 22.465 1.00 33.87 N +ATOM 3092 CA THR B 173 -27.359 77.121 22.641 1.00 33.35 C +ATOM 3093 C THR B 173 -28.719 76.520 22.955 1.00 32.80 C +ATOM 3094 O THR B 173 -29.038 75.410 22.522 1.00 35.27 O +ATOM 3095 CB THR B 173 -27.520 77.990 21.358 1.00 32.50 C +ATOM 3096 OG1 THR B 173 -28.170 77.232 20.323 1.00 34.61 O +ATOM 3097 CG2 THR B 173 -26.176 78.449 20.859 1.00 33.00 C +ATOM 3098 N TYR B 174 -29.502 77.229 23.753 1.00 31.61 N +ATOM 3099 CA TYR B 174 -30.842 76.768 24.049 1.00 31.82 C +ATOM 3100 C TYR B 174 -31.796 77.928 23.886 1.00 32.70 C +ATOM 3101 O TYR B 174 -31.759 78.900 24.656 1.00 31.51 O +ATOM 3102 CB TYR B 174 -30.997 76.200 25.446 1.00 29.75 C +ATOM 3103 CG TYR B 174 -32.414 75.722 25.639 1.00 30.83 C +ATOM 3104 CD1 TYR B 174 -32.894 74.625 24.921 1.00 30.48 C +ATOM 3105 CD2 TYR B 174 -33.297 76.396 26.486 1.00 30.75 C +ATOM 3106 CE1 TYR B 174 -34.219 74.211 25.044 1.00 31.81 C +ATOM 3107 CE2 TYR B 174 -34.621 75.995 26.615 1.00 29.71 C +ATOM 3108 CZ TYR B 174 -35.077 74.900 25.893 1.00 31.75 C +ATOM 3109 OH TYR B 174 -36.383 74.475 26.024 1.00 32.21 O +ATOM 3110 N ARG B 175 -32.656 77.805 22.883 1.00 32.81 N +ATOM 3111 CA ARG B 175 -33.625 78.833 22.581 1.00 34.98 C +ATOM 3112 C ARG B 175 -35.002 78.421 23.090 1.00 35.98 C +ATOM 3113 O ARG B 175 -35.739 77.688 22.423 1.00 34.64 O +ATOM 3114 CB ARG B 175 -33.603 79.129 21.075 1.00 36.63 C +ATOM 3115 CG ARG B 175 -32.284 79.785 20.629 1.00 42.76 C +ATOM 3116 CD ARG B 175 -32.071 79.794 19.119 1.00 47.83 C +ATOM 3117 NE ARG B 175 -31.141 80.847 18.685 1.00 52.09 N +ATOM 3118 CZ ARG B 175 -29.883 80.654 18.276 1.00 55.79 C +ATOM 3119 NH1 ARG B 175 -29.342 79.434 18.239 1.00 54.87 N +ATOM 3120 NH2 ARG B 175 -29.175 81.693 17.840 1.00 58.00 N +ATOM 3121 N ALA B 176 -35.323 78.897 24.296 1.00 36.47 N +ATOM 3122 CA ALA B 176 -36.591 78.608 24.963 1.00 37.47 C +ATOM 3123 C ALA B 176 -37.845 78.762 24.099 1.00 38.08 C +ATOM 3124 O ALA B 176 -38.691 77.869 24.078 1.00 39.36 O +ATOM 3125 CB ALA B 176 -36.724 79.428 26.232 1.00 35.48 C +ATOM 3126 N PRO B 177 -37.985 79.883 23.370 1.00 38.05 N +ATOM 3127 CA PRO B 177 -39.171 80.057 22.530 1.00 37.68 C +ATOM 3128 C PRO B 177 -39.449 78.871 21.607 1.00 38.99 C +ATOM 3129 O PRO B 177 -40.584 78.405 21.521 1.00 39.27 O +ATOM 3130 CB PRO B 177 -38.838 81.315 21.732 1.00 35.96 C +ATOM 3131 CG PRO B 177 -38.074 82.117 22.700 1.00 36.59 C +ATOM 3132 CD PRO B 177 -37.133 81.087 23.300 1.00 39.69 C +ATOM 3133 N THR B 178 -38.407 78.346 20.966 1.00 39.28 N +ATOM 3134 CA THR B 178 -38.578 77.231 20.043 1.00 37.55 C +ATOM 3135 C THR B 178 -38.163 75.891 20.603 1.00 37.32 C +ATOM 3136 O THR B 178 -38.055 74.919 19.866 1.00 36.72 O +ATOM 3137 CB THR B 178 -37.826 77.478 18.735 1.00 37.39 C +ATOM 3138 OG1 THR B 178 -36.416 77.422 18.970 1.00 38.60 O +ATOM 3139 CG2 THR B 178 -38.177 78.842 18.194 1.00 36.91 C +ATOM 3140 N LYS B 179 -37.893 75.852 21.902 1.00 39.67 N +ATOM 3141 CA LYS B 179 -37.503 74.618 22.583 1.00 42.14 C +ATOM 3142 C LYS B 179 -36.409 73.810 21.873 1.00 42.47 C +ATOM 3143 O LYS B 179 -36.417 72.579 21.929 1.00 41.89 O +ATOM 3144 CB LYS B 179 -38.740 73.737 22.786 1.00 41.79 C +ATOM 3145 CG LYS B 179 -39.868 74.426 23.536 1.00 44.86 C +ATOM 3146 CD LYS B 179 -41.116 73.565 23.573 1.00 47.81 C +ATOM 3147 CE LYS B 179 -42.230 74.253 24.339 1.00 51.15 C +ATOM 3148 NZ LYS B 179 -43.481 73.443 24.361 1.00 53.61 N +ATOM 3149 N SER B 180 -35.468 74.489 21.213 1.00 42.29 N +ATOM 3150 CA SER B 180 -34.414 73.775 20.505 1.00 40.91 C +ATOM 3151 C SER B 180 -33.034 73.893 21.129 1.00 39.09 C +ATOM 3152 O SER B 180 -32.633 74.952 21.622 1.00 38.91 O +ATOM 3153 CB SER B 180 -34.364 74.182 19.032 1.00 42.31 C +ATOM 3154 OG SER B 180 -33.678 75.404 18.857 1.00 47.19 O +ATOM 3155 N LEU B 181 -32.308 72.784 21.066 1.00 37.54 N +ATOM 3156 CA LEU B 181 -30.959 72.680 21.607 1.00 35.42 C +ATOM 3157 C LEU B 181 -29.983 72.438 20.466 1.00 33.73 C +ATOM 3158 O LEU B 181 -30.169 71.525 19.664 1.00 35.00 O +ATOM 3159 CB LEU B 181 -30.890 71.522 22.597 1.00 32.17 C +ATOM 3160 CG LEU B 181 -29.653 71.487 23.476 1.00 30.60 C +ATOM 3161 CD1 LEU B 181 -29.511 72.808 24.189 1.00 31.71 C +ATOM 3162 CD2 LEU B 181 -29.782 70.375 24.473 1.00 29.33 C +ATOM 3163 N THR B 182 -28.945 73.256 20.386 1.00 32.60 N +ATOM 3164 CA THR B 182 -27.987 73.092 19.314 1.00 32.30 C +ATOM 3165 C THR B 182 -26.559 72.982 19.803 1.00 33.15 C +ATOM 3166 O THR B 182 -26.046 73.880 20.470 1.00 34.26 O +ATOM 3167 CB THR B 182 -28.090 74.238 18.301 1.00 31.02 C +ATOM 3168 OG1 THR B 182 -29.455 74.374 17.895 1.00 32.25 O +ATOM 3169 CG2 THR B 182 -27.239 73.955 17.074 1.00 25.95 C +ATOM 3170 N VAL B 183 -25.942 71.849 19.488 1.00 31.81 N +ATOM 3171 CA VAL B 183 -24.562 71.594 19.844 1.00 32.35 C +ATOM 3172 C VAL B 183 -23.730 71.913 18.616 1.00 35.03 C +ATOM 3173 O VAL B 183 -23.951 71.374 17.526 1.00 35.01 O +ATOM 3174 CB VAL B 183 -24.347 70.143 20.232 1.00 32.95 C +ATOM 3175 CG1 VAL B 183 -22.890 69.916 20.582 1.00 33.83 C +ATOM 3176 CG2 VAL B 183 -25.246 69.785 21.395 1.00 32.86 C +ATOM 3177 N CYS B 184 -22.732 72.757 18.818 1.00 37.15 N +ATOM 3178 CA CYS B 184 -21.885 73.202 17.733 1.00 39.51 C +ATOM 3179 C CYS B 184 -20.410 72.958 18.042 1.00 39.13 C +ATOM 3180 O CYS B 184 -19.759 73.784 18.694 1.00 38.71 O +ATOM 3181 CB CYS B 184 -22.127 74.688 17.536 1.00 42.24 C +ATOM 3182 SG CYS B 184 -21.761 75.237 15.859 1.00 53.62 S +ATOM 3183 N LEU B 185 -19.877 71.844 17.537 1.00 38.62 N +ATOM 3184 CA LEU B 185 -18.477 71.480 17.775 1.00 36.11 C +ATOM 3185 C LEU B 185 -17.571 71.681 16.563 1.00 35.35 C +ATOM 3186 O LEU B 185 -17.966 71.403 15.433 1.00 33.51 O +ATOM 3187 CB LEU B 185 -18.401 70.023 18.241 1.00 34.08 C +ATOM 3188 CG LEU B 185 -17.059 69.471 18.732 1.00 34.24 C +ATOM 3189 CD1 LEU B 185 -17.314 68.336 19.710 1.00 32.87 C +ATOM 3190 CD2 LEU B 185 -16.194 69.005 17.571 1.00 35.28 C +ATOM 3191 N SER B 186 -16.341 72.125 16.816 1.00 35.63 N +ATOM 3192 CA SER B 186 -15.368 72.345 15.748 1.00 36.91 C +ATOM 3193 C SER B 186 -13.926 72.273 16.242 1.00 39.28 C +ATOM 3194 O SER B 186 -13.613 72.685 17.359 1.00 40.78 O +ATOM 3195 CB SER B 186 -15.598 73.697 15.083 1.00 34.27 C +ATOM 3196 OG SER B 186 -15.407 74.749 16.008 1.00 34.47 O +ATOM 3197 N TYR B 187 -13.054 71.718 15.405 1.00 41.61 N +ATOM 3198 CA TYR B 187 -11.634 71.599 15.716 1.00 40.29 C +ATOM 3199 C TYR B 187 -10.925 72.642 14.880 1.00 42.74 C +ATOM 3200 O TYR B 187 -10.803 72.491 13.665 1.00 43.32 O +ATOM 3201 CB TYR B 187 -11.118 70.217 15.336 1.00 37.84 C +ATOM 3202 CG TYR B 187 -11.530 69.121 16.286 1.00 36.08 C +ATOM 3203 CD1 TYR B 187 -10.915 68.992 17.532 1.00 36.51 C +ATOM 3204 CD2 TYR B 187 -12.529 68.210 15.946 1.00 34.08 C +ATOM 3205 CE1 TYR B 187 -11.285 67.987 18.419 1.00 34.66 C +ATOM 3206 CE2 TYR B 187 -12.907 67.196 16.830 1.00 33.10 C +ATOM 3207 CZ TYR B 187 -12.282 67.093 18.061 1.00 34.24 C +ATOM 3208 OH TYR B 187 -12.650 66.103 18.946 1.00 36.86 O +ATOM 3209 N PRO B 188 -10.463 73.724 15.514 1.00 44.06 N +ATOM 3210 CA PRO B 188 -9.771 74.800 14.788 1.00 46.08 C +ATOM 3211 C PRO B 188 -8.510 74.361 14.032 1.00 47.65 C +ATOM 3212 O PRO B 188 -8.178 74.929 12.988 1.00 48.28 O +ATOM 3213 CB PRO B 188 -9.455 75.808 15.894 1.00 45.30 C +ATOM 3214 CG PRO B 188 -9.353 74.950 17.123 1.00 45.58 C +ATOM 3215 CD PRO B 188 -10.501 73.995 16.958 1.00 43.91 C +ATOM 3216 N SER B 189 -7.850 73.317 14.531 1.00 49.52 N +ATOM 3217 CA SER B 189 -6.631 72.803 13.919 1.00 50.25 C +ATOM 3218 C SER B 189 -6.800 72.342 12.480 1.00 50.91 C +ATOM 3219 O SER B 189 -5.976 72.685 11.636 1.00 53.22 O +ATOM 3220 CB SER B 189 -6.049 71.657 14.749 1.00 51.39 C +ATOM 3221 OG SER B 189 -6.852 70.490 14.650 1.00 55.29 O +ATOM 3222 N ASP B 190 -7.853 71.574 12.192 1.00 51.21 N +ATOM 3223 CA ASP B 190 -8.071 71.074 10.831 1.00 51.99 C +ATOM 3224 C ASP B 190 -9.452 71.337 10.212 1.00 51.71 C +ATOM 3225 O ASP B 190 -9.858 70.642 9.274 1.00 54.00 O +ATOM 3226 CB ASP B 190 -7.735 69.575 10.753 1.00 53.89 C +ATOM 3227 CG ASP B 190 -8.781 68.693 11.423 1.00 55.61 C +ATOM 3228 OD1 ASP B 190 -9.550 69.192 12.267 1.00 58.47 O +ATOM 3229 OD2 ASP B 190 -8.838 67.491 11.098 1.00 56.49 O +ATOM 3230 N GLY B 191 -10.182 72.311 10.756 1.00 50.06 N +ATOM 3231 CA GLY B 191 -11.496 72.659 10.236 1.00 47.07 C +ATOM 3232 C GLY B 191 -12.618 71.647 10.394 1.00 46.90 C +ATOM 3233 O GLY B 191 -13.750 71.919 9.988 1.00 49.90 O +ATOM 3234 N THR B 192 -12.319 70.483 10.969 1.00 44.80 N +ATOM 3235 CA THR B 192 -13.318 69.436 11.181 1.00 42.04 C +ATOM 3236 C THR B 192 -14.385 69.933 12.153 1.00 41.99 C +ATOM 3237 O THR B 192 -14.060 70.397 13.249 1.00 41.53 O +ATOM 3238 CB THR B 192 -12.677 68.173 11.793 1.00 41.13 C +ATOM 3239 OG1 THR B 192 -11.654 67.679 10.919 1.00 41.48 O +ATOM 3240 CG2 THR B 192 -13.727 67.093 12.018 1.00 38.54 C +ATOM 3241 N SER B 193 -15.654 69.823 11.762 1.00 39.94 N +ATOM 3242 CA SER B 193 -16.751 70.267 12.622 1.00 37.30 C +ATOM 3243 C SER B 193 -18.009 69.412 12.520 1.00 35.35 C +ATOM 3244 O SER B 193 -18.288 68.831 11.480 1.00 35.72 O +ATOM 3245 CB SER B 193 -17.074 71.744 12.368 1.00 37.74 C +ATOM 3246 OG SER B 193 -17.298 72.011 10.996 1.00 39.43 O +ATOM 3247 N ASN B 194 -18.746 69.322 13.626 1.00 36.82 N +ATOM 3248 CA ASN B 194 -19.985 68.532 13.713 1.00 37.34 C +ATOM 3249 C ASN B 194 -21.086 69.361 14.364 1.00 36.94 C +ATOM 3250 O ASN B 194 -20.801 70.272 15.145 1.00 38.66 O +ATOM 3251 CB ASN B 194 -19.773 67.267 14.560 1.00 38.13 C +ATOM 3252 CG ASN B 194 -18.693 66.352 14.005 1.00 37.33 C +ATOM 3253 OD1 ASN B 194 -18.669 66.061 12.813 1.00 38.85 O +ATOM 3254 ND2 ASN B 194 -17.799 65.892 14.873 1.00 36.10 N +ATOM 3255 N ILE B 195 -22.341 69.013 14.091 1.00 36.08 N +ATOM 3256 CA ILE B 195 -23.465 69.757 14.653 1.00 35.65 C +ATOM 3257 C ILE B 195 -24.711 68.904 14.838 1.00 36.61 C +ATOM 3258 O ILE B 195 -24.980 67.976 14.060 1.00 34.90 O +ATOM 3259 CB ILE B 195 -23.833 70.995 13.781 1.00 35.22 C +ATOM 3260 CG1 ILE B 195 -24.842 71.882 14.516 1.00 33.88 C +ATOM 3261 CG2 ILE B 195 -24.413 70.556 12.435 1.00 32.19 C +ATOM 3262 CD1 ILE B 195 -25.129 73.191 13.827 1.00 31.20 C +ATOM 3263 N ILE B 196 -25.485 69.260 15.860 1.00 37.19 N +ATOM 3264 CA ILE B 196 -26.713 68.556 16.182 1.00 36.07 C +ATOM 3265 C ILE B 196 -27.727 69.475 16.876 1.00 36.23 C +ATOM 3266 O ILE B 196 -27.363 70.338 17.676 1.00 37.39 O +ATOM 3267 CB ILE B 196 -26.414 67.299 17.045 1.00 35.86 C +ATOM 3268 CG1 ILE B 196 -27.691 66.508 17.298 1.00 39.33 C +ATOM 3269 CG2 ILE B 196 -25.772 67.683 18.368 1.00 38.48 C +ATOM 3270 CD1 ILE B 196 -28.392 66.079 16.025 1.00 46.58 C +ATOM 3271 N THR B 197 -28.997 69.312 16.513 1.00 37.02 N +ATOM 3272 CA THR B 197 -30.091 70.093 17.085 1.00 35.30 C +ATOM 3273 C THR B 197 -31.203 69.152 17.474 1.00 34.72 C +ATOM 3274 O THR B 197 -31.449 68.167 16.789 1.00 34.80 O +ATOM 3275 CB THR B 197 -30.681 71.051 16.076 1.00 33.73 C +ATOM 3276 OG1 THR B 197 -29.652 71.913 15.597 1.00 37.42 O +ATOM 3277 CG2 THR B 197 -31.782 71.875 16.718 1.00 34.29 C +ATOM 3278 N ALA B 198 -31.906 69.480 18.546 1.00 35.16 N +ATOM 3279 CA ALA B 198 -33.007 68.649 19.004 1.00 36.48 C +ATOM 3280 C ALA B 198 -33.983 69.486 19.809 1.00 38.03 C +ATOM 3281 O ALA B 198 -33.606 70.511 20.372 1.00 39.59 O +ATOM 3282 CB ALA B 198 -32.479 67.506 19.840 1.00 35.37 C +ATOM 3283 N SER B 199 -35.245 69.069 19.827 1.00 39.60 N +ATOM 3284 CA SER B 199 -36.271 69.781 20.582 1.00 42.80 C +ATOM 3285 C SER B 199 -36.407 69.206 21.981 1.00 43.85 C +ATOM 3286 O SER B 199 -36.508 67.989 22.162 1.00 45.52 O +ATOM 3287 CB SER B 199 -37.621 69.736 19.859 1.00 43.03 C +ATOM 3288 OG SER B 199 -37.578 70.553 18.701 1.00 51.40 O +ATOM 3289 N VAL B 200 -36.380 70.088 22.973 1.00 42.99 N +ATOM 3290 CA VAL B 200 -36.498 69.675 24.360 1.00 43.42 C +ATOM 3291 C VAL B 200 -37.204 70.751 25.174 1.00 44.97 C +ATOM 3292 O VAL B 200 -36.913 71.942 25.014 1.00 44.54 O +ATOM 3293 CB VAL B 200 -35.115 69.492 25.004 1.00 42.57 C +ATOM 3294 CG1 VAL B 200 -35.261 68.824 26.355 1.00 42.89 C +ATOM 3295 CG2 VAL B 200 -34.194 68.709 24.103 1.00 41.69 C +ATOM 3296 N ASP B 201 -38.126 70.340 26.045 1.00 45.38 N +ATOM 3297 CA ASP B 201 -38.812 71.298 26.903 1.00 46.69 C +ATOM 3298 C ASP B 201 -38.272 71.151 28.318 1.00 46.98 C +ATOM 3299 O ASP B 201 -38.669 70.247 29.057 1.00 48.55 O +ATOM 3300 CB ASP B 201 -40.328 71.085 26.904 1.00 49.19 C +ATOM 3301 CG ASP B 201 -41.075 72.160 27.701 1.00 52.37 C +ATOM 3302 OD1 ASP B 201 -40.429 73.023 28.342 1.00 52.53 O +ATOM 3303 OD2 ASP B 201 -42.323 72.148 27.675 1.00 55.85 O +ATOM 3304 N LEU B 202 -37.391 72.066 28.700 1.00 45.08 N +ATOM 3305 CA LEU B 202 -36.791 72.043 30.026 1.00 44.49 C +ATOM 3306 C LEU B 202 -37.835 71.987 31.137 1.00 44.36 C +ATOM 3307 O LEU B 202 -37.685 71.233 32.099 1.00 44.85 O +ATOM 3308 CB LEU B 202 -35.931 73.282 30.236 1.00 45.35 C +ATOM 3309 CG LEU B 202 -34.833 73.584 29.220 1.00 46.08 C +ATOM 3310 CD1 LEU B 202 -34.089 74.832 29.667 1.00 46.08 C +ATOM 3311 CD2 LEU B 202 -33.879 72.409 29.094 1.00 45.39 C +ATOM 3312 N LYS B 203 -38.885 72.791 31.000 1.00 43.99 N +ATOM 3313 CA LYS B 203 -39.947 72.852 31.994 1.00 44.14 C +ATOM 3314 C LYS B 203 -40.512 71.461 32.272 1.00 44.87 C +ATOM 3315 O LYS B 203 -40.765 71.091 33.424 1.00 43.70 O +ATOM 3316 CB LYS B 203 -41.057 73.784 31.513 1.00 45.21 C +ATOM 3317 CG LYS B 203 -42.063 74.147 32.586 1.00 48.48 C +ATOM 3318 CD LYS B 203 -43.338 74.766 32.021 1.00 50.32 C +ATOM 3319 CE LYS B 203 -43.105 76.137 31.440 1.00 51.75 C +ATOM 3320 NZ LYS B 203 -44.366 76.754 30.938 1.00 53.45 N +ATOM 3321 N ALA B 204 -40.648 70.671 31.211 1.00 45.33 N +ATOM 3322 CA ALA B 204 -41.188 69.320 31.318 1.00 44.93 C +ATOM 3323 C ALA B 204 -40.209 68.275 31.842 1.00 45.15 C +ATOM 3324 O ALA B 204 -40.604 67.140 32.095 1.00 46.09 O +ATOM 3325 CB ALA B 204 -41.743 68.879 29.970 1.00 43.96 C +ATOM 3326 N ILE B 205 -38.949 68.651 32.049 1.00 45.83 N +ATOM 3327 CA ILE B 205 -37.950 67.683 32.508 1.00 44.29 C +ATOM 3328 C ILE B 205 -37.168 68.005 33.778 1.00 44.11 C +ATOM 3329 O ILE B 205 -37.002 67.136 34.641 1.00 46.47 O +ATOM 3330 CB ILE B 205 -36.974 67.341 31.361 1.00 43.90 C +ATOM 3331 CG1 ILE B 205 -37.752 66.663 30.227 1.00 43.66 C +ATOM 3332 CG2 ILE B 205 -35.857 66.420 31.855 1.00 41.68 C +ATOM 3333 CD1 ILE B 205 -37.271 67.019 28.842 1.00 46.16 C +ATOM 3334 N LEU B 206 -36.670 69.232 33.892 1.00 42.40 N +ATOM 3335 CA LEU B 206 -35.896 69.626 35.062 1.00 40.30 C +ATOM 3336 C LEU B 206 -36.752 70.442 36.019 1.00 40.23 C +ATOM 3337 O LEU B 206 -37.802 70.958 35.631 1.00 39.70 O +ATOM 3338 CB LEU B 206 -34.689 70.463 34.632 1.00 39.55 C +ATOM 3339 CG LEU B 206 -33.805 69.920 33.505 1.00 40.96 C +ATOM 3340 CD1 LEU B 206 -32.882 71.007 33.013 1.00 41.33 C +ATOM 3341 CD2 LEU B 206 -33.011 68.722 33.966 1.00 41.47 C +ATOM 3342 N PRO B 207 -36.359 70.497 37.306 1.00 41.01 N +ATOM 3343 CA PRO B 207 -37.072 71.324 38.291 1.00 40.98 C +ATOM 3344 C PRO B 207 -36.633 72.782 38.088 1.00 41.94 C +ATOM 3345 O PRO B 207 -35.697 73.057 37.328 1.00 42.33 O +ATOM 3346 CB PRO B 207 -36.576 70.768 39.626 1.00 39.51 C +ATOM 3347 CG PRO B 207 -35.168 70.363 39.313 1.00 38.82 C +ATOM 3348 CD PRO B 207 -35.319 69.682 37.964 1.00 40.53 C +ATOM 3349 N GLU B 208 -37.292 73.715 38.763 1.00 41.56 N +ATOM 3350 CA GLU B 208 -36.950 75.119 38.608 1.00 40.93 C +ATOM 3351 C GLU B 208 -35.473 75.426 38.802 1.00 39.84 C +ATOM 3352 O GLU B 208 -34.876 76.147 38.008 1.00 40.36 O +ATOM 3353 CB GLU B 208 -37.756 75.961 39.575 1.00 44.42 C +ATOM 3354 CG GLU B 208 -39.236 75.926 39.350 1.00 50.90 C +ATOM 3355 CD GLU B 208 -39.970 76.731 40.395 1.00 55.68 C +ATOM 3356 OE1 GLU B 208 -39.888 77.984 40.363 1.00 56.17 O +ATOM 3357 OE2 GLU B 208 -40.612 76.100 41.263 1.00 59.69 O +ATOM 3358 N TRP B 209 -34.891 74.878 39.860 1.00 37.87 N +ATOM 3359 CA TRP B 209 -33.493 75.120 40.166 1.00 36.86 C +ATOM 3360 C TRP B 209 -32.577 73.974 39.825 1.00 36.73 C +ATOM 3361 O TRP B 209 -32.659 72.903 40.420 1.00 39.61 O +ATOM 3362 CB TRP B 209 -33.346 75.456 41.635 1.00 38.42 C +ATOM 3363 CG TRP B 209 -34.009 76.721 41.970 1.00 40.25 C +ATOM 3364 CD1 TRP B 209 -35.292 76.887 42.395 1.00 39.96 C +ATOM 3365 CD2 TRP B 209 -33.438 78.029 41.880 1.00 41.72 C +ATOM 3366 NE1 TRP B 209 -35.562 78.219 42.576 1.00 42.39 N +ATOM 3367 CE2 TRP B 209 -34.435 78.944 42.268 1.00 43.56 C +ATOM 3368 CE3 TRP B 209 -32.172 78.514 41.514 1.00 39.68 C +ATOM 3369 CZ2 TRP B 209 -34.218 80.326 42.297 1.00 45.37 C +ATOM 3370 CZ3 TRP B 209 -31.949 79.881 41.543 1.00 40.59 C +ATOM 3371 CH2 TRP B 209 -32.967 80.774 41.933 1.00 44.88 C +ATOM 3372 N VAL B 210 -31.681 74.221 38.882 1.00 35.81 N +ATOM 3373 CA VAL B 210 -30.722 73.216 38.453 1.00 35.62 C +ATOM 3374 C VAL B 210 -29.278 73.619 38.780 1.00 37.18 C +ATOM 3375 O VAL B 210 -29.003 74.704 39.308 1.00 35.16 O +ATOM 3376 CB VAL B 210 -30.824 72.951 36.929 1.00 33.24 C +ATOM 3377 CG1 VAL B 210 -32.169 72.349 36.591 1.00 33.97 C +ATOM 3378 CG2 VAL B 210 -30.613 74.237 36.151 1.00 30.12 C +ATOM 3379 N SER B 211 -28.367 72.702 38.482 1.00 38.42 N +ATOM 3380 CA SER B 211 -26.940 72.898 38.680 1.00 38.87 C +ATOM 3381 C SER B 211 -26.323 72.452 37.370 1.00 37.67 C +ATOM 3382 O SER B 211 -26.718 71.423 36.822 1.00 38.81 O +ATOM 3383 CB SER B 211 -26.426 72.017 39.822 1.00 39.44 C +ATOM 3384 OG SER B 211 -26.227 72.773 41.009 1.00 44.60 O +ATOM 3385 N VAL B 212 -25.404 73.247 36.833 1.00 37.32 N +ATOM 3386 CA VAL B 212 -24.757 72.888 35.573 1.00 36.75 C +ATOM 3387 C VAL B 212 -23.294 72.547 35.760 1.00 36.96 C +ATOM 3388 O VAL B 212 -22.652 72.995 36.709 1.00 37.26 O +ATOM 3389 CB VAL B 212 -24.856 74.010 34.510 1.00 36.22 C +ATOM 3390 CG1 VAL B 212 -26.293 74.209 34.095 1.00 36.34 C +ATOM 3391 CG2 VAL B 212 -24.251 75.307 35.033 1.00 34.10 C +ATOM 3392 N GLY B 213 -22.770 71.745 34.842 1.00 37.98 N +ATOM 3393 CA GLY B 213 -21.373 71.369 34.907 1.00 37.20 C +ATOM 3394 C GLY B 213 -21.009 70.308 33.901 1.00 35.85 C +ATOM 3395 O GLY B 213 -21.746 70.044 32.943 1.00 35.52 O +ATOM 3396 N PHE B 214 -19.858 69.694 34.135 1.00 36.72 N +ATOM 3397 CA PHE B 214 -19.364 68.638 33.270 1.00 37.67 C +ATOM 3398 C PHE B 214 -19.159 67.359 34.054 1.00 38.79 C +ATOM 3399 O PHE B 214 -19.127 67.361 35.286 1.00 39.13 O +ATOM 3400 CB PHE B 214 -18.028 69.027 32.653 1.00 36.33 C +ATOM 3401 CG PHE B 214 -18.046 70.344 31.947 1.00 36.26 C +ATOM 3402 CD1 PHE B 214 -18.378 70.421 30.605 1.00 34.87 C +ATOM 3403 CD2 PHE B 214 -17.689 71.503 32.616 1.00 36.24 C +ATOM 3404 CE1 PHE B 214 -18.354 71.637 29.936 1.00 33.43 C +ATOM 3405 CE2 PHE B 214 -17.662 72.721 31.953 1.00 37.68 C +ATOM 3406 CZ PHE B 214 -17.994 72.785 30.605 1.00 34.70 C +ATOM 3407 N SER B 215 -19.022 66.264 33.321 1.00 40.19 N +ATOM 3408 CA SER B 215 -18.783 64.961 33.913 1.00 42.54 C +ATOM 3409 C SER B 215 -18.194 64.028 32.856 1.00 45.65 C +ATOM 3410 O SER B 215 -18.247 64.307 31.652 1.00 44.84 O +ATOM 3411 CB SER B 215 -20.069 64.368 34.498 1.00 39.68 C +ATOM 3412 OG SER B 215 -20.973 63.992 33.483 1.00 39.48 O +ATOM 3413 N GLY B 216 -17.598 62.937 33.321 1.00 49.06 N +ATOM 3414 CA GLY B 216 -17.002 61.972 32.416 1.00 49.71 C +ATOM 3415 C GLY B 216 -16.521 60.749 33.168 1.00 50.39 C +ATOM 3416 O GLY B 216 -16.641 60.669 34.396 1.00 50.98 O +ATOM 3417 N GLY B 217 -15.968 59.794 32.429 1.00 50.86 N +ATOM 3418 CA GLY B 217 -15.473 58.583 33.048 1.00 50.99 C +ATOM 3419 C GLY B 217 -14.489 57.815 32.189 1.00 52.15 C +ATOM 3420 O GLY B 217 -14.242 58.163 31.027 1.00 50.94 O +ATOM 3421 N VAL B 218 -13.895 56.793 32.804 1.00 54.65 N +ATOM 3422 CA VAL B 218 -12.922 55.887 32.182 1.00 55.55 C +ATOM 3423 C VAL B 218 -13.185 54.536 32.857 1.00 57.42 C +ATOM 3424 O VAL B 218 -12.765 54.309 33.995 1.00 57.81 O +ATOM 3425 CB VAL B 218 -11.448 56.331 32.460 1.00 54.39 C +ATOM 3426 CG1 VAL B 218 -10.477 55.305 31.912 1.00 53.59 C +ATOM 3427 CG2 VAL B 218 -11.162 57.685 31.825 1.00 53.53 C +ATOM 3428 N GLY B 219 -13.910 53.660 32.165 1.00 59.36 N +ATOM 3429 CA GLY B 219 -14.261 52.361 32.727 1.00 62.88 C +ATOM 3430 C GLY B 219 -13.255 51.241 32.541 1.00 63.66 C +ATOM 3431 O GLY B 219 -13.513 50.088 32.930 1.00 65.41 O +ATOM 3432 N ASN B 220 -12.103 51.589 31.975 1.00 62.55 N +ATOM 3433 CA ASN B 220 -11.042 50.629 31.716 1.00 62.54 C +ATOM 3434 C ASN B 220 -9.708 51.346 31.518 1.00 59.98 C +ATOM 3435 O ASN B 220 -9.449 51.912 30.454 1.00 57.16 O +ATOM 3436 CB ASN B 220 -11.397 49.801 30.475 1.00 66.29 C +ATOM 3437 CG ASN B 220 -10.231 48.976 29.964 1.00 70.12 C +ATOM 3438 OD1 ASN B 220 -9.987 48.915 28.756 1.00 71.38 O +ATOM 3439 ND2 ASN B 220 -9.498 48.340 30.882 1.00 73.20 N +ATOM 3440 N ALA B 221 -8.854 51.282 32.536 1.00 60.24 N +ATOM 3441 CA ALA B 221 -7.542 51.931 32.499 1.00 60.50 C +ATOM 3442 C ALA B 221 -6.652 51.508 31.319 1.00 59.90 C +ATOM 3443 O ALA B 221 -5.653 52.175 31.011 1.00 58.08 O +ATOM 3444 CB ALA B 221 -6.815 51.716 33.820 1.00 61.64 C +ATOM 3445 N ALA B 222 -7.020 50.409 30.659 1.00 57.63 N +ATOM 3446 CA ALA B 222 -6.262 49.922 29.510 1.00 58.53 C +ATOM 3447 C ALA B 222 -6.425 50.877 28.329 1.00 59.62 C +ATOM 3448 O ALA B 222 -5.447 51.208 27.645 1.00 58.98 O +ATOM 3449 CB ALA B 222 -6.719 48.513 29.123 1.00 57.59 C +ATOM 3450 N GLU B 223 -7.661 51.324 28.105 1.00 60.18 N +ATOM 3451 CA GLU B 223 -7.960 52.243 27.013 1.00 61.35 C +ATOM 3452 C GLU B 223 -8.153 53.682 27.503 1.00 59.22 C +ATOM 3453 O GLU B 223 -9.142 54.342 27.181 1.00 60.25 O +ATOM 3454 CB GLU B 223 -9.186 51.760 26.237 1.00 65.83 C +ATOM 3455 CG GLU B 223 -8.950 50.486 25.434 1.00 73.69 C +ATOM 3456 CD GLU B 223 -10.135 50.136 24.543 1.00 80.18 C +ATOM 3457 OE1 GLU B 223 -11.167 49.662 25.085 1.00 83.60 O +ATOM 3458 OE2 GLU B 223 -10.037 50.346 23.306 1.00 82.92 O +ATOM 3459 N PHE B 224 -7.152 54.168 28.233 1.00 56.90 N +ATOM 3460 CA PHE B 224 -7.132 55.507 28.822 1.00 54.30 C +ATOM 3461 C PHE B 224 -7.101 56.702 27.865 1.00 53.41 C +ATOM 3462 O PHE B 224 -6.441 56.671 26.820 1.00 54.98 O +ATOM 3463 CB PHE B 224 -5.940 55.611 29.783 1.00 52.97 C +ATOM 3464 CG PHE B 224 -5.740 56.982 30.376 1.00 51.52 C +ATOM 3465 CD1 PHE B 224 -4.968 57.935 29.711 1.00 50.85 C +ATOM 3466 CD2 PHE B 224 -6.319 57.318 31.604 1.00 50.33 C +ATOM 3467 CE1 PHE B 224 -4.774 59.195 30.257 1.00 52.07 C +ATOM 3468 CE2 PHE B 224 -6.132 58.577 32.165 1.00 50.48 C +ATOM 3469 CZ PHE B 224 -5.360 59.520 31.492 1.00 52.94 C +ATOM 3470 N GLU B 225 -7.774 57.773 28.290 1.00 51.43 N +ATOM 3471 CA GLU B 225 -7.840 59.046 27.570 1.00 48.96 C +ATOM 3472 C GLU B 225 -8.210 60.125 28.581 1.00 48.59 C +ATOM 3473 O GLU B 225 -8.847 59.842 29.610 1.00 47.97 O +ATOM 3474 CB GLU B 225 -8.886 59.019 26.453 1.00 47.72 C +ATOM 3475 CG GLU B 225 -10.304 59.134 26.946 1.00 45.63 C +ATOM 3476 CD GLU B 225 -11.341 58.973 25.852 1.00 47.47 C +ATOM 3477 OE1 GLU B 225 -10.992 58.670 24.683 1.00 46.51 O +ATOM 3478 OE2 GLU B 225 -12.531 59.146 26.176 1.00 48.55 O +ATOM 3479 N THR B 226 -7.777 61.353 28.316 1.00 47.58 N +ATOM 3480 CA THR B 226 -8.102 62.454 29.211 1.00 46.69 C +ATOM 3481 C THR B 226 -9.460 63.055 28.871 1.00 47.25 C +ATOM 3482 O THR B 226 -10.044 62.764 27.822 1.00 47.57 O +ATOM 3483 CB THR B 226 -7.038 63.567 29.176 1.00 45.13 C +ATOM 3484 OG1 THR B 226 -6.798 63.981 27.821 1.00 41.39 O +ATOM 3485 CG2 THR B 226 -5.756 63.077 29.822 1.00 43.92 C +ATOM 3486 N HIS B 227 -9.989 63.835 29.808 1.00 47.43 N +ATOM 3487 CA HIS B 227 -11.266 64.518 29.634 1.00 45.58 C +ATOM 3488 C HIS B 227 -11.043 65.864 30.298 1.00 45.43 C +ATOM 3489 O HIS B 227 -11.522 66.144 31.407 1.00 45.34 O +ATOM 3490 CB HIS B 227 -12.383 63.721 30.291 1.00 43.37 C +ATOM 3491 CG HIS B 227 -12.564 62.362 29.696 1.00 43.30 C +ATOM 3492 ND1 HIS B 227 -13.275 62.155 28.535 1.00 44.70 N +ATOM 3493 CD2 HIS B 227 -12.097 61.150 30.074 1.00 42.53 C +ATOM 3494 CE1 HIS B 227 -13.240 60.869 28.222 1.00 41.80 C +ATOM 3495 NE2 HIS B 227 -12.531 60.240 29.141 1.00 44.49 N +ATOM 3496 N ASP B 228 -10.229 66.660 29.610 1.00 43.88 N +ATOM 3497 CA ASP B 228 -9.823 67.977 30.072 1.00 43.43 C +ATOM 3498 C ASP B 228 -10.572 69.124 29.424 1.00 41.23 C +ATOM 3499 O ASP B 228 -10.570 69.268 28.200 1.00 42.55 O +ATOM 3500 CB ASP B 228 -8.322 68.190 29.810 1.00 46.28 C +ATOM 3501 CG ASP B 228 -7.435 67.136 30.474 1.00 48.43 C +ATOM 3502 OD1 ASP B 228 -7.936 66.270 31.243 1.00 49.67 O +ATOM 3503 OD2 ASP B 228 -6.213 67.185 30.206 1.00 50.50 O +ATOM 3504 N VAL B 229 -11.210 69.940 30.253 1.00 37.96 N +ATOM 3505 CA VAL B 229 -11.916 71.115 29.769 1.00 35.72 C +ATOM 3506 C VAL B 229 -11.013 72.297 30.120 1.00 34.68 C +ATOM 3507 O VAL B 229 -10.541 72.417 31.252 1.00 32.46 O +ATOM 3508 CB VAL B 229 -13.353 71.218 30.351 1.00 34.58 C +ATOM 3509 CG1 VAL B 229 -13.482 70.387 31.588 1.00 36.82 C +ATOM 3510 CG2 VAL B 229 -13.733 72.654 30.622 1.00 34.88 C +ATOM 3511 N LEU B 230 -10.720 73.107 29.101 1.00 36.05 N +ATOM 3512 CA LEU B 230 -9.818 74.261 29.188 1.00 36.45 C +ATOM 3513 C LEU B 230 -10.401 75.604 29.568 1.00 37.05 C +ATOM 3514 O LEU B 230 -9.732 76.409 30.227 1.00 38.04 O +ATOM 3515 CB LEU B 230 -9.091 74.439 27.855 1.00 36.12 C +ATOM 3516 CG LEU B 230 -7.904 73.527 27.518 1.00 39.17 C +ATOM 3517 CD1 LEU B 230 -8.151 72.061 27.892 1.00 38.91 C +ATOM 3518 CD2 LEU B 230 -7.627 73.661 26.032 1.00 38.68 C +ATOM 3519 N SER B 231 -11.604 75.881 29.074 1.00 37.07 N +ATOM 3520 CA SER B 231 -12.267 77.153 29.336 1.00 36.47 C +ATOM 3521 C SER B 231 -13.776 76.951 29.333 1.00 36.25 C +ATOM 3522 O SER B 231 -14.274 76.000 28.712 1.00 36.22 O +ATOM 3523 CB SER B 231 -11.861 78.184 28.274 1.00 36.40 C +ATOM 3524 OG SER B 231 -12.242 77.756 26.969 1.00 39.05 O +ATOM 3525 N TRP B 232 -14.495 77.869 29.988 1.00 35.36 N +ATOM 3526 CA TRP B 232 -15.949 77.774 30.097 1.00 33.41 C +ATOM 3527 C TRP B 232 -16.689 79.092 30.250 1.00 33.27 C +ATOM 3528 O TRP B 232 -16.468 79.850 31.197 1.00 33.06 O +ATOM 3529 CB TRP B 232 -16.299 76.878 31.277 1.00 31.90 C +ATOM 3530 CG TRP B 232 -17.729 76.518 31.400 1.00 32.61 C +ATOM 3531 CD1 TRP B 232 -18.655 76.420 30.397 1.00 32.13 C +ATOM 3532 CD2 TRP B 232 -18.376 76.102 32.592 1.00 35.17 C +ATOM 3533 NE1 TRP B 232 -19.840 75.946 30.896 1.00 31.55 N +ATOM 3534 CE2 TRP B 232 -19.700 75.738 32.243 1.00 35.95 C +ATOM 3535 CE3 TRP B 232 -17.972 75.982 33.930 1.00 35.64 C +ATOM 3536 CZ2 TRP B 232 -20.623 75.266 33.195 1.00 38.18 C +ATOM 3537 CZ3 TRP B 232 -18.881 75.516 34.874 1.00 35.52 C +ATOM 3538 CH2 TRP B 232 -20.193 75.158 34.501 1.00 37.68 C +ATOM 3539 N TYR B 233 -17.608 79.327 29.322 1.00 34.01 N +ATOM 3540 CA TYR B 233 -18.432 80.516 29.334 1.00 32.30 C +ATOM 3541 C TYR B 233 -19.880 80.070 29.486 1.00 31.97 C +ATOM 3542 O TYR B 233 -20.334 79.144 28.805 1.00 29.96 O +ATOM 3543 CB TYR B 233 -18.282 81.270 28.025 1.00 34.86 C +ATOM 3544 CG TYR B 233 -19.240 82.425 27.925 1.00 40.32 C +ATOM 3545 CD1 TYR B 233 -18.963 83.628 28.573 1.00 43.48 C +ATOM 3546 CD2 TYR B 233 -20.446 82.308 27.227 1.00 40.15 C +ATOM 3547 CE1 TYR B 233 -19.857 84.686 28.539 1.00 44.79 C +ATOM 3548 CE2 TYR B 233 -21.350 83.361 27.190 1.00 43.20 C +ATOM 3549 CZ TYR B 233 -21.044 84.549 27.852 1.00 45.07 C +ATOM 3550 OH TYR B 233 -21.916 85.609 27.853 1.00 48.39 O +ATOM 3551 N PHE B 234 -20.608 80.726 30.378 1.00 30.74 N +ATOM 3552 CA PHE B 234 -22.003 80.380 30.571 1.00 31.51 C +ATOM 3553 C PHE B 234 -22.866 81.595 30.856 1.00 33.22 C +ATOM 3554 O PHE B 234 -22.518 82.457 31.664 1.00 34.45 O +ATOM 3555 CB PHE B 234 -22.172 79.357 31.696 1.00 30.42 C +ATOM 3556 CG PHE B 234 -23.575 78.850 31.840 1.00 28.98 C +ATOM 3557 CD1 PHE B 234 -23.997 77.744 31.118 1.00 31.52 C +ATOM 3558 CD2 PHE B 234 -24.492 79.505 32.654 1.00 28.76 C +ATOM 3559 CE1 PHE B 234 -25.322 77.289 31.197 1.00 33.01 C +ATOM 3560 CE2 PHE B 234 -25.816 79.062 32.743 1.00 30.96 C +ATOM 3561 CZ PHE B 234 -26.233 77.951 32.010 1.00 31.87 C +ATOM 3562 N THR B 235 -24.001 81.653 30.178 1.00 34.34 N +ATOM 3563 CA THR B 235 -24.943 82.735 30.368 1.00 34.34 C +ATOM 3564 C THR B 235 -26.338 82.160 30.246 1.00 35.09 C +ATOM 3565 O THR B 235 -26.612 81.341 29.369 1.00 34.39 O +ATOM 3566 CB THR B 235 -24.748 83.861 29.341 1.00 33.57 C +ATOM 3567 OG1 THR B 235 -25.570 84.976 29.702 1.00 34.02 O +ATOM 3568 CG2 THR B 235 -25.129 83.398 27.961 1.00 31.76 C +ATOM 3569 N SER B 236 -27.195 82.553 31.177 1.00 37.91 N +ATOM 3570 CA SER B 236 -28.582 82.114 31.222 1.00 38.59 C +ATOM 3571 C SER B 236 -29.451 83.336 31.418 1.00 40.76 C +ATOM 3572 O SER B 236 -29.010 84.341 31.971 1.00 41.05 O +ATOM 3573 CB SER B 236 -28.790 81.161 32.390 1.00 38.28 C +ATOM 3574 OG SER B 236 -29.958 81.494 33.118 1.00 41.94 O +ATOM 3575 N ASN B 237 -30.702 83.235 31.004 1.00 44.39 N +ATOM 3576 CA ASN B 237 -31.617 84.352 31.155 1.00 48.56 C +ATOM 3577 C ASN B 237 -33.079 83.955 31.017 1.00 50.23 C +ATOM 3578 O ASN B 237 -33.458 83.305 30.042 1.00 51.43 O +ATOM 3579 CB ASN B 237 -31.272 85.435 30.148 1.00 53.10 C +ATOM 3580 CG ASN B 237 -32.216 86.612 30.220 1.00 58.03 C +ATOM 3581 OD1 ASN B 237 -33.150 86.703 29.424 1.00 62.28 O +ATOM 3582 ND2 ASN B 237 -31.986 87.519 31.178 1.00 58.05 N +ATOM 3583 N LEU B 238 -33.888 84.370 31.997 1.00 52.10 N +ATOM 3584 CA LEU B 238 -35.328 84.087 32.054 1.00 52.81 C +ATOM 3585 C LEU B 238 -36.217 84.961 31.160 1.00 54.99 C +ATOM 3586 O LEU B 238 -36.478 86.130 31.485 1.00 57.98 O +ATOM 3587 CB LEU B 238 -35.811 84.195 33.496 1.00 49.37 C +ATOM 3588 CG LEU B 238 -35.741 82.886 34.263 1.00 49.21 C +ATOM 3589 CD1 LEU B 238 -36.049 83.112 35.722 1.00 50.29 C +ATOM 3590 CD2 LEU B 238 -36.730 81.918 33.658 1.00 49.25 C +ATOM 3591 N GLU B 239 -36.725 84.378 30.073 1.00 52.71 N +TER 3592 GLU B 239 +HETATM 3593 C1 NAG C 1 -32.314 86.676 -17.512 0.50 40.55 C +HETATM 3594 C2 NAG C 1 -32.267 85.331 -16.801 0.50 38.92 C +HETATM 3595 C3 NAG C 1 -31.401 85.426 -15.519 0.50 38.92 C +HETATM 3596 C4 NAG C 1 -30.018 85.996 -15.893 0.50 39.48 C +HETATM 3597 C5 NAG C 1 -30.179 87.244 -16.720 0.50 40.95 C +HETATM 3598 C6 NAG C 1 -28.843 87.761 -17.172 0.50 40.40 C +HETATM 3599 C7 NAG C 1 -34.053 83.694 -16.927 0.50 38.81 C +HETATM 3600 C8 NAG C 1 -35.482 83.315 -16.579 0.50 37.52 C +HETATM 3601 N2 NAG C 1 -33.618 84.882 -16.504 0.50 39.15 N +HETATM 3602 O1 NAG C 1 -33.061 86.580 -18.668 0.50 43.28 O +HETATM 3603 O3 NAG C 1 -31.300 84.139 -14.917 0.50 38.46 O +HETATM 3604 O4 NAG C 1 -29.302 86.520 -14.770 0.50 39.18 O +HETATM 3605 O5 NAG C 1 -30.993 87.010 -17.879 0.50 39.83 O +HETATM 3606 O6 NAG C 1 -28.277 86.903 -18.144 0.50 41.36 O +HETATM 3607 O7 NAG C 1 -33.345 82.901 -17.556 0.50 38.33 O +HETATM 3608 C1 NAG C 2 -28.701 85.951 -13.705 0.50 37.52 C +HETATM 3609 C2 NAG C 2 -27.758 86.912 -13.011 0.50 37.86 C +HETATM 3610 C3 NAG C 2 -26.905 86.071 -12.095 0.50 36.30 C +HETATM 3611 C4 NAG C 2 -27.777 85.183 -11.205 0.50 35.75 C +HETATM 3612 C5 NAG C 2 -28.845 84.448 -11.996 0.50 34.83 C +HETATM 3613 C6 NAG C 2 -29.784 83.719 -11.106 0.50 34.00 C +HETATM 3614 C7 NAG C 2 -26.878 88.920 -13.982 0.50 42.46 C +HETATM 3615 C8 NAG C 2 -25.922 89.624 -14.952 0.50 42.72 C +HETATM 3616 N2 NAG C 2 -26.896 87.593 -13.966 0.50 40.70 N +HETATM 3617 O3 NAG C 2 -26.119 86.920 -11.292 0.50 34.15 O +HETATM 3618 O4 NAG C 2 -26.954 84.247 -10.535 0.50 36.68 O +HETATM 3619 O5 NAG C 2 -29.602 85.373 -12.793 0.50 36.92 O +HETATM 3620 O6 NAG C 2 -30.623 84.608 -10.410 0.50 32.70 O +HETATM 3621 O7 NAG C 2 -27.662 89.594 -13.328 0.50 42.51 O +HETATM 3622 C1 NAG D 1 -13.279 45.201 32.861 0.50 39.67 C +HETATM 3623 C2 NAG D 1 -13.290 45.678 31.411 0.50 39.95 C +HETATM 3624 C3 NAG D 1 -14.132 46.975 31.301 0.50 39.83 C +HETATM 3625 C4 NAG D 1 -15.537 46.642 31.893 0.50 39.61 C +HETATM 3626 C5 NAG D 1 -15.413 46.094 33.292 0.50 40.16 C +HETATM 3627 C6 NAG D 1 -16.748 45.727 33.864 0.50 38.97 C +HETATM 3628 C7 NAG D 1 -11.481 45.207 29.878 0.50 36.84 C +HETATM 3629 C8 NAG D 1 -10.043 45.482 29.466 0.50 36.12 C +HETATM 3630 N2 NAG D 1 -11.939 45.876 30.936 0.50 38.80 N +HETATM 3631 O1 NAG D 1 -12.540 44.025 32.978 0.50 43.38 O +HETATM 3632 O3 NAG D 1 -14.282 47.307 29.926 0.50 39.42 O +HETATM 3633 O4 NAG D 1 -16.573 47.675 31.894 0.50 39.01 O +HETATM 3634 O5 NAG D 1 -14.610 44.920 33.311 0.50 39.16 O +HETATM 3635 O6 NAG D 1 -17.272 44.639 33.157 0.50 41.81 O +HETATM 3636 O7 NAG D 1 -12.164 44.425 29.227 0.50 34.53 O +HETATM 3637 C1 NAG D 2 -16.527 49.046 31.831 0.50 38.43 C +HETATM 3638 C2 NAG D 2 -17.778 49.772 32.309 0.50 38.49 C +HETATM 3639 C3 NAG D 2 -18.610 50.407 31.223 0.50 37.18 C +HETATM 3640 C4 NAG D 2 -17.720 51.109 30.204 0.50 36.00 C +HETATM 3641 C5 NAG D 2 -16.689 50.140 29.650 0.50 34.86 C +HETATM 3642 C6 NAG D 2 -15.772 50.912 28.727 0.50 33.50 C +HETATM 3643 C7 NAG D 2 -18.672 49.104 34.407 0.50 42.00 C +HETATM 3644 C8 NAG D 2 -19.616 48.286 35.253 0.50 41.69 C +HETATM 3645 N2 NAG D 2 -18.633 48.901 33.087 0.50 39.97 N +HETATM 3646 O3 NAG D 2 -19.433 51.377 31.858 0.50 35.66 O +HETATM 3647 O4 NAG D 2 -18.538 51.571 29.156 0.50 36.68 O +HETATM 3648 O5 NAG D 2 -15.854 49.578 30.696 0.50 37.38 O +HETATM 3649 O6 NAG D 2 -14.925 51.759 29.470 0.50 33.10 O +HETATM 3650 O7 NAG D 2 -17.879 49.880 34.956 0.50 42.89 O +HETATM 3651 MN MN A 301 -21.408 80.273 -3.837 1.00 30.97 MN +HETATM 3652 CA CA A 302 -24.813 81.543 -6.493 1.00 57.22 CA +HETATM 3653 C1 NAG A 401 -16.029 97.046 -9.794 1.00 77.19 C +HETATM 3654 C2 NAG A 401 -16.013 98.002 -11.010 1.00 82.15 C +HETATM 3655 C3 NAG A 401 -14.796 98.956 -10.853 1.00 82.88 C +HETATM 3656 C4 NAG A 401 -15.038 99.779 -9.591 1.00 83.22 C +HETATM 3657 C5 NAG A 401 -15.226 98.845 -8.371 1.00 82.93 C +HETATM 3658 C6 NAG A 401 -15.678 99.643 -7.149 1.00 82.07 C +HETATM 3659 C7 NAG A 401 -16.688 97.772 -13.327 1.00 88.62 C +HETATM 3660 C8 NAG A 401 -16.607 96.975 -14.619 1.00 86.41 C +HETATM 3661 N2 NAG A 401 -15.996 97.292 -12.282 1.00 87.65 N +HETATM 3662 O3 NAG A 401 -14.634 99.824 -11.984 1.00 79.76 O +HETATM 3663 O4 NAG A 401 -13.947 100.675 -9.364 1.00 80.51 O +HETATM 3664 O5 NAG A 401 -16.250 97.831 -8.611 1.00 81.06 O +HETATM 3665 O6 NAG A 401 -16.977 100.210 -7.343 1.00 82.03 O +HETATM 3666 O7 NAG A 401 -17.385 98.803 -13.269 1.00 89.68 O +HETATM 3667 MN MN B 301 -24.097 57.499 23.802 1.00 38.25 MN +HETATM 3668 CA CA B 302 -20.600 55.103 25.587 1.00 52.94 CA +CONECT 810 3653 +CONECT 911 3651 +CONECT 929 3652 +CONECT 930 3651 3652 +CONECT 941 3652 +CONECT 997 3652 +CONECT 1026 3651 +CONECT 1027 3652 +CONECT 1072 3651 +CONECT 1386 3182 +CONECT 2707 3667 +CONECT 2725 3668 +CONECT 2726 3667 3668 +CONECT 2737 3668 +CONECT 2793 3668 +CONECT 2822 3667 +CONECT 2823 3668 +CONECT 2868 3667 +CONECT 3182 1386 +CONECT 3593 3594 3602 3605 +CONECT 3594 3593 3595 3601 +CONECT 3595 3594 3596 3603 +CONECT 3596 3595 3597 3604 +CONECT 3597 3596 3598 3605 +CONECT 3598 3597 3606 +CONECT 3599 3600 3601 3607 +CONECT 3600 3599 +CONECT 3601 3594 3599 +CONECT 3602 3593 +CONECT 3603 3595 +CONECT 3604 3596 3608 +CONECT 3605 3593 3597 +CONECT 3606 3598 +CONECT 3607 3599 +CONECT 3608 3604 3609 3619 +CONECT 3609 3608 3610 3616 +CONECT 3610 3609 3611 3617 +CONECT 3611 3610 3612 3618 +CONECT 3612 3611 3613 3619 +CONECT 3613 3612 3620 +CONECT 3614 3615 3616 3621 +CONECT 3615 3614 +CONECT 3616 3609 3614 +CONECT 3617 3610 +CONECT 3618 3611 +CONECT 3619 3608 3612 +CONECT 3620 3613 +CONECT 3621 3614 +CONECT 3622 3623 3631 3634 +CONECT 3623 3622 3624 3630 +CONECT 3624 3623 3625 3632 +CONECT 3625 3624 3626 3633 +CONECT 3626 3625 3627 3634 +CONECT 3627 3626 3635 +CONECT 3628 3629 3630 3636 +CONECT 3629 3628 +CONECT 3630 3623 3628 +CONECT 3631 3622 +CONECT 3632 3624 +CONECT 3633 3625 3637 +CONECT 3634 3622 3626 +CONECT 3635 3627 +CONECT 3636 3628 +CONECT 3637 3633 3638 3648 +CONECT 3638 3637 3639 3645 +CONECT 3639 3638 3640 3646 +CONECT 3640 3639 3641 3647 +CONECT 3641 3640 3642 3648 +CONECT 3642 3641 3649 +CONECT 3643 3644 3645 3650 +CONECT 3644 3643 +CONECT 3645 3638 3643 +CONECT 3646 3639 +CONECT 3647 3640 +CONECT 3648 3637 3641 +CONECT 3649 3642 +CONECT 3650 3643 +CONECT 3651 911 930 1026 1072 +CONECT 3652 929 930 941 997 +CONECT 3652 1027 +CONECT 3653 810 3654 3664 +CONECT 3654 3653 3655 3661 +CONECT 3655 3654 3656 3662 +CONECT 3656 3655 3657 3663 +CONECT 3657 3656 3658 3664 +CONECT 3658 3657 3665 +CONECT 3659 3660 3661 3666 +CONECT 3660 3659 +CONECT 3661 3654 3659 +CONECT 3662 3655 +CONECT 3663 3656 +CONECT 3664 3653 3657 +CONECT 3665 3658 +CONECT 3666 3659 +CONECT 3667 2707 2726 2822 2868 +CONECT 3668 2725 2726 2737 2793 +CONECT 3668 2823 +MASTER 343 0 9 8 26 0 0 6 3666 2 97 38 +END diff --git a/test/Test_PrepareForLeap/RunTest.sh b/test/Test_PrepareForLeap/RunTest.sh new file mode 100755 index 0000000000..20d1f6fecc --- /dev/null +++ b/test/Test_PrepareForLeap/RunTest.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +. ../MasterTest.sh + +CleanFiles cpptraj.in 1qos.cpptraj.pdb leap.1qos.in + +INPUT='-i cpptraj.in' + +cat > cpptraj.in < Date: Thu, 17 Feb 2022 12:18:36 -0500 Subject: [PATCH 334/368] Enable prepareforleap test --- test/Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/Makefile b/test/Makefile index ab45a436e1..ae4f17e355 100644 --- a/test/Makefile +++ b/test/Makefile @@ -495,6 +495,9 @@ test.ljc: test.hmassrepartition: @-cd Test_HmassRepartition && ./RunTest.sh $(OPT) +test.prepareforleap: + @-cd Test_PrepareForLeap && ./RunTest.sh $(OPT) + # Every test target should go here. COMPLETETESTS=test.general \ test.strip \ @@ -651,7 +654,8 @@ COMPLETETESTS=test.general \ test.random \ test.multipucker \ test.ljc \ - test.hmassrepartition + test.hmassrepartition \ + test.prepareforleap test.all: $(MAKE) test.complete summary From c0cd42661e6d821643ece61cfcfdf06a02cfb7f0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 12:48:15 -0500 Subject: [PATCH 335/368] Print warnings for atoms that will need charge modifications after leap. Better message for atoms with modified charges. --- src/Exec_PrepareForLeap.cpp | 22 +++++++++++++++++++--- src/Exec_PrepareForLeap.h | 2 ++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index eb9f34053e..af2cdcd311 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2940,7 +2940,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, return 1; } double newcharge = leaptop[o_idx].Charge() + 0.031; - mprintf("\tChanging charge on %s from %f to %f\n", + mprintf("\tFxn group '%s'; changing charge on %s from %f to %f\n", *(res.Name()), leaptop.AtomMaskName(o_idx).c_str(), leaptop[o_idx].Charge(), newcharge); leaptop.SetAtom(o_idx).SetCharge( newcharge ); top_is_modified = true; @@ -2959,7 +2959,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, return 1; } double newcharge = leaptop[c_idx].Charge() - 0.039; - mprintf("\tChanging charge on %s from %f to %f\n", + mprintf("\tFxn group '%s'; changing charge on %s from %f to %f\n", *(res.Name()), leaptop.AtomMaskName(c_idx).c_str(), leaptop[c_idx].Charge(), newcharge); leaptop.SetAtom(c_idx).SetCharge( newcharge ); top_is_modified = true; @@ -2986,7 +2986,7 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, return 1; } double newcharge = leaptop[c_idx].Charge() + 0.008; - mprintf("\tChanging charge on %s from %f to %f\n", + mprintf("\tFxn group '%s'; changing charge on %s from %f to %f\n", *(res.Name()), leaptop.AtomMaskName(c_idx).c_str(), leaptop[c_idx].Charge(), newcharge); leaptop.SetAtom(c_idx).SetCharge( newcharge ); top_is_modified = true; @@ -3014,6 +3014,21 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, return 0; } +/** Print warnings for residues that will need to be modified in leap. */ +void Exec_PrepareForLeap::LeapFxnGroupWarning(Topology const& topIn, int rnum) { + Residue const& res = topIn.Res(rnum); + if ( res.Name() == "SO3" ) { + mprintf("Warning: Residue '%s'; after LEaP, will need to adjust the charge on the link oxygen by +0.031.\n", + topIn.TruncResNameNum(rnum).c_str()); + } else if ( res.Name() == "MEX" ) { + mprintf("Warning: Residue '%s'; after LEaP, will need to adjust the charge on the carbon bonded to link oxygen by -0.039.\n", + topIn.TruncResNameNum(rnum).c_str()); + } else if ( res.Name() == "ACX" ) { + mprintf("Warning: Residue '%s'; after LEaP, will need to adjust the charge on the carbon bonded to link oxygen by +0.008.\n", + topIn.TruncResNameNum(rnum).c_str()); + } +} + // Exec_PrepareForLeap::Help() void Exec_PrepareForLeap::Help() const { @@ -3445,6 +3460,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) static const char* msg2 = "Fatal problem : "; for (ResStatArray::iterator it = resStat_.begin(); it != resStat_.end(); ++it) { + LeapFxnGroupWarning(topIn, it-resStat_.begin()); //if ( *it == VALIDATED ) // mprintf("\t\t%s VALIDATED\n", topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); //else diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 4a3182718d..faef6c7da8 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -133,6 +133,8 @@ class Exec_PrepareForLeap : public Exec { NameType const&, NameType const&, NameType const&, NameType const&) const; /// Run leap to generate topology, perform any modifications int RunLeap(std::string const&, std::string const&) const; + /// Print a warning for residues that will need modification after leap + static void LeapFxnGroupWarning(Topology const&, int); typedef std::pair PairType; typedef std::map MapType; From 6163967b75a70092a438dd0b236b1a13936f7b9f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 12:55:08 -0500 Subject: [PATCH 336/368] Print total charge after running leap --- src/Exec_PrepareForLeap.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index af2cdcd311..598817ecea 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2994,16 +2994,20 @@ int Exec_PrepareForLeap::RunLeap(std::string const& ff_file, } // DEBUG: Print out total charge on each residue - if (debug_ > 0) { - for (Topology::res_iterator res = leaptop.ResStart(); res != leaptop.ResEnd(); ++res) - { - double tcharge = 0; - for (int at = res->FirstAtom(); at != res->LastAtom(); ++at) - tcharge += leaptop[at].Charge(); + double total_q = 0; + for (Topology::res_iterator res = leaptop.ResStart(); res != leaptop.ResEnd(); ++res) + { + double tcharge = 0; + for (int at = res->FirstAtom(); at != res->LastAtom(); ++at) { + total_q += leaptop[at].Charge(); + tcharge += leaptop[at].Charge(); + } + if (debug_ > 0) { mprintf("DEBUG:\tResidue %10s charge= %12.5f\n", - leaptop.TruncResNameOnumId(res-leaptop.ResStart()).c_str(), tcharge); + leaptop.TruncResNameOnumId(res-leaptop.ResStart()).c_str(), tcharge); } } + mprintf("\tTotal charge: %16.8f\n", total_q); // If topology was modified, write it back out if (top_is_modified) { From 72886068ae43af2587919d8589ebe5abfed93498 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 12:57:10 -0500 Subject: [PATCH 337/368] Prepareforleap no longer hidden --- src/Command.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Command.cpp b/src/Command.cpp index ae5106c50d..480dfb794c 100644 --- a/src/Command.cpp +++ b/src/Command.cpp @@ -264,7 +264,7 @@ void Command::Init() { Command::AddCmd( new Exec_LoadCrd(), Cmd::EXE, 1, "loadcrd" ); Command::AddCmd( new Exec_LoadTraj(), Cmd::EXE, 1, "loadtraj" ); Command::AddCmd( new Exec_PermuteDihedrals(), Cmd::EXE, 1, "permutedihedrals" ); - Command::AddCmd( new Exec_PrepareForLeap(), Cmd::EXE, 1, "prepareforleap" ); // hidden + Command::AddCmd( new Exec_PrepareForLeap(), Cmd::EXE, 1, "prepareforleap" ); Command::AddCmd( new Exec_RotateDihedral(), Cmd::EXE, 1, "rotatedihedral" ); Command::AddCmd( new Exec_SplitCoords(), Cmd::EXE, 1, "splitcoords" ); // TRAJECTORY From 15601b5453444b7147bd9dd2cc1b9f1ca27fd1f7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 17 Feb 2022 15:23:17 -0500 Subject: [PATCH 338/368] Different way of dealing with alternate atom locations --- src/Exec_PrepareForLeap.cpp | 71 ++++++++++++++++++++++++++++++------- src/Exec_PrepareForLeap.h | 2 +- 2 files changed, 60 insertions(+), 13 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 598817ecea..df88d4bc2a 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2615,7 +2615,7 @@ const /** Modify coords according to user wishes. */ int Exec_PrepareForLeap::ModifyCoords( Topology& topIn, Frame& frameIn, bool remove_water, - char altLocChar, std::string const& stripMask, + std::string const& altLocStr, std::string const& stripMask, std::string const& waterMask, Iarray const& resnumsToRemove ) const @@ -2660,6 +2660,50 @@ const } } + // Identify alternate atom location groups. + if (!altLocStr.empty()) { + if (topIn.AtomAltLoc().empty()) { + mprintf("\tNo alternate atom locations.\n"); + } else { + // Map atom name to atom indices + typedef std::map> AlocMapType; + AlocMapType alocMap; + for (int rnum = 0; rnum != topIn.Nres(); rnum++) { + alocMap.clear(); + for (int at = topIn.Res(rnum).FirstAtom(); at != topIn.Res(rnum).LastAtom(); at++) { + if (topIn.AtomAltLoc()[at] != ' ') { + AlocMapType::iterator it = alocMap.find( topIn[at].Name() ); + if (it == alocMap.end()) { + alocMap.insert( std::pair>( topIn[at].Name(), + std::vector(1, at) )); + } else { + it->second.push_back( at ); + } + } + } // END loop over atoms in residue + if (!alocMap.empty()) { + mprintf("DEBUG: Alternate loc. for %s\n", topIn.TruncResNameOnumId(rnum).c_str()); + for (AlocMapType::const_iterator it = alocMap.begin(); it != alocMap.end(); ++it) { + // Print + mprintf("\t'%s'", *(it->first)); + for (std::vector::const_iterator at = it->second.begin(); + at != it->second.end(); ++at) + mprintf(" %s[%c]", *(topIn[*at].Name()), topIn.AtomAltLoc()[*at]); + mprintf("\n"); + if (altLocStr.size() == 1) { + // Keep only specified character + char altLocChar = altLocStr[0]; + for (std::vector::const_iterator at = it->second.begin(); + at != it->second.end(); ++at) + if (topIn.AtomAltLoc()[*at] != altLocChar) + atomsToKeep[*at] = false; + } + } + } + } // END loop over residue numbers + } + } +/* // Remove extra alternate atom locations if (altLocChar != '\0') { if (topIn.AtomAltLoc().empty()) { @@ -2671,7 +2715,7 @@ const atomsToKeep[idx] = false; } } - } + }*/ // Set up mask of only kept atoms. AtomMask keptAtoms; @@ -3220,9 +3264,12 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) std::string waterMask = argIn.GetStringKey("watername", ":" + solventResName_); bool remove_h = argIn.hasKey("noh"); std::string altLocArg = argIn.GetStringKey("keepaltloc"); - char altLocChar = '\0'; - if (!altLocArg.empty()) - altLocChar = altLocArg[0]; + if (!altLocArg.empty()) { + if (altLocArg.size() > 1) { + mprinterr("Error: Alternate atom location identifier '%s' > 1 character.\n", altLocArg.c_str()); + return CpptrajState::ERR; + } + } std::string stripMask = argIn.GetStringKey("stripmask"); // Check if alternate atom location IDs are present @@ -3238,12 +3285,12 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (*altLocId != ' ') firstAltLoc = *altLocId; } else if (*altLocId != ' ' && *altLocId != firstAltLoc) { - if (altLocChar == '\0') { - altLocChar = firstAltLoc; + if (altLocArg.empty()) { + altLocArg.assign(1, firstAltLoc); mprintf("Warning: '%s' has atoms with multiple alternate location IDs, which\n" - "Warning: are not supported by LEaP. Keeping only '%c'.\n" + "Warning: are not supported by LEaP. Keeping only '%s'.\n" "Warning: To choose a specific location to keep use the 'keepaltloc '\n" - "Warning: keyword.\n", coords.legend(), altLocChar); + "Warning: keyword.\n", coords.legend(), altLocArg.c_str()); } break; } @@ -3254,11 +3301,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tRemoving solvent. Solvent mask= '%s'\n", waterMask.c_str()); if (remove_h) mprintf("\tRemoving hydrogens.\n"); - if (altLocChar != '\0') - mprintf("\tIf present, keeping only alternate atom locations denoted by '%c'\n", altLocChar); + if (!altLocArg.empty()) + mprintf("\tIf present, keeping only alternate atom locations denoted by '%s'\n", altLocArg.c_str()); if (!stripMask.empty()) mprintf("\tRemoving atoms in mask '%s'\n", stripMask.c_str()); - if (ModifyCoords(topIn, frameIn, remove_water, altLocChar, stripMask, waterMask, pdbResToRemove)) + if (ModifyCoords(topIn, frameIn, remove_water, altLocArg, stripMask, waterMask, pdbResToRemove)) { mprinterr("Error: Modification of '%s' failed.\n", coords.legend()); return CpptrajState::ERR; diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index faef6c7da8..1fff7d5be5 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -124,7 +124,7 @@ class Exec_PrepareForLeap : public Exec { /// \return Array indices of isolated unrecognized residues Iarray GetIsolatedUnrecognizedResidues(Topology const&, Iarray const&) const; /// Remove specified atoms - int ModifyCoords(Topology&, Frame&, bool, char, std::string const&, + int ModifyCoords(Topology&, Frame&, bool, std::string const&, std::string const&, std::string const&, Iarray const&) const; int RemoveHydrogens(Topology&, Frame&) const; /** Try to determine protonation state of histidines from any hydrogens present. */ From fe64c970cee3500ef7de9dbe07edbb7c512135f4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 18 Feb 2022 09:37:31 -0500 Subject: [PATCH 339/368] Add test with keepaltloc --- .../Test_PrepareForLeap/4zzw.cpptraj.pdb.save | 3375 ++++++++++++ test/Test_PrepareForLeap/4zzw.pdb | 4651 +++++++++++++++++ test/Test_PrepareForLeap/RunTest.sh | 19 +- test/Test_PrepareForLeap/leap.4zzw.in.save | 16 + 4 files changed, 8060 insertions(+), 1 deletion(-) create mode 100644 test/Test_PrepareForLeap/4zzw.cpptraj.pdb.save create mode 100644 test/Test_PrepareForLeap/4zzw.pdb create mode 100644 test/Test_PrepareForLeap/leap.4zzw.in.save diff --git a/test/Test_PrepareForLeap/4zzw.cpptraj.pdb.save b/test/Test_PrepareForLeap/4zzw.cpptraj.pdb.save new file mode 100644 index 0000000000..8b3ac916df --- /dev/null +++ b/test/Test_PrepareForLeap/4zzw.cpptraj.pdb.save @@ -0,0 +1,3375 @@ +CRYST1 42.640 81.820 55.030 90.00 109.63 90.00 1 +ATOM 1 N PCA A 1 6.798 2.766 36.524 1.00 8.18 N +ATOM 2 CA PCA A 1 5.632 2.866 37.385 1.00 8.34 C +ATOM 3 CB PCA A 1 4.454 2.891 36.415 1.00 8.28 C +ATOM 4 CG PCA A 1 5.000 2.434 35.067 1.00 8.30 C +ATOM 5 CD PCA A 1 6.489 2.450 35.268 1.00 8.36 C +ATOM 6 OE PCA A 1 7.280 2.212 34.375 1.00 8.52 O +ATOM 7 C PCA A 1 5.492 1.724 38.348 1.00 8.46 C +ATOM 8 O PCA A 1 5.877 0.587 38.044 1.00 8.28 O +ATOM 9 N GLN A 2 4.930 2.023 39.512 1.00 8.81 N +ATOM 10 CA GLN A 2 4.736 1.037 40.565 1.00 9.23 C +ATOM 11 C GLN A 2 3.396 0.328 40.418 1.00 9.17 C +ATOM 12 O GLN A 2 2.553 0.727 39.615 1.00 8.98 O +ATOM 13 CB GLN A 2 4.832 1.711 41.938 1.00 9.68 C +ATOM 14 CG GLN A 2 6.119 2.503 42.126 1.00 10.27 C +ATOM 15 CD GLN A 2 7.343 1.667 41.838 1.00 10.92 C +ATOM 16 OE1 GLN A 2 7.546 0.628 42.467 1.00 12.23 O +ATOM 17 NE2 GLN A 2 8.167 2.113 40.890 1.00 11.19 N +ATOM 18 N ILE A 3 3.226 -0.737 41.195 1.00 9.25 N +ATOM 19 CA ILE A 3 1.984 -1.501 41.233 1.00 9.53 C +ATOM 20 C ILE A 3 1.105 -0.912 42.319 1.00 9.93 C +ATOM 21 O ILE A 3 1.481 -0.905 43.487 1.00 9.95 O +ATOM 22 CB ILE A 3 2.253 -2.997 41.517 1.00 9.39 C +ATOM 23 CG1 ILE A 3 2.977 -3.634 40.324 1.00 9.41 C +ATOM 24 CG2 ILE A 3 0.958 -3.751 41.805 1.00 9.35 C +ATOM 25 CD1 ILE A 3 3.534 -5.020 40.597 1.00 9.46 C +ATOM 26 N GLY A 4 -0.059 -0.402 41.928 1.00 10.43 N +ATOM 27 CA GLY A 4 -1.038 0.096 42.887 1.00 11.06 C +ATOM 28 C GLY A 4 -1.757 -1.069 43.532 1.00 11.76 C +ATOM 29 O GLY A 4 -1.959 -2.101 42.897 1.00 11.91 O +ATOM 30 N THR A 5 -2.133 -0.919 44.798 1.00 12.16 N +ATOM 31 CA THR A 5 -2.761 -2.017 45.529 1.00 12.98 C +ATOM 32 C THR A 5 -4.152 -1.656 46.054 1.00 12.60 C +ATOM 33 O THR A 5 -4.742 -2.420 46.821 1.00 12.93 O +ATOM 34 CB THR A 5 -1.857 -2.473 46.686 1.00 13.56 C +ATOM 35 OG1 THR A 5 -1.605 -1.365 47.552 1.00 14.84 O +ATOM 36 CG2 THR A 5 -0.524 -2.999 46.143 1.00 14.05 C +ATOM 37 N LEU A 6 -4.692 -0.520 45.619 1.00 12.18 N +ATOM 38 CA LEU A 6 -6.012 -0.081 46.085 1.00 11.92 C +ATOM 39 C LEU A 6 -7.170 -0.773 45.368 1.00 11.53 C +ATOM 40 O LEU A 6 -8.262 -0.890 45.934 1.00 11.18 O +ATOM 41 CB LEU A 6 -6.153 1.438 45.960 1.00 12.03 C +ATOM 42 CG LEU A 6 -5.058 2.259 46.645 1.00 12.22 C +ATOM 43 CD1 LEU A 6 -5.330 3.745 46.460 1.00 12.27 C +ATOM 44 CD2 LEU A 6 -4.964 1.901 48.119 1.00 12.49 C +ATOM 45 N THR A 7 -6.932 -1.230 44.135 1.00 11.34 N +ATOM 46 CA THR A 7 -7.954 -1.886 43.314 1.00 11.24 C +ATOM 47 C THR A 7 -7.337 -3.097 42.623 1.00 10.85 C +ATOM 48 O THR A 7 -6.313 -2.965 41.955 1.00 11.11 O +ATOM 49 CB THR A 7 -8.499 -0.941 42.218 1.00 11.66 C +ATOM 50 OG1 THR A 7 -9.066 0.234 42.819 1.00 11.85 O +ATOM 51 CG2 THR A 7 -9.562 -1.650 41.353 1.00 11.98 C +ATOM 52 N ATHR A 8 -7.970 -4.259 42.775 0.50 10.65 N +ATOM 53 CA ATHR A 8 -7.542 -5.492 42.110 0.50 10.48 C +ATOM 54 C ATHR A 8 -7.477 -5.316 40.595 0.50 10.21 C +ATOM 55 O ATHR A 8 -8.334 -4.647 40.013 0.50 10.08 O +ATOM 56 CB ATHR A 8 -8.534 -6.637 42.400 0.50 10.66 C +ATOM 57 OG1ATHR A 8 -8.754 -6.742 43.811 0.50 10.96 O +ATOM 58 CG2ATHR A 8 -8.012 -7.959 41.869 0.50 10.81 C +ATOM 59 N GLU A 9 -6.461 -5.906 39.964 1.00 9.86 N +ATOM 60 CA GLU A 9 -6.366 -5.917 38.506 1.00 9.85 C +ATOM 61 C GLU A 9 -6.692 -7.325 38.048 1.00 10.00 C +ATOM 62 O GLU A 9 -5.909 -8.253 38.248 1.00 10.18 O +ATOM 63 CB GLU A 9 -4.971 -5.490 38.043 1.00 9.63 C +ATOM 64 CG GLU A 9 -4.712 -5.627 36.540 1.00 9.37 C +ATOM 65 CD GLU A 9 -5.593 -4.751 35.659 1.00 9.35 C +ATOM 66 OE1 GLU A 9 -6.356 -3.914 36.175 1.00 9.12 O +ATOM 67 OE2 GLU A 9 -5.494 -4.870 34.416 1.00 9.02 O +ATOM 68 N THR A 10 -7.871 -7.478 37.459 1.00 10.22 N +ATOM 69 CA THR A 10 -8.318 -8.752 36.924 1.00 10.61 C +ATOM 70 C THR A 10 -8.513 -8.593 35.426 1.00 10.45 C +ATOM 71 O THR A 10 -9.354 -7.816 34.986 1.00 10.54 O +ATOM 72 CB THR A 10 -9.634 -9.209 37.581 1.00 11.07 C +ATOM 73 OG1 THR A 10 -9.434 -9.349 38.992 1.00 11.75 O +ATOM 74 CG2 THR A 10 -10.092 -10.539 37.006 1.00 11.41 C +ATOM 75 N HIS A 11 -7.730 -9.330 34.651 1.00 10.12 N +ATOM 76 CA HIS A 11 -7.763 -9.221 33.191 1.00 10.03 C +ATOM 77 C HIS A 11 -8.928 -10.024 32.622 1.00 10.07 C +ATOM 78 O HIS A 11 -8.997 -11.233 32.845 1.00 10.57 O +ATOM 79 CB HIS A 11 -6.461 -9.744 32.608 1.00 9.83 C +ATOM 80 CG HIS A 11 -5.252 -9.021 33.099 1.00 9.72 C +ATOM 81 ND1 HIS A 11 -4.176 -9.669 33.663 1.00 9.91 N +ATOM 82 CD2 HIS A 11 -4.960 -7.700 33.140 1.00 9.62 C +ATOM 83 CE1 HIS A 11 -3.262 -8.781 34.009 1.00 9.77 C +ATOM 84 NE2 HIS A 11 -3.716 -7.578 33.708 1.00 9.69 N +ATOM 85 N PRO A 12 -9.839 -9.369 31.877 1.00 10.20 N +ATOM 86 CA PRO A 12 -10.950 -10.134 31.301 1.00 10.41 C +ATOM 87 C PRO A 12 -10.457 -11.215 30.339 1.00 10.60 C +ATOM 88 O PRO A 12 -9.476 -10.998 29.622 1.00 10.24 O +ATOM 89 CB PRO A 12 -11.757 -9.083 30.533 1.00 10.29 C +ATOM 90 CG PRO A 12 -11.349 -7.764 31.089 1.00 10.31 C +ATOM 91 CD PRO A 12 -9.951 -7.926 31.594 1.00 10.14 C +ATOM 92 N PRO A 13 -11.138 -12.372 30.311 1.00 10.94 N +ATOM 93 CA PRO A 13 -10.694 -13.468 29.467 1.00 11.23 C +ATOM 94 C PRO A 13 -11.031 -13.253 27.990 1.00 11.19 C +ATOM 95 O PRO A 13 -12.095 -12.722 27.658 1.00 11.62 O +ATOM 96 CB PRO A 13 -11.479 -14.655 30.023 1.00 11.29 C +ATOM 97 CG PRO A 13 -12.755 -14.052 30.485 1.00 11.33 C +ATOM 98 CD PRO A 13 -12.373 -12.712 31.047 1.00 11.29 C +ATOM 99 N LEU A 14 -10.126 -13.672 27.116 1.00 11.13 N +ATOM 100 CA LEU A 14 -10.401 -13.699 25.688 1.00 11.44 C +ATOM 101 C LEU A 14 -9.694 -14.900 25.080 1.00 11.65 C +ATOM 102 O LEU A 14 -8.473 -15.005 25.142 1.00 11.90 O +ATOM 103 CB LEU A 14 -9.925 -12.407 25.025 1.00 11.39 C +ATOM 104 CG LEU A 14 -10.204 -12.272 23.527 1.00 11.40 C +ATOM 105 CD1 LEU A 14 -11.701 -12.255 23.250 1.00 11.52 C +ATOM 106 CD2 LEU A 14 -9.533 -11.023 22.967 1.00 11.48 C +ATOM 107 N ATHR A 15 -10.457 -15.833 24.523 0.50 11.97 N +ATOM 108 CA ATHR A 15 -9.849 -16.993 23.888 0.50 12.34 C +ATOM 109 C ATHR A 15 -9.721 -16.750 22.396 0.50 12.30 C +ATOM 110 O ATHR A 15 -10.566 -16.100 21.780 0.50 12.32 O +ATOM 111 CB ATHR A 15 -10.632 -18.291 24.158 0.50 12.76 C +ATOM 112 OG1ATHR A 15 -10.275 -19.287 23.188 0.50 13.28 O +ATOM 113 CG2ATHR A 15 -12.089 -18.032 24.078 0.50 12.94 C +ATOM 114 N TRP A 16 -8.641 -17.280 21.840 1.00 12.11 N +ATOM 115 CA TRP A 16 -8.306 -17.151 20.421 1.00 12.21 C +ATOM 116 C TRP A 16 -7.742 -18.490 19.961 1.00 12.57 C +ATOM 117 O TRP A 16 -7.405 -19.342 20.786 1.00 12.70 O +ATOM 118 CB TRP A 16 -7.302 -16.018 20.200 1.00 12.23 C +ATOM 119 CG TRP A 16 -6.045 -16.173 20.978 1.00 12.34 C +ATOM 120 CD1 TRP A 16 -5.861 -15.910 22.307 1.00 12.41 C +ATOM 121 CD2 TRP A 16 -4.786 -16.634 20.483 1.00 12.35 C +ATOM 122 NE1 TRP A 16 -4.566 -16.177 22.666 1.00 12.45 N +ATOM 123 CE2 TRP A 16 -3.884 -16.625 21.567 1.00 12.41 C +ATOM 124 CE3 TRP A 16 -4.332 -17.057 19.229 1.00 12.39 C +ATOM 125 CZ2 TRP A 16 -2.557 -17.024 21.435 1.00 12.48 C +ATOM 126 CZ3 TRP A 16 -3.015 -17.452 19.103 1.00 12.49 C +ATOM 127 CH2 TRP A 16 -2.142 -17.432 20.198 1.00 12.59 C +ATOM 128 N GLN A 17 -7.643 -18.682 18.654 1.00 12.36 N +ATOM 129 CA GLN A 17 -7.361 -20.006 18.122 1.00 12.74 C +ATOM 130 C GLN A 17 -6.089 -20.058 17.310 1.00 12.46 C +ATOM 131 O GLN A 17 -5.743 -19.100 16.619 1.00 11.82 O +ATOM 132 CB GLN A 17 -8.532 -20.474 17.263 1.00 13.55 C +ATOM 133 CG GLN A 17 -9.802 -20.671 18.068 1.00 14.45 C +ATOM 134 CD GLN A 17 -11.033 -20.725 17.197 1.00 15.47 C +ATOM 135 OE1 GLN A 17 -11.957 -19.921 17.355 1.00 17.42 O +ATOM 136 NE2 GLN A 17 -11.048 -21.654 16.258 1.00 15.85 N +ATOM 137 N ATHR A 18 -5.400 -21.193 17.406 0.50 12.35 N +ATOM 138 CA ATHR A 18 -4.259 -21.507 16.564 0.50 12.53 C +ATOM 139 C ATHR A 18 -4.695 -22.649 15.656 0.50 12.60 C +ATOM 140 O ATHR A 18 -5.234 -23.645 16.137 0.50 12.44 O +ATOM 141 CB ATHR A 18 -3.056 -21.960 17.411 0.50 12.65 C +ATOM 142 OG1ATHR A 18 -2.751 -20.958 18.391 0.50 12.83 O +ATOM 143 CG2ATHR A 18 -1.836 -22.208 16.535 0.50 12.73 C +ATOM 144 N CYX A 19 -4.485 -22.498 14.352 1.00 12.74 N +ATOM 145 CA CYX A 19 -4.953 -23.485 13.376 1.00 13.18 C +ATOM 146 C CYX A 19 -3.812 -24.188 12.655 1.00 13.76 C +ATOM 147 O CYX A 19 -2.726 -23.626 12.500 1.00 13.56 O +ATOM 148 CB CYX A 19 -5.889 -22.826 12.365 1.00 13.37 C +ATOM 149 SG CYX A 19 -7.287 -21.975 13.135 1.00 13.54 S +ATOM 150 N THR A 20 -4.078 -25.424 12.231 1.00 14.41 N +ATOM 151 CA THR A 20 -3.137 -26.216 11.438 1.00 15.41 C +ATOM 152 C THR A 20 -3.381 -25.966 9.960 1.00 15.04 C +ATOM 153 O THR A 20 -4.403 -25.399 9.586 1.00 14.77 O +ATOM 154 CB THR A 20 -3.311 -27.731 11.672 1.00 16.33 C +ATOM 155 OG1 THR A 20 -4.536 -28.178 11.069 1.00 17.99 O +ATOM 156 CG2 THR A 20 -3.316 -28.065 13.147 1.00 16.94 C +ATOM 157 N SER A 21 -2.461 -26.425 9.116 1.00 15.19 N +ATOM 158 CA SER A 21 -2.579 -26.247 7.667 1.00 15.28 C +ATOM 159 C SER A 21 -3.917 -26.747 7.113 1.00 15.23 C +ATOM 160 O SER A 21 -4.460 -26.163 6.177 1.00 15.54 O +ATOM 161 CB SER A 21 -1.428 -26.955 6.951 1.00 15.59 C +ATOM 162 OG SER A 21 -0.184 -26.361 7.279 1.00 15.69 O +ATOM 163 N GLY A 22 -4.444 -27.821 7.699 1.00 14.98 N +ATOM 164 CA GLY A 22 -5.700 -28.419 7.255 1.00 15.07 C +ATOM 165 C GLY A 22 -6.969 -27.769 7.768 1.00 15.02 C +ATOM 166 O GLY A 22 -8.064 -28.242 7.482 1.00 15.31 O +ATOM 167 N GLY A 23 -6.839 -26.688 8.529 1.00 14.94 N +ATOM 168 CA GLY A 23 -8.012 -25.978 9.026 1.00 14.96 C +ATOM 169 C GLY A 23 -8.575 -26.414 10.369 1.00 14.91 C +ATOM 170 O GLY A 23 -9.637 -25.926 10.773 1.00 15.31 O +ATOM 171 N ASER A 24 -7.882 -27.318 11.054 0.50 14.86 N +ATOM 172 CA ASER A 24 -8.268 -27.722 12.397 0.50 14.90 C +ATOM 173 C ASER A 24 -7.619 -26.761 13.383 0.50 14.69 C +ATOM 174 O ASER A 24 -6.433 -26.450 13.262 0.50 14.85 O +ATOM 175 CB ASER A 24 -7.823 -29.156 12.669 0.50 15.18 C +ATOM 176 OG ASER A 24 -8.267 -30.019 11.635 0.50 15.48 O +ATOM 177 N CYX A 25 -8.396 -26.292 14.354 1.00 14.38 N +ATOM 178 CA CYX A 25 -7.923 -25.280 15.298 1.00 14.11 C +ATOM 179 C CYX A 25 -8.094 -25.717 16.743 1.00 13.75 C +ATOM 180 O CYX A 25 -9.003 -26.483 17.073 1.00 13.67 O +ATOM 181 CB CYX A 25 -8.650 -23.957 15.065 1.00 14.19 C +ATOM 182 SG CYX A 25 -8.726 -23.424 13.337 1.00 14.23 S +ATOM 183 N THR A 26 -7.189 -25.228 17.586 1.00 13.50 N +ATOM 184 CA THR A 26 -7.275 -25.408 19.027 1.00 13.70 C +ATOM 185 C THR A 26 -7.319 -24.042 19.692 1.00 13.29 C +ATOM 186 O THR A 26 -6.869 -23.042 19.125 1.00 12.77 O +ATOM 187 CB THR A 26 -6.080 -26.199 19.585 1.00 14.27 C +ATOM 188 OG1 THR A 26 -4.857 -25.602 19.141 1.00 14.93 O +ATOM 189 CG2 THR A 26 -6.145 -27.647 19.133 1.00 14.63 C +ATOM 190 N THR A 27 -7.854 -24.016 20.904 1.00 13.01 N +ATOM 191 CA THR A 27 -8.085 -22.772 21.619 1.00 13.42 C +ATOM 192 C THR A 27 -6.945 -22.421 22.563 1.00 13.94 C +ATOM 193 O THR A 27 -6.272 -23.293 23.116 1.00 14.20 O +ATOM 194 CB THR A 27 -9.369 -22.858 22.450 1.00 13.53 C +ATOM 195 OG1 THR A 27 -9.257 -23.961 23.356 1.00 13.81 O +ATOM 196 CG2 THR A 27 -10.581 -23.055 21.552 1.00 13.70 C +ATOM 197 N ASN A 28 -6.743 -21.119 22.723 1.00 13.99 N +ATOM 198 CA ASN A 28 -5.795 -20.558 23.666 1.00 14.34 C +ATOM 199 C ASN A 28 -6.570 -19.619 24.569 1.00 14.20 C +ATOM 200 O ASN A 28 -7.245 -18.723 24.086 1.00 14.16 O +ATOM 201 CB ASN A 28 -4.724 -19.766 22.918 1.00 14.93 C +ATOM 202 CG ASN A 28 -4.034 -20.584 21.847 1.00 15.52 C +ATOM 203 OD1 ASN A 28 -4.260 -20.384 20.651 1.00 16.94 O +ATOM 204 ND2 ASN A 28 -3.203 -21.522 22.268 1.00 16.00 N +ATOM 205 N ASN A 29 -6.492 -19.822 25.876 1.00 14.18 N +ATOM 206 CA ASN A 29 -7.198 -18.955 26.806 1.00 14.22 C +ATOM 207 C ASN A 29 -6.317 -17.789 27.225 1.00 13.66 C +ATOM 208 O ASN A 29 -5.530 -17.889 28.167 1.00 14.66 O +ATOM 209 CB ASN A 29 -7.695 -19.758 28.007 1.00 15.01 C +ATOM 210 CG ASN A 29 -8.769 -20.762 27.622 1.00 15.76 C +ATOM 211 OD1 ASN A 29 -9.685 -20.450 26.860 1.00 16.72 O +ATOM 212 ND2 ASN A 29 -8.656 -21.974 28.138 1.00 16.31 N +ATOM 213 N GLY A 30 -6.443 -16.691 26.488 1.00 12.44 N +ATOM 214 CA GLY A 30 -5.703 -15.474 26.769 1.00 11.56 C +ATOM 215 C GLY A 30 -6.519 -14.537 27.625 1.00 10.87 C +ATOM 216 O GLY A 30 -7.609 -14.886 28.096 1.00 10.79 O +ATOM 217 N ALYS A 31 -5.996 -13.338 27.847 0.50 10.47 N +ATOM 218 CA ALYS A 31 -6.727 -12.308 28.569 0.50 10.23 C +ATOM 219 C ALYS A 31 -6.352 -10.971 27.980 0.50 9.72 C +ATOM 220 O ALYS A 31 -5.355 -10.861 27.269 0.50 9.60 O +ATOM 221 CB ALYS A 31 -6.384 -12.321 30.060 0.50 10.47 C +ATOM 222 CG ALYS A 31 -6.701 -13.624 30.776 0.50 10.78 C +ATOM 223 CD ALYS A 31 -6.311 -13.545 32.237 0.50 11.03 C +ATOM 224 CE ALYS A 31 -6.492 -14.877 32.940 0.50 11.25 C +ATOM 225 NZ ALYS A 31 -5.639 -15.949 32.356 0.50 11.28 N +ATOM 226 N AVAL A 32 -7.151 -9.954 28.269 0.50 9.18 N +ATOM 227 CA AVAL A 32 -6.836 -8.624 27.790 0.50 8.82 C +ATOM 228 C AVAL A 32 -6.502 -7.703 28.955 0.50 8.42 C +ATOM 229 O AVAL A 32 -6.956 -7.902 30.079 0.50 8.38 O +ATOM 230 CB AVAL A 32 -7.979 -8.021 26.949 0.50 8.87 C +ATOM 231 CG1AVAL A 32 -8.276 -8.903 25.742 0.50 8.91 C +ATOM 232 CG2AVAL A 32 -9.218 -7.812 27.798 0.50 8.93 C +ATOM 233 N VAL A 33 -5.684 -6.701 28.664 1.00 8.01 N +ATOM 234 CA VAL A 33 -5.239 -5.710 29.653 1.00 7.53 C +ATOM 235 C VAL A 33 -5.333 -4.295 29.088 1.00 7.21 C +ATOM 236 O VAL A 33 -5.004 -4.058 27.928 1.00 7.08 O +ATOM 237 CB VAL A 33 -3.816 -6.010 30.179 1.00 7.49 C +ATOM 238 CG1 VAL A 33 -2.781 -5.970 29.058 1.00 7.47 C +ATOM 239 CG2 VAL A 33 -3.435 -5.048 31.296 1.00 7.45 C +ATOM 240 N LEU A 34 -5.779 -3.369 29.931 1.00 6.91 N +ATOM 241 CA LEU A 34 -5.930 -1.971 29.563 1.00 6.78 C +ATOM 242 C LEU A 34 -4.586 -1.260 29.596 1.00 6.75 C +ATOM 243 O LEU A 34 -3.790 -1.439 30.527 1.00 6.64 O +ATOM 244 CB LEU A 34 -6.908 -1.279 30.519 1.00 6.76 C +ATOM 245 CG LEU A 34 -7.138 0.226 30.357 1.00 6.82 C +ATOM 246 CD1 LEU A 34 -7.909 0.515 29.082 1.00 6.85 C +ATOM 247 CD2 LEU A 34 -7.884 0.749 31.571 1.00 6.81 C +ATOM 248 N ASP A 35 -4.342 -0.451 28.567 1.00 6.59 N +ATOM 249 CA ASP A 35 -3.148 0.384 28.499 1.00 6.64 C +ATOM 250 C ASP A 35 -3.022 1.305 29.719 1.00 6.76 C +ATOM 251 O ASP A 35 -4.004 1.868 30.204 1.00 6.70 O +ATOM 252 CB ASP A 35 -3.146 1.206 27.204 1.00 6.67 C +ATOM 253 CG ASP A 35 -1.971 2.159 27.120 1.00 6.66 C +ATOM 254 OD1 ASP A 35 -2.089 3.294 27.635 1.00 6.53 O +ATOM 255 OD2 ASP A 35 -0.921 1.781 26.557 1.00 6.75 O +ATOM 256 N ALA A 36 -1.787 1.456 30.185 1.00 6.88 N +ATOM 257 CA ALA A 36 -1.486 2.204 31.408 1.00 7.14 C +ATOM 258 C ALA A 36 -1.966 3.657 31.431 1.00 7.41 C +ATOM 259 O ALA A 36 -2.299 4.175 32.496 1.00 7.58 O +ATOM 260 CB ALA A 36 0.009 2.162 31.668 1.00 7.14 C +ATOM 261 N AASN A 37 -1.988 4.313 30.271 0.50 7.57 N +ATOM 262 CA AASN A 37 -2.398 5.722 30.193 0.50 7.71 C +ATOM 263 C AASN A 37 -3.833 5.991 30.634 0.50 7.86 C +ATOM 264 O AASN A 37 -4.145 7.094 31.087 0.50 8.04 O +ATOM 265 CB AASN A 37 -2.197 6.277 28.781 0.50 7.73 C +ATOM 266 CG AASN A 37 -1.116 7.333 28.723 0.50 7.73 C +ATOM 267 OD1AASN A 37 -0.135 7.274 29.458 0.50 7.81 O +ATOM 268 ND2AASN A 37 -1.297 8.314 27.846 0.50 7.80 N +ATOM 269 N TRP A 38 -4.697 4.984 30.521 1.00 7.93 N +ATOM 270 CA TRP A 38 -6.093 5.119 30.920 1.00 8.14 C +ATOM 271 C TRP A 38 -6.300 4.943 32.430 1.00 8.32 C +ATOM 272 O TRP A 38 -7.380 5.225 32.930 1.00 8.64 O +ATOM 273 CB TRP A 38 -6.955 4.099 30.168 1.00 8.23 C +ATOM 274 CG TRP A 38 -7.446 4.578 28.835 1.00 8.33 C +ATOM 275 CD1 TRP A 38 -8.693 5.050 28.554 1.00 8.43 C +ATOM 276 CD2 TRP A 38 -6.715 4.621 27.601 1.00 8.44 C +ATOM 277 NE1 TRP A 38 -8.787 5.392 27.231 1.00 8.59 N +ATOM 278 CE2 TRP A 38 -7.586 5.142 26.620 1.00 8.50 C +ATOM 279 CE3 TRP A 38 -5.408 4.282 27.231 1.00 8.48 C +ATOM 280 CZ2 TRP A 38 -7.200 5.313 25.288 1.00 8.61 C +ATOM 281 CZ3 TRP A 38 -5.018 4.461 25.902 1.00 8.58 C +ATOM 282 CH2 TRP A 38 -5.912 4.974 24.950 1.00 8.62 C +ATOM 283 N ARG A 39 -5.277 4.485 33.151 1.00 8.40 N +ATOM 284 CA ARG A 39 -5.430 4.103 34.554 1.00 8.65 C +ATOM 285 C ARG A 39 -5.293 5.256 35.532 1.00 9.21 C +ATOM 286 O ARG A 39 -4.724 6.301 35.221 1.00 9.42 O +ATOM 287 CB ARG A 39 -4.384 3.049 34.931 1.00 8.43 C +ATOM 288 CG ARG A 39 -4.540 1.726 34.212 1.00 8.16 C +ATOM 289 CD ARG A 39 -3.418 0.760 34.556 1.00 7.97 C +ATOM 290 NE ARG A 39 -3.560 -0.458 33.776 1.00 7.74 N +ATOM 291 CZ ARG A 39 -4.374 -1.469 34.071 1.00 7.60 C +ATOM 292 NH1 ARG A 39 -5.113 -1.459 35.177 1.00 7.46 N +ATOM 293 NH2 ARG A 39 -4.442 -2.510 33.253 1.00 7.49 N +ATOM 294 N TRP A 40 -5.798 5.023 36.735 1.00 9.89 N +ATOM 295 CA TRP A 40 -5.533 5.880 37.879 1.00 10.36 C +ATOM 296 C TRP A 40 -4.045 5.787 38.233 1.00 10.23 C +ATOM 297 O TRP A 40 -3.508 4.688 38.349 1.00 10.39 O +ATOM 298 CB TRP A 40 -6.395 5.410 39.047 1.00 11.09 C +ATOM 299 CG TRP A 40 -6.385 6.279 40.249 1.00 11.73 C +ATOM 300 CD1 TRP A 40 -6.054 7.601 40.318 1.00 12.05 C +ATOM 301 CD2 TRP A 40 -6.783 5.896 41.565 1.00 12.30 C +ATOM 302 NE1 TRP A 40 -6.186 8.050 41.606 1.00 12.46 N +ATOM 303 CE2 TRP A 40 -6.640 7.023 42.390 1.00 12.49 C +ATOM 304 CE3 TRP A 40 -7.229 4.698 42.128 1.00 12.41 C +ATOM 305 CZ2 TRP A 40 -6.938 6.991 43.755 1.00 12.80 C +ATOM 306 CZ3 TRP A 40 -7.529 4.666 43.477 1.00 12.60 C +ATOM 307 CH2 TRP A 40 -7.374 5.802 44.276 1.00 12.73 C +ATOM 308 N LEU A 41 -3.390 6.938 38.367 1.00 9.93 N +ATOM 309 CA LEU A 41 -1.976 7.008 38.743 1.00 9.73 C +ATOM 310 C LEU A 41 -1.868 7.800 40.037 1.00 9.53 C +ATOM 311 O LEU A 41 -2.132 9.007 40.054 1.00 9.32 O +ATOM 312 CB LEU A 41 -1.153 7.678 37.643 1.00 9.74 C +ATOM 313 CG LEU A 41 0.359 7.731 37.873 1.00 9.77 C +ATOM 314 CD1 LEU A 41 0.982 6.357 37.688 1.00 9.75 C +ATOM 315 CD2 LEU A 41 0.998 8.753 36.941 1.00 9.78 C +ATOM 316 N HIS A 42 -1.484 7.127 41.119 1.00 9.34 N +ATOM 317 CA HIS A 42 -1.477 7.748 42.438 1.00 9.46 C +ATOM 318 C HIS A 42 -0.219 7.407 43.222 1.00 9.47 C +ATOM 319 O HIS A 42 0.540 6.507 42.856 1.00 9.24 O +ATOM 320 CB HIS A 42 -2.719 7.326 43.233 1.00 9.53 C +ATOM 321 CG HIS A 42 -2.807 5.853 43.481 1.00 9.47 C +ATOM 322 ND1 HIS A 42 -2.055 5.218 44.443 1.00 9.45 N +ATOM 323 CD2 HIS A 42 -3.554 4.889 42.891 1.00 9.49 C +ATOM 324 CE1 HIS A 42 -2.333 3.928 44.437 1.00 9.50 C +ATOM 325 NE2 HIS A 42 -3.238 3.702 43.503 1.00 9.42 N +ATOM 326 N SER A 43 -0.027 8.132 44.320 1.00 9.74 N +ATOM 327 CA SER A 43 1.103 7.918 45.208 1.00 10.15 C +ATOM 328 C SER A 43 1.127 6.488 45.724 1.00 10.33 C +ATOM 329 O SER A 43 0.078 5.880 45.953 1.00 10.06 O +ATOM 330 CB SER A 43 1.008 8.866 46.406 1.00 10.30 C +ATOM 331 OG SER A 43 2.027 8.595 47.353 1.00 10.79 O +ATOM 332 N THR A 44 2.327 5.958 45.929 1.00 10.78 N +ATOM 333 CA THR A 44 2.484 4.652 46.570 1.00 11.47 C +ATOM 334 C THR A 44 2.068 4.621 48.057 1.00 12.50 C +ATOM 335 O THR A 44 1.910 3.540 48.615 1.00 12.59 O +ATOM 336 CB THR A 44 3.940 4.170 46.462 1.00 11.28 C +ATOM 337 OG1 THR A 44 4.812 5.225 46.877 1.00 10.96 O +ATOM 338 CG2 THR A 44 4.269 3.780 45.034 1.00 11.23 C +ATOM 339 N ASER A 45 1.918 5.783 48.692 0.50 13.22 N +ATOM 340 CA ASER A 45 1.523 5.836 50.105 0.50 13.98 C +ATOM 341 C ASER A 45 0.064 6.238 50.327 0.50 14.57 C +ATOM 342 O ASER A 45 -0.322 6.536 51.461 0.50 14.83 O +ATOM 343 CB ASER A 45 2.432 6.790 50.888 0.50 14.24 C +ATOM 344 OG ASER A 45 2.666 7.992 50.174 0.50 14.51 O +ATOM 345 N GLY A 46 -0.737 6.280 49.264 1.00 14.94 N +ATOM 346 CA GLY A 46 -2.163 6.560 49.408 1.00 15.51 C +ATOM 347 C GLY A 46 -2.843 6.888 48.101 1.00 15.58 C +ATOM 348 O GLY A 46 -2.393 6.469 47.035 1.00 15.84 O +ATOM 349 N ASER A 47 -3.930 7.650 48.184 0.50 15.59 N +ATOM 350 CA ASER A 47 -4.790 7.915 47.031 0.50 15.41 C +ATOM 351 C ASER A 47 -4.503 9.235 46.311 0.50 15.12 C +ATOM 352 O ASER A 47 -5.193 9.565 45.345 0.50 15.20 O +ATOM 353 CB ASER A 47 -6.255 7.885 47.469 0.50 15.61 C +ATOM 354 OG ASER A 47 -6.465 8.732 48.582 0.50 15.88 O +ATOM 355 N THR A 48 -3.497 9.985 46.763 1.00 14.73 N +ATOM 356 CA THR A 48 -3.141 11.262 46.125 1.00 14.42 C +ATOM 357 C THR A 48 -2.727 11.041 44.664 1.00 13.55 C +ATOM 358 O THR A 48 -1.888 10.188 44.386 1.00 13.34 O +ATOM 359 CB THR A 48 -2.001 11.971 46.881 1.00 14.79 C +ATOM 360 OG1 THR A 48 -2.393 12.169 48.247 1.00 15.66 O +ATOM 361 CG2 THR A 48 -1.676 13.319 46.249 1.00 14.96 C +ATOM 362 N AASN A 49 -3.328 11.797 43.747 0.50 13.20 N +ATOM 363 CA AASN A 49 -3.050 11.657 42.319 0.50 12.94 C +ATOM 364 C AASN A 49 -1.660 12.162 41.953 0.50 12.63 C +ATOM 365 O AASN A 49 -1.235 13.219 42.418 0.50 12.84 O +ATOM 366 CB AASN A 49 -4.074 12.442 41.494 0.50 13.07 C +ATOM 367 CG AASN A 49 -5.417 11.746 41.401 0.50 13.10 C +ATOM 368 OD1AASN A 49 -5.528 10.551 41.643 0.50 13.27 O +ATOM 369 ND2AASN A 49 -6.446 12.499 41.033 0.50 13.36 N +ATOM 370 N CYX A 50 -0.958 11.411 41.110 1.00 12.19 N +ATOM 371 CA CYX A 50 0.289 11.889 40.520 1.00 11.82 C +ATOM 372 C CYX A 50 -0.034 12.720 39.291 1.00 11.83 C +ATOM 373 O CYX A 50 0.745 13.583 38.884 1.00 11.76 O +ATOM 374 CB CYX A 50 1.170 10.729 40.109 1.00 11.46 C +ATOM 375 SG CYX A 50 1.923 9.901 41.514 1.00 11.00 S +ATOM 376 N TYR A 51 -1.189 12.435 38.702 1.00 12.03 N +ATOM 377 CA TYR A 51 -1.632 13.076 37.479 1.00 12.21 C +ATOM 378 C TYR A 51 -3.145 13.023 37.458 1.00 12.60 C +ATOM 379 O TYR A 51 -3.733 12.018 37.831 1.00 13.11 O +ATOM 380 CB TYR A 51 -1.080 12.302 36.280 1.00 12.03 C +ATOM 381 CG TYR A 51 -1.498 12.811 34.915 1.00 11.96 C +ATOM 382 CD1 TYR A 51 -2.729 12.462 34.363 1.00 12.02 C +ATOM 383 CD2 TYR A 51 -0.646 13.610 34.163 1.00 11.87 C +ATOM 384 CE1 TYR A 51 -3.106 12.917 33.108 1.00 12.00 C +ATOM 385 CE2 TYR A 51 -1.011 14.068 32.908 1.00 12.04 C +ATOM 386 CZ TYR A 51 -2.243 13.715 32.385 1.00 12.17 C +ATOM 387 OH TYR A 51 -2.605 14.162 31.138 1.00 12.60 O +ATOM 388 N THR A 52 -3.778 14.108 37.033 1.00 13.18 N +ATOM 389 CA THR A 52 -5.182 14.045 36.644 1.00 13.41 C +ATOM 390 C THR A 52 -5.485 15.239 35.754 1.00 13.30 C +ATOM 391 O THR A 52 -4.718 16.206 35.724 1.00 13.39 O +ATOM 392 CB THR A 52 -6.143 13.984 37.854 1.00 13.90 C +ATOM 393 OG1 THR A 52 -7.430 13.518 37.419 1.00 14.09 O +ATOM 394 CG2 THR A 52 -6.289 15.348 38.526 1.00 13.91 C +ATOM 395 N GLY A 53 -6.595 15.154 35.027 1.00 13.35 N +ATOM 396 CA GLY A 53 -6.898 16.127 33.995 1.00 13.20 C +ATOM 397 C GLY A 53 -5.805 16.031 32.954 1.00 13.09 C +ATOM 398 O GLY A 53 -5.687 15.021 32.262 1.00 13.63 O +ATOM 399 N ASN A 54 -4.989 17.073 32.861 1.00 12.82 N +ATOM 400 CA ASN A 54 -3.830 17.059 31.979 1.00 12.67 C +ATOM 401 C ASN A 54 -2.553 17.606 32.619 1.00 12.41 C +ATOM 402 O ASN A 54 -1.657 18.048 31.906 1.00 12.73 O +ATOM 403 CB ASN A 54 -4.139 17.814 30.679 1.00 12.72 C +ATOM 404 CG ASN A 54 -4.463 19.282 30.905 1.00 12.89 C +ATOM 405 OD1 ASN A 54 -4.396 19.791 32.025 1.00 12.74 O +ATOM 406 ND2 ASN A 54 -4.830 19.968 29.833 1.00 13.06 N +ATOM 407 N ATHR A 55 -2.469 17.585 33.948 0.50 12.25 N +ATOM 408 CA ATHR A 55 -1.272 18.072 34.632 0.50 12.05 C +ATOM 409 C ATHR A 55 -0.806 17.120 35.718 0.50 12.02 C +ATOM 410 O ATHR A 55 -1.598 16.377 36.304 0.50 12.06 O +ATOM 411 CB ATHR A 55 -1.485 19.460 35.262 0.50 11.93 C +ATOM 412 OG1ATHR A 55 -2.579 19.408 36.186 0.50 11.73 O +ATOM 413 CG2ATHR A 55 -1.757 20.506 34.181 0.50 11.89 C +ATOM 414 N TRP A 56 0.496 17.164 35.971 1.00 12.01 N +ATOM 415 CA TRP A 56 1.137 16.334 36.978 1.00 12.04 C +ATOM 416 C TRP A 56 1.200 17.054 38.319 1.00 12.46 C +ATOM 417 O TRP A 56 1.310 18.284 38.378 1.00 12.95 O +ATOM 418 CB TRP A 56 2.568 16.019 36.557 1.00 11.73 C +ATOM 419 CG TRP A 56 2.694 15.193 35.323 1.00 11.41 C +ATOM 420 CD1 TRP A 56 2.700 15.637 34.033 1.00 11.38 C +ATOM 421 CD2 TRP A 56 2.884 13.777 35.263 1.00 11.29 C +ATOM 422 NE1 TRP A 56 2.868 14.577 33.173 1.00 11.27 N +ATOM 423 CE2 TRP A 56 2.981 13.425 33.903 1.00 11.12 C +ATOM 424 CE3 TRP A 56 2.968 12.768 36.229 1.00 11.12 C +ATOM 425 CZ2 TRP A 56 3.164 12.107 33.483 1.00 11.26 C +ATOM 426 CZ3 TRP A 56 3.144 11.457 35.809 1.00 11.18 C +ATOM 427 CH2 TRP A 56 3.242 11.141 34.453 1.00 11.20 C +ATOM 428 N NLN A 57 1.161 16.277 39.393 1.00 12.75 N +ATOM 429 CA NLN A 57 1.526 16.769 40.712 1.00 13.28 C +ATOM 430 C NLN A 57 3.046 16.835 40.775 1.00 13.61 C +ATOM 431 O NLN A 57 3.712 15.799 40.789 1.00 13.19 O +ATOM 432 CB NLN A 57 0.978 15.836 41.788 1.00 13.71 C +ATOM 433 CG NLN A 57 1.313 16.297 43.192 1.00 14.33 C +ATOM 434 OD1 NLN A 57 2.447 16.681 43.479 1.00 14.29 O +ATOM 435 ND2 NLN A 57 0.319 16.254 44.083 1.00 15.36 N +ATOM 436 N THR A 58 3.598 18.045 40.806 1.00 14.27 N +ATOM 437 CA THR A 58 5.052 18.217 40.707 1.00 15.03 C +ATOM 438 C THR A 58 5.799 17.951 42.016 1.00 14.95 C +ATOM 439 O THR A 58 7.027 17.895 42.015 1.00 14.96 O +ATOM 440 CB THR A 58 5.436 19.623 40.204 1.00 15.78 C +ATOM 441 OG1 THR A 58 4.836 20.612 41.046 1.00 16.86 O +ATOM 442 CG2 THR A 58 4.983 19.820 38.763 1.00 16.18 C +ATOM 443 N THR A 59 5.076 17.800 43.122 1.00 14.72 N +ATOM 444 CA THR A 59 5.699 17.389 44.381 1.00 14.76 C +ATOM 445 C THR A 59 6.043 15.898 44.322 1.00 14.10 C +ATOM 446 O THR A 59 7.149 15.492 44.681 1.00 14.38 O +ATOM 447 CB THR A 59 4.787 17.696 45.584 1.00 15.30 C +ATOM 448 OG1 THR A 59 4.568 19.110 45.657 1.00 16.15 O +ATOM 449 CG2 THR A 59 5.407 17.204 46.895 1.00 15.48 C +ATOM 450 N LEU A 60 5.087 15.091 43.867 1.00 13.32 N +ATOM 451 CA LEU A 60 5.302 13.657 43.669 1.00 12.81 C +ATOM 452 C LEU A 60 6.179 13.377 42.447 1.00 12.37 C +ATOM 453 O LEU A 60 6.916 12.389 42.413 1.00 11.98 O +ATOM 454 CB LEU A 60 3.957 12.937 43.507 1.00 13.02 C +ATOM 455 CG LEU A 60 3.055 12.931 44.745 1.00 13.10 C +ATOM 456 CD1 LEU A 60 1.664 12.411 44.420 1.00 13.42 C +ATOM 457 CD2 LEU A 60 3.684 12.121 45.873 1.00 13.44 C +ATOM 458 N CYX A 61 6.099 14.256 41.450 1.00 11.83 N +ATOM 459 CA CYX A 61 6.777 14.052 40.172 1.00 11.69 C +ATOM 460 C CYX A 61 7.632 15.255 39.777 1.00 11.92 C +ATOM 461 O CYX A 61 7.325 15.945 38.807 1.00 11.79 O +ATOM 462 CB CYX A 61 5.738 13.762 39.092 1.00 11.45 C +ATOM 463 SG CYX A 61 4.927 12.166 39.326 1.00 11.08 S +ATOM 464 N PRO A 62 8.712 15.510 40.536 1.00 12.14 N +ATOM 465 CA PRO A 62 9.579 16.657 40.246 1.00 12.50 C +ATOM 466 C PRO A 62 10.533 16.395 39.081 1.00 12.57 C +ATOM 467 O PRO A 62 11.098 17.335 38.512 1.00 12.87 O +ATOM 468 CB PRO A 62 10.351 16.833 41.550 1.00 12.40 C +ATOM 469 CG PRO A 62 10.435 15.456 42.110 1.00 12.47 C +ATOM 470 CD PRO A 62 9.132 14.805 41.761 1.00 12.32 C +ATOM 471 N ASP A 63 10.717 15.123 38.747 1.00 12.55 N +ATOM 472 CA ASP A 63 11.467 14.716 37.568 1.00 12.69 C +ATOM 473 C ASP A 63 10.955 13.338 37.148 1.00 12.18 C +ATOM 474 O ASP A 63 10.151 12.731 37.851 1.00 11.52 O +ATOM 475 CB ASP A 63 12.964 14.676 37.876 1.00 13.44 C +ATOM 476 CG ASP A 63 13.302 13.705 38.990 1.00 14.05 C +ATOM 477 OD1 ASP A 63 13.520 12.514 38.703 1.00 14.62 O +ATOM 478 OD2 ASP A 63 13.350 14.129 40.165 1.00 15.76 O +ATOM 479 N ASP A 64 11.434 12.849 36.012 1.00 11.93 N +ATOM 480 CA ASP A 64 10.944 11.596 35.443 1.00 11.70 C +ATOM 481 C ASP A 64 11.212 10.370 36.315 1.00 11.60 C +ATOM 482 O ASP A 64 10.379 9.467 36.395 1.00 11.31 O +ATOM 483 CB ASP A 64 11.551 11.380 34.057 1.00 11.70 C +ATOM 484 CG ASP A 64 10.992 12.340 33.011 1.00 11.86 C +ATOM 485 OD1 ASP A 64 9.981 13.023 33.279 1.00 11.75 O +ATOM 486 OD2 ASP A 64 11.561 12.376 31.898 1.00 12.28 O +ATOM 487 N THR A 65 12.375 10.336 36.956 1.00 11.47 N +ATOM 488 CA THR A 65 12.780 9.180 37.751 1.00 11.48 C +ATOM 489 C THR A 65 12.037 9.136 39.082 1.00 11.25 C +ATOM 490 O THR A 65 11.455 8.115 39.434 1.00 10.80 O +ATOM 491 CB THR A 65 14.300 9.185 37.996 1.00 11.87 C +ATOM 492 OG1 THR A 65 14.976 9.103 36.737 1.00 12.41 O +ATOM 493 CG2 THR A 65 14.717 8.008 38.861 1.00 12.08 C +ATOM 494 N THR A 66 12.059 10.248 39.810 1.00 10.97 N +ATOM 495 CA THR A 66 11.361 10.345 41.092 1.00 10.87 C +ATOM 496 C THR A 66 9.876 10.054 40.930 1.00 10.50 C +ATOM 497 O THR A 66 9.269 9.391 41.773 1.00 10.40 O +ATOM 498 CB THR A 66 11.551 11.740 41.711 1.00 11.14 C +ATOM 499 OG1 THR A 66 12.955 12.037 41.752 1.00 11.68 O +ATOM 500 CG2 THR A 66 10.983 11.790 43.114 1.00 11.34 C +ATOM 501 N CYX A 67 9.299 10.549 39.840 1.00 10.15 N +ATOM 502 CA CYX A 67 7.892 10.302 39.532 1.00 10.01 C +ATOM 503 C CYX A 67 7.623 8.801 39.404 1.00 9.93 C +ATOM 504 O CYX A 67 6.691 8.283 40.004 1.00 9.76 O +ATOM 505 CB CYX A 67 7.510 11.027 38.240 1.00 10.14 C +ATOM 506 SG CYX A 67 5.748 11.033 37.839 1.00 10.31 S +ATOM 507 N ALA A 68 8.455 8.101 38.640 1.00 9.77 N +ATOM 508 CA ALA A 68 8.323 6.649 38.503 1.00 9.74 C +ATOM 509 C ALA A 68 8.477 5.908 39.834 1.00 9.83 C +ATOM 510 O ALA A 68 7.818 4.901 40.056 1.00 9.68 O +ATOM 511 CB ALA A 68 9.330 6.122 37.495 1.00 9.80 C +ATOM 512 N GLN A 69 9.351 6.401 40.709 1.00 10.03 N +ATOM 513 CA GLN A 69 9.527 5.805 42.038 1.00 10.27 C +ATOM 514 C GLN A 69 8.307 6.017 42.924 1.00 9.98 C +ATOM 515 O GLN A 69 7.969 5.156 43.739 1.00 9.64 O +ATOM 516 CB GLN A 69 10.742 6.405 42.745 1.00 10.92 C +ATOM 517 CG GLN A 69 12.074 6.080 42.093 1.00 11.68 C +ATOM 518 CD GLN A 69 13.208 6.938 42.622 1.00 12.52 C +ATOM 519 OE1 GLN A 69 12.995 7.859 43.416 1.00 14.13 O +ATOM 520 NE2 GLN A 69 14.418 6.644 42.184 1.00 13.36 N +ATOM 521 N ASN A 70 7.662 7.173 42.772 1.00 9.85 N +ATOM 522 CA ASN A 70 6.588 7.582 43.672 1.00 9.86 C +ATOM 523 C ASN A 70 5.181 7.211 43.234 1.00 9.67 C +ATOM 524 O ASN A 70 4.259 7.308 44.035 1.00 9.78 O +ATOM 525 CB ASN A 70 6.618 9.100 43.879 1.00 10.03 C +ATOM 526 CG ASN A 70 7.792 9.561 44.717 1.00 10.30 C +ATOM 527 OD1 ASN A 70 8.461 8.761 45.375 1.00 10.69 O +ATOM 528 ND2 ASN A 70 8.047 10.866 44.700 1.00 10.31 N +ATOM 529 N CYX A 71 5.004 6.807 41.978 1.00 9.47 N +ATOM 530 CA CYX A 71 3.659 6.710 41.408 1.00 9.55 C +ATOM 531 C CYX A 71 3.283 5.308 40.953 1.00 9.17 C +ATOM 532 O CYX A 71 4.066 4.615 40.296 1.00 9.20 O +ATOM 533 CB CYX A 71 3.532 7.694 40.260 1.00 9.77 C +ATOM 534 SG CYX A 71 3.751 9.399 40.804 1.00 10.33 S +ATOM 535 N ALA A 72 2.058 4.917 41.298 1.00 8.75 N +ATOM 536 CA ALA A 72 1.565 3.567 41.090 1.00 8.46 C +ATOM 537 C ALA A 72 0.350 3.572 40.175 1.00 8.49 C +ATOM 538 O ALA A 72 -0.547 4.402 40.334 1.00 8.30 O +ATOM 539 CB ALA A 72 1.202 2.941 42.431 1.00 8.41 C +ATOM 540 N LEU A 73 0.341 2.636 39.225 1.00 8.43 N +ATOM 541 CA LEU A 73 -0.812 2.374 38.369 1.00 8.50 C +ATOM 542 C LEU A 73 -1.722 1.381 39.070 1.00 8.77 C +ATOM 543 O LEU A 73 -1.256 0.355 39.556 1.00 8.93 O +ATOM 544 CB LEU A 73 -0.360 1.768 37.042 1.00 8.47 C +ATOM 545 CG LEU A 73 0.483 2.684 36.163 1.00 8.50 C +ATOM 546 CD1 LEU A 73 1.231 1.883 35.112 1.00 8.56 C +ATOM 547 CD2 LEU A 73 -0.393 3.752 35.516 1.00 8.49 C +ATOM 548 N ASP A 74 -3.018 1.658 39.128 1.00 8.90 N +ATOM 549 CA ASP A 74 -3.893 0.743 39.850 1.00 9.01 C +ATOM 550 C ASP A 74 -4.836 -0.041 38.935 1.00 8.94 C +ATOM 551 O ASP A 74 -4.824 0.116 37.710 1.00 8.73 O +ATOM 552 CB ASP A 74 -4.629 1.472 40.979 1.00 9.24 C +ATOM 553 CG ASP A 74 -4.599 0.690 42.277 1.00 9.32 C +ATOM 554 OD1 ASP A 74 -4.903 -0.514 42.239 1.00 9.64 O +ATOM 555 OD2 ASP A 74 -4.237 1.248 43.329 1.00 9.18 O +ATOM 556 N GLY A 75 -5.618 -0.928 39.544 1.00 9.13 N +ATOM 557 CA GLY A 75 -6.501 -1.812 38.807 1.00 9.31 C +ATOM 558 C GLY A 75 -7.612 -1.062 38.113 1.00 9.61 C +ATOM 559 O GLY A 75 -7.937 0.065 38.486 1.00 9.79 O +ATOM 560 N ALA A 76 -8.185 -1.699 37.097 1.00 9.75 N +ATOM 561 CA ALA A 76 -9.215 -1.086 36.262 1.00 10.17 C +ATOM 562 C ALA A 76 -10.553 -1.807 36.377 1.00 10.57 C +ATOM 563 O ALA A 76 -10.610 -3.040 36.378 1.00 10.35 O +ATOM 564 CB ALA A 76 -8.764 -1.091 34.811 1.00 10.16 C +ATOM 565 N ASP A 77 -11.630 -1.029 36.470 1.00 11.37 N +ATOM 566 CA ASP A 77 -12.984 -1.565 36.366 1.00 11.98 C +ATOM 567 C ASP A 77 -13.324 -1.596 34.876 1.00 11.40 C +ATOM 568 O ASP A 77 -13.798 -0.605 34.311 1.00 11.13 O +ATOM 569 CB ASP A 77 -13.973 -0.690 37.141 1.00 13.29 C +ATOM 570 CG ASP A 77 -15.403 -1.206 37.078 1.00 14.40 C +ATOM 571 OD1 ASP A 77 -15.685 -2.195 36.365 1.00 15.48 O +ATOM 572 OD2 ASP A 77 -16.258 -0.602 37.758 1.00 16.78 O +ATOM 573 N TYR A 78 -13.068 -2.742 34.253 1.00 11.06 N +ATOM 574 CA TYR A 78 -13.088 -2.848 32.792 1.00 11.04 C +ATOM 575 C TYR A 78 -14.430 -2.437 32.188 1.00 11.60 C +ATOM 576 O TYR A 78 -14.481 -1.576 31.308 1.00 11.11 O +ATOM 577 CB TYR A 78 -12.652 -4.249 32.333 1.00 10.66 C +ATOM 578 CG TYR A 78 -11.147 -4.390 32.337 1.00 10.34 C +ATOM 579 CD1 TYR A 78 -10.445 -4.609 33.521 1.00 10.09 C +ATOM 580 CD2 TYR A 78 -10.419 -4.244 31.166 1.00 10.05 C +ATOM 581 CE1 TYR A 78 -9.062 -4.710 33.527 1.00 10.04 C +ATOM 582 CE2 TYR A 78 -9.037 -4.343 31.162 1.00 9.94 C +ATOM 583 CZ TYR A 78 -8.363 -4.575 32.346 1.00 9.86 C +ATOM 584 OH TYR A 78 -6.988 -4.667 32.352 1.00 9.69 O +ATOM 585 N GLU A 79 -15.514 -3.036 32.665 1.00 12.61 N +ATOM 586 CA GLU A 79 -16.834 -2.716 32.135 1.00 13.61 C +ATOM 587 C GLU A 79 -17.354 -1.375 32.658 1.00 13.45 C +ATOM 588 O GLU A 79 -17.795 -0.529 31.877 1.00 13.48 O +ATOM 589 CB GLU A 79 -17.825 -3.832 32.460 1.00 14.93 C +ATOM 590 CG GLU A 79 -19.223 -3.585 31.919 1.00 16.23 C +ATOM 591 CD GLU A 79 -20.172 -4.741 32.173 1.00 17.39 C +ATOM 592 OE1 GLU A 79 -19.767 -5.728 32.826 1.00 18.53 O +ATOM 593 OE2 GLU A 79 -21.331 -4.654 31.715 1.00 19.38 O +ATOM 594 N GLY A 80 -17.293 -1.183 33.972 1.00 13.18 N +ATOM 595 CA GLY A 80 -17.925 -0.034 34.619 1.00 13.23 C +ATOM 596 C GLY A 80 -17.317 1.319 34.307 1.00 13.25 C +ATOM 597 O GLY A 80 -18.032 2.321 34.208 1.00 13.79 O +ATOM 598 N THR A 81 -15.996 1.353 34.161 1.00 12.96 N +ATOM 599 CA THR A 81 -15.278 2.590 33.901 1.00 12.76 C +ATOM 600 C THR A 81 -14.916 2.765 32.421 1.00 12.00 C +ATOM 601 O THR A 81 -15.010 3.868 31.886 1.00 12.07 O +ATOM 602 CB THR A 81 -14.001 2.662 34.762 1.00 13.14 C +ATOM 603 OG1 THR A 81 -14.363 2.560 36.147 1.00 13.98 O +ATOM 604 CG2 THR A 81 -13.246 3.970 34.522 1.00 13.33 C +ATOM 605 N TYR A 82 -14.514 1.678 31.767 1.00 11.21 N +ATOM 606 CA TYR A 82 -13.928 1.768 30.428 1.00 10.80 C +ATOM 607 C TYR A 82 -14.790 1.192 29.309 1.00 10.58 C +ATOM 608 O TYR A 82 -14.439 1.324 28.136 1.00 10.40 O +ATOM 609 CB TYR A 82 -12.538 1.125 30.442 1.00 10.51 C +ATOM 610 CG TYR A 82 -11.629 1.802 31.437 1.00 10.52 C +ATOM 611 CD1 TYR A 82 -11.046 3.033 31.146 1.00 10.35 C +ATOM 612 CD2 TYR A 82 -11.383 1.237 32.687 1.00 10.39 C +ATOM 613 CE1 TYR A 82 -10.231 3.675 32.063 1.00 10.50 C +ATOM 614 CE2 TYR A 82 -10.572 1.871 33.609 1.00 10.49 C +ATOM 615 CZ TYR A 82 -9.990 3.083 33.294 1.00 10.52 C +ATOM 616 OH TYR A 82 -9.185 3.710 34.215 1.00 10.80 O +ATOM 617 N GLY A 83 -15.916 0.573 29.654 1.00 10.42 N +ATOM 618 CA GLY A 83 -16.823 0.021 28.653 1.00 10.37 C +ATOM 619 C GLY A 83 -16.200 -1.108 27.860 1.00 10.39 C +ATOM 620 O GLY A 83 -16.498 -1.280 26.675 1.00 10.33 O +ATOM 621 N ILE A 84 -15.340 -1.880 28.523 1.00 10.46 N +ATOM 622 CA ILE A 84 -14.658 -3.013 27.923 1.00 10.77 C +ATOM 623 C ILE A 84 -15.288 -4.295 28.459 1.00 11.31 C +ATOM 624 O ILE A 84 -15.323 -4.509 29.669 1.00 11.22 O +ATOM 625 CB ILE A 84 -13.157 -3.012 28.287 1.00 10.57 C +ATOM 626 CG1 ILE A 84 -12.485 -1.723 27.796 1.00 10.44 C +ATOM 627 CG2 ILE A 84 -12.469 -4.250 27.722 1.00 10.46 C +ATOM 628 CD1 ILE A 84 -11.069 -1.531 28.302 1.00 10.37 C +ATOM 629 N ATHR A 85 -15.796 -5.139 27.567 0.75 11.72 N +ATOM 630 CA ATHR A 85 -16.347 -6.425 27.976 0.75 12.35 C +ATOM 631 C ATHR A 85 -15.794 -7.524 27.081 0.75 12.77 C +ATOM 632 O ATHR A 85 -15.868 -7.447 25.858 0.75 12.78 O +ATOM 633 CB ATHR A 85 -17.891 -6.423 27.975 0.75 12.56 C +ATOM 634 OG1ATHR A 85 -18.376 -6.042 26.689 0.75 12.84 O +ATOM 635 CG2ATHR A 85 -18.432 -5.455 29.020 0.75 12.73 C +ATOM 636 N ALA A 86 -15.218 -8.534 27.719 1.00 13.52 N +ATOM 637 CA ALA A 86 -14.621 -9.675 27.027 1.00 14.59 C +ATOM 638 C ALA A 86 -15.301 -10.943 27.506 1.00 16.05 C +ATOM 639 O ALA A 86 -15.304 -11.242 28.704 1.00 17.32 O +ATOM 640 CB ALA A 86 -13.133 -9.737 27.298 1.00 14.84 C +ATOM 641 N SER A 87 -15.896 -11.675 26.571 1.00 16.87 N +ATOM 642 CA SER A 87 -16.579 -12.923 26.881 1.00 17.40 C +ATOM 643 C SER A 87 -16.314 -13.925 25.769 1.00 16.58 C +ATOM 644 O SER A 87 -16.473 -13.599 24.590 1.00 16.90 O +ATOM 645 CB SER A 87 -18.082 -12.680 27.014 1.00 18.30 C +ATOM 646 OG SER A 87 -18.744 -13.846 27.474 1.00 20.25 O +ATOM 647 N GLY A 88 -15.906 -15.136 26.139 1.00 15.30 N +ATOM 648 CA GLY A 88 -15.668 -16.187 25.159 1.00 14.39 C +ATOM 649 C GLY A 88 -14.613 -15.758 24.156 1.00 13.47 C +ATOM 650 O GLY A 88 -13.492 -15.442 24.545 1.00 13.35 O +ATOM 651 N ASN A 89 -14.988 -15.726 22.873 1.00 12.60 N +ATOM 652 CA ASN A 89 -14.099 -15.308 21.780 1.00 12.03 C +ATOM 653 C ASN A 89 -14.234 -13.833 21.393 1.00 11.19 C +ATOM 654 O ASN A 89 -13.649 -13.418 20.398 1.00 10.71 O +ATOM 655 CB ASN A 89 -14.393 -16.115 20.499 1.00 12.44 C +ATOM 656 CG ASN A 89 -14.120 -17.598 20.635 1.00 12.87 C +ATOM 657 OD1 ASN A 89 -13.444 -18.047 21.550 1.00 13.66 O +ATOM 658 ND2 ASN A 89 -14.629 -18.370 19.682 1.00 13.10 N +ATOM 659 N SER A 90 -15.007 -13.053 22.149 1.00 10.52 N +ATOM 660 CA SER A 90 -15.387 -11.703 21.730 1.00 10.19 C +ATOM 661 C SER A 90 -14.899 -10.625 22.687 1.00 9.80 C +ATOM 662 O SER A 90 -14.948 -10.797 23.904 1.00 9.73 O +ATOM 663 CB SER A 90 -16.906 -11.592 21.604 1.00 10.31 C +ATOM 664 OG SER A 90 -17.417 -12.581 20.724 1.00 10.92 O +ATOM 665 N LEU A 91 -14.444 -9.513 22.115 1.00 9.26 N +ATOM 666 CA LEU A 91 -14.060 -8.324 22.859 1.00 9.14 C +ATOM 667 C LEU A 91 -14.853 -7.137 22.332 1.00 9.08 C +ATOM 668 O LEU A 91 -14.752 -6.796 21.148 1.00 9.07 O +ATOM 669 CB LEU A 91 -12.566 -8.043 22.692 1.00 9.04 C +ATOM 670 CG LEU A 91 -12.060 -6.748 23.344 1.00 8.98 C +ATOM 671 CD1 LEU A 91 -12.248 -6.781 24.850 1.00 8.90 C +ATOM 672 CD2 LEU A 91 -10.599 -6.487 22.999 1.00 9.07 C +ATOM 673 N ARG A 92 -15.640 -6.518 23.208 1.00 8.92 N +ATOM 674 CA ARG A 92 -16.364 -5.305 22.874 1.00 9.11 C +ATOM 675 C ARG A 92 -15.744 -4.098 23.576 1.00 8.86 C +ATOM 676 O ARG A 92 -15.521 -4.123 24.786 1.00 8.64 O +ATOM 677 CB ARG A 92 -17.829 -5.429 23.276 1.00 9.36 C +ATOM 678 CG ARG A 92 -18.628 -4.166 23.006 1.00 9.89 C +ATOM 679 CD ARG A 92 -20.114 -4.360 23.228 1.00 10.50 C +ATOM 680 NE ARG A 92 -20.792 -3.068 23.211 1.00 11.22 N +ATOM 681 CZ ARG A 92 -22.058 -2.858 22.859 1.00 12.03 C +ATOM 682 NH1 ARG A 92 -22.848 -3.856 22.475 1.00 12.44 N +ATOM 683 NH2 ARG A 92 -22.533 -1.621 22.886 1.00 12.55 N +ATOM 684 N LEU A 93 -15.490 -3.047 22.801 1.00 8.65 N +ATOM 685 CA LEU A 93 -15.034 -1.759 23.317 1.00 8.55 C +ATOM 686 C LEU A 93 -16.098 -0.713 23.013 1.00 8.75 C +ATOM 687 O LEU A 93 -16.491 -0.551 21.861 1.00 8.49 O +ATOM 688 CB LEU A 93 -13.719 -1.345 22.655 1.00 8.48 C +ATOM 689 CG LEU A 93 -12.628 -2.415 22.600 1.00 8.42 C +ATOM 690 CD1 LEU A 93 -11.410 -1.874 21.862 1.00 8.38 C +ATOM 691 CD2 LEU A 93 -12.252 -2.890 23.992 1.00 8.45 C +ATOM 692 N ASN A 94 -16.568 -0.014 24.041 1.00 9.08 N +ATOM 693 CA ASN A 94 -17.490 1.104 23.851 1.00 9.51 C +ATOM 694 C ASN A 94 -16.738 2.418 23.764 1.00 9.71 C +ATOM 695 O ASN A 94 -15.699 2.601 24.401 1.00 9.77 O +ATOM 696 CB ASN A 94 -18.493 1.185 24.997 1.00 9.64 C +ATOM 697 CG ASN A 94 -19.449 0.010 25.023 1.00 9.89 C +ATOM 698 OD1 ASN A 94 -19.602 -0.718 24.036 1.00 10.18 O +ATOM 699 ND2 ASN A 94 -20.118 -0.172 26.154 1.00 10.08 N +ATOM 700 N PHE A 95 -17.283 3.345 22.984 1.00 10.18 N +ATOM 701 CA PHE A 95 -16.618 4.614 22.720 1.00 10.82 C +ATOM 702 C PHE A 95 -16.680 5.509 23.952 1.00 11.58 C +ATOM 703 O PHE A 95 -15.651 5.970 24.433 1.00 11.50 O +ATOM 704 CB PHE A 95 -17.267 5.294 21.510 1.00 10.66 C +ATOM 705 CG PHE A 95 -16.639 6.601 21.118 1.00 10.67 C +ATOM 706 CD1 PHE A 95 -15.259 6.777 21.140 1.00 10.64 C +ATOM 707 CD2 PHE A 95 -17.435 7.652 20.679 1.00 10.54 C +ATOM 708 CE1 PHE A 95 -14.692 7.986 20.761 1.00 10.61 C +ATOM 709 CE2 PHE A 95 -16.874 8.859 20.300 1.00 10.66 C +ATOM 710 CZ PHE A 95 -15.503 9.026 20.341 1.00 10.71 C +ATOM 711 N VAL A 96 -17.886 5.739 24.461 1.00 12.80 N +ATOM 712 CA VAL A 96 -18.076 6.595 25.632 1.00 13.64 C +ATOM 713 C VAL A 96 -18.694 5.800 26.775 1.00 14.43 C +ATOM 714 O VAL A 96 -19.687 5.091 26.589 1.00 14.57 O +ATOM 715 CB VAL A 96 -18.969 7.810 25.307 1.00 13.89 C +ATOM 716 CG1 VAL A 96 -19.166 8.679 26.544 1.00 14.16 C +ATOM 717 CG2 VAL A 96 -18.357 8.622 24.175 1.00 13.94 C +ATOM 718 N THR A 97 -18.084 5.908 27.951 1.00 15.23 N +ATOM 719 CA THR A 97 -18.617 5.308 29.165 1.00 16.42 C +ATOM 720 C THR A 97 -18.753 6.391 30.219 1.00 18.64 C +ATOM 721 O THR A 97 -17.777 7.065 30.557 1.00 18.98 O +ATOM 722 CB THR A 97 -17.704 4.189 29.689 1.00 16.04 C +ATOM 723 OG1 THR A 97 -17.569 3.189 28.674 1.00 15.27 O +ATOM 724 CG2 THR A 97 -18.285 3.554 30.962 1.00 15.84 C +ATOM 725 N ASN A 98 -19.973 6.561 30.715 1.00 21.46 N +ATOM 726 CA ASN A 98 -20.251 7.525 31.765 1.00 23.96 C +ATOM 727 C ASN A 98 -20.354 6.797 33.091 1.00 24.73 C +ATOM 728 O ASN A 98 -21.446 6.438 33.537 1.00 26.02 O +ATOM 729 CB ASN A 98 -21.535 8.293 31.460 1.00 25.15 C +ATOM 730 CG ASN A 98 -21.432 9.108 30.189 1.00 26.01 C +ATOM 731 OD1 ASN A 98 -20.456 9.832 29.978 1.00 27.61 O +ATOM 732 ND2 ASN A 98 -22.438 8.996 29.332 1.00 26.93 N +ATOM 733 N GLY A 99 -19.196 6.546 33.694 1.00 24.94 N +ATOM 734 CA GLY A 99 -19.133 6.030 35.051 1.00 25.09 C +ATOM 735 C GLY A 99 -19.207 7.211 35.997 1.00 25.10 C +ATOM 736 O GLY A 99 -20.019 8.123 35.812 1.00 25.31 O +ATOM 737 N SER A 100 -18.353 7.202 37.012 1.00 25.00 N +ATOM 738 CA SER A 100 -18.188 8.365 37.877 1.00 25.32 C +ATOM 739 C SER A 100 -17.610 9.525 37.070 1.00 24.82 C +ATOM 740 O SER A 100 -17.912 10.691 37.328 1.00 24.44 O +ATOM 741 CB SER A 100 -17.264 8.026 39.044 1.00 25.90 C +ATOM 742 OG SER A 100 -16.082 7.388 38.587 1.00 26.75 O +ATOM 743 N GLN A 101 -16.790 9.170 36.082 1.00 24.01 N +ATOM 744 CA GLN A 101 -16.156 10.107 35.174 1.00 24.05 C +ATOM 745 C GLN A 101 -16.511 9.708 33.740 1.00 22.47 C +ATOM 746 O GLN A 101 -16.948 8.585 33.494 1.00 21.75 O +ATOM 747 CB GLN A 101 -14.651 10.018 35.385 1.00 25.59 C +ATOM 748 CG GLN A 101 -13.860 11.180 34.841 1.00 26.74 C +ATOM 749 CD GLN A 101 -12.526 11.320 35.538 1.00 27.59 C +ATOM 750 OE1 GLN A 101 -11.725 10.384 35.572 1.00 28.30 O +ATOM 751 NE2 GLN A 101 -12.279 12.491 36.098 1.00 27.63 N +ATOM 752 N LYS A 102 -16.342 10.631 32.800 1.00 21.09 N +ATOM 753 CA LYS A 102 -16.515 10.317 31.386 1.00 20.51 C +ATOM 754 C LYS A 102 -15.219 9.714 30.859 1.00 18.15 C +ATOM 755 O LYS A 102 -14.159 10.327 30.981 1.00 18.27 O +ATOM 756 CB LYS A 102 -16.858 11.585 30.599 1.00 21.88 C +ATOM 757 CG LYS A 102 -17.142 11.365 29.117 1.00 23.27 C +ATOM 758 CD LYS A 102 -17.224 12.690 28.368 1.00 24.31 C +ATOM 759 CE LYS A 102 -17.111 12.503 26.860 1.00 24.79 C +ATOM 760 NZ LYS A 102 -16.656 13.738 26.153 1.00 25.11 N +ATOM 761 N ASN A 103 -15.306 8.507 30.302 1.00 15.71 N +ATOM 762 CA ASN A 103 -14.170 7.878 29.624 1.00 14.28 C +ATOM 763 C ASN A 103 -14.420 7.805 28.128 1.00 13.52 C +ATOM 764 O ASN A 103 -15.504 7.415 27.699 1.00 13.13 O +ATOM 765 CB ASN A 103 -13.926 6.463 30.138 1.00 13.97 C +ATOM 766 CG ASN A 103 -12.767 5.787 29.426 1.00 13.77 C +ATOM 767 OD1 ASN A 103 -11.606 6.054 29.728 1.00 13.40 O +ATOM 768 ND2 ASN A 103 -13.078 4.920 28.463 1.00 13.82 N +ATOM 769 N VAL A 104 -13.405 8.152 27.343 1.00 12.81 N +ATOM 770 CA VAL A 104 -13.485 8.064 25.888 1.00 12.40 C +ATOM 771 C VAL A 104 -12.451 7.077 25.374 1.00 11.64 C +ATOM 772 O VAL A 104 -11.248 7.260 25.571 1.00 11.81 O +ATOM 773 CB VAL A 104 -13.244 9.424 25.209 1.00 12.77 C +ATOM 774 CG1 VAL A 104 -13.296 9.285 23.690 1.00 12.79 C +ATOM 775 CG2 VAL A 104 -14.267 10.441 25.681 1.00 13.02 C +ATOM 776 N GLY A 105 -12.935 6.028 24.717 1.00 10.83 N +ATOM 777 CA GLY A 105 -12.072 5.084 24.024 1.00 10.17 C +ATOM 778 C GLY A 105 -11.278 4.195 24.955 1.00 9.50 C +ATOM 779 O GLY A 105 -11.403 4.258 26.182 1.00 9.26 O +ATOM 780 N SER A 106 -10.452 3.354 24.353 1.00 8.81 N +ATOM 781 CA SER A 106 -9.588 2.460 25.104 1.00 8.43 C +ATOM 782 C SER A 106 -8.549 1.858 24.177 1.00 7.99 C +ATOM 783 O SER A 106 -8.719 1.848 22.955 1.00 7.88 O +ATOM 784 CB SER A 106 -10.399 1.357 25.795 1.00 8.56 C +ATOM 785 OG SER A 106 -11.043 0.515 24.860 1.00 8.80 O +ATOM 786 N ARG A 107 -7.459 1.392 24.774 1.00 7.58 N +ATOM 787 CA ARG A 107 -6.459 0.598 24.080 1.00 7.43 C +ATOM 788 C ARG A 107 -6.146 -0.604 24.964 1.00 7.13 C +ATOM 789 O ARG A 107 -5.870 -0.443 26.150 1.00 7.06 O +ATOM 790 CB ARG A 107 -5.200 1.421 23.788 1.00 7.58 C +ATOM 791 CG ARG A 107 -4.106 0.617 23.106 1.00 7.80 C +ATOM 792 CD ARG A 107 -3.041 1.494 22.481 1.00 8.04 C +ATOM 793 NE ARG A 107 -2.231 2.204 23.479 1.00 8.17 N +ATOM 794 CZ ARG A 107 -2.123 3.528 23.595 1.00 8.44 C +ATOM 795 NH1 ARG A 107 -2.768 4.351 22.776 1.00 8.81 N +ATOM 796 NH2 ARG A 107 -1.337 4.044 24.536 1.00 8.51 N +ATOM 797 N THR A 108 -6.228 -1.802 24.389 1.00 6.90 N +ATOM 798 CA THR A 108 -5.991 -3.039 25.129 1.00 6.74 C +ATOM 799 C THR A 108 -4.985 -3.925 24.418 1.00 6.64 C +ATOM 800 O THR A 108 -4.760 -3.774 23.213 1.00 6.48 O +ATOM 801 CB THR A 108 -7.297 -3.835 25.335 1.00 6.77 C +ATOM 802 OG1 THR A 108 -7.774 -4.342 24.076 1.00 6.82 O +ATOM 803 CG2 THR A 108 -8.361 -2.952 25.966 1.00 6.78 C +ATOM 804 N TYR A 109 -4.404 -4.855 25.172 1.00 6.67 N +ATOM 805 CA TYR A 109 -3.419 -5.802 24.652 1.00 6.84 C +ATOM 806 C TYR A 109 -3.802 -7.221 25.022 1.00 7.16 C +ATOM 807 O TYR A 109 -4.345 -7.463 26.099 1.00 7.29 O +ATOM 808 CB TYR A 109 -2.036 -5.504 25.229 1.00 6.61 C +ATOM 809 CG TYR A 109 -1.672 -4.051 25.128 1.00 6.43 C +ATOM 810 CD1 TYR A 109 -1.455 -3.464 23.884 1.00 6.39 C +ATOM 811 CD2 TYR A 109 -1.575 -3.251 26.266 1.00 6.34 C +ATOM 812 CE1 TYR A 109 -1.147 -2.125 23.774 1.00 6.31 C +ATOM 813 CE2 TYR A 109 -1.256 -1.909 26.165 1.00 6.31 C +ATOM 814 CZ TYR A 109 -1.047 -1.351 24.915 1.00 6.31 C +ATOM 815 OH TYR A 109 -0.747 -0.014 24.802 1.00 6.30 O +ATOM 816 N LEU A 110 -3.499 -8.159 24.132 1.00 7.62 N +ATOM 817 CA LEU A 110 -3.726 -9.575 24.403 1.00 8.07 C +ATOM 818 C LEU A 110 -2.575 -10.151 25.230 1.00 8.49 C +ATOM 819 O LEU A 110 -1.405 -9.986 24.880 1.00 8.22 O +ATOM 820 CB LEU A 110 -3.869 -10.353 23.099 1.00 8.07 C +ATOM 821 CG LEU A 110 -4.062 -11.867 23.233 1.00 8.16 C +ATOM 822 CD1 LEU A 110 -5.418 -12.195 23.839 1.00 8.26 C +ATOM 823 CD2 LEU A 110 -3.895 -12.546 21.881 1.00 8.15 C +ATOM 824 N BMET A 111 -2.914 -10.823 26.327 0.75 8.75 N +ATOM 825 CA BMET A 111 -1.916 -11.400 27.222 0.75 9.24 C +ATOM 826 C BMET A 111 -1.832 -12.911 27.105 0.75 9.82 C +ATOM 827 O BMET A 111 -2.827 -13.577 26.813 0.75 9.88 O +ATOM 828 CB BMET A 111 -2.248 -11.053 28.668 0.75 9.14 C +ATOM 829 CG BMET A 111 -2.414 -9.569 28.927 0.75 9.04 C +ATOM 830 SD BMET A 111 -2.288 -9.202 30.684 0.75 9.03 S +ATOM 831 CE BMET A 111 -0.508 -9.108 30.840 0.75 9.18 C +ATOM 832 N LYS A 112 -0.632 -13.426 27.359 1.00 10.60 N +ATOM 833 CA LYS A 112 -0.365 -14.867 27.459 1.00 11.96 C +ATOM 834 C LYS A 112 -0.632 -15.345 28.891 1.00 12.58 C +ATOM 835 O LYS A 112 -1.216 -16.413 29.109 1.00 12.94 O +ATOM 836 CB LYS A 112 1.103 -15.135 27.099 1.00 13.08 C +ATOM 837 CG LYS A 112 1.511 -16.598 27.091 1.00 14.38 C +ATOM 838 CD LYS A 112 2.921 -16.744 26.544 1.00 15.25 C +ATOM 839 CE LYS A 112 3.424 -18.178 26.608 1.00 16.23 C +ATOM 840 NZ LYS A 112 2.760 -19.075 25.620 1.00 16.92 N +ATOM 841 N ASP A 113 -0.156 -14.569 29.861 1.00 12.99 N +ATOM 842 CA ASP A 113 -0.454 -14.801 31.276 1.00 13.49 C +ATOM 843 C ASP A 113 -0.554 -13.426 31.940 1.00 13.57 C +ATOM 844 O ASP A 113 -0.428 -12.411 31.261 1.00 13.09 O +ATOM 845 CB ASP A 113 0.597 -15.714 31.932 1.00 13.90 C +ATOM 846 CG ASP A 113 2.020 -15.222 31.743 1.00 14.34 C +ATOM 847 OD1 ASP A 113 2.299 -14.046 32.040 1.00 14.26 O +ATOM 848 OD2 ASP A 113 2.882 -16.028 31.319 1.00 15.57 O +ATOM 849 N ASP A 114 -0.784 -13.373 33.248 1.00 13.67 N +ATOM 850 CA ASP A 114 -1.078 -12.090 33.896 1.00 13.86 C +ATOM 851 C ASP A 114 0.098 -11.092 33.923 1.00 13.06 C +ATOM 852 O ASP A 114 -0.107 -9.922 34.229 1.00 12.48 O +ATOM 853 CB ASP A 114 -1.657 -12.314 35.306 1.00 14.86 C +ATOM 854 CG ASP A 114 -3.097 -12.845 35.279 1.00 15.97 C +ATOM 855 OD1 ASP A 114 -3.917 -12.358 34.470 1.00 16.81 O +ATOM 856 OD2 ASP A 114 -3.421 -13.753 36.075 1.00 17.69 O +ATOM 857 N THR A 115 1.311 -11.541 33.595 1.00 12.26 N +ATOM 858 CA THR A 115 2.488 -10.663 33.577 1.00 12.11 C +ATOM 859 C THR A 115 3.223 -10.612 32.223 1.00 11.55 C +ATOM 860 O THR A 115 4.293 -10.009 32.122 1.00 11.45 O +ATOM 861 CB THR A 115 3.493 -11.069 34.677 1.00 12.51 C +ATOM 862 OG1 THR A 115 3.823 -12.453 34.529 1.00 12.85 O +ATOM 863 CG2 THR A 115 2.903 -10.824 36.059 1.00 12.70 C +ATOM 864 N HIS A 116 2.651 -11.223 31.184 1.00 10.88 N +ATOM 865 CA HIS A 116 3.273 -11.238 29.856 1.00 10.72 C +ATOM 866 C HIS A 116 2.268 -11.064 28.734 1.00 10.02 C +ATOM 867 O HIS A 116 1.224 -11.718 28.713 1.00 9.68 O +ATOM 868 CB HIS A 116 4.040 -12.543 29.633 1.00 11.35 C +ATOM 869 CG HIS A 116 5.153 -12.750 30.607 1.00 12.02 C +ATOM 870 ND1 HIS A 116 4.955 -13.299 31.855 1.00 12.55 N +ATOM 871 CD2 HIS A 116 6.470 -12.457 30.528 1.00 12.48 C +ATOM 872 CE1 HIS A 116 6.107 -13.346 32.499 1.00 12.69 C +ATOM 873 NE2 HIS A 116 7.043 -12.844 31.715 1.00 12.69 N +ATOM 874 N TYR A 117 2.597 -10.187 27.789 1.00 9.14 N +ATOM 875 CA TYR A 117 1.837 -10.086 26.552 1.00 8.77 C +ATOM 876 C TYR A 117 2.098 -11.328 25.710 1.00 8.92 C +ATOM 877 O TYR A 117 3.194 -11.888 25.735 1.00 8.98 O +ATOM 878 CB TYR A 117 2.250 -8.854 25.738 1.00 8.38 C +ATOM 879 CG TYR A 117 2.078 -7.535 26.457 1.00 8.03 C +ATOM 880 CD1 TYR A 117 0.822 -7.108 26.876 1.00 7.83 C +ATOM 881 CD2 TYR A 117 3.165 -6.703 26.691 1.00 7.79 C +ATOM 882 CE1 TYR A 117 0.652 -5.896 27.530 1.00 7.75 C +ATOM 883 CE2 TYR A 117 3.009 -5.487 27.342 1.00 7.65 C +ATOM 884 CZ TYR A 117 1.750 -5.092 27.761 1.00 7.67 C +ATOM 885 OH TYR A 117 1.591 -3.890 28.406 1.00 7.63 O +ATOM 886 N GLN A 118 1.085 -11.743 24.958 1.00 9.25 N +ATOM 887 CA GLN A 118 1.259 -12.743 23.914 1.00 9.74 C +ATOM 888 C GLN A 118 2.052 -12.101 22.784 1.00 9.74 C +ATOM 889 O GLN A 118 1.803 -10.957 22.426 1.00 9.36 O +ATOM 890 CB GLN A 118 -0.107 -13.192 23.398 1.00 10.24 C +ATOM 891 CG GLN A 118 -0.069 -14.186 22.250 1.00 10.82 C +ATOM 892 CD GLN A 118 0.464 -15.538 22.670 1.00 11.56 C +ATOM 893 OE1 GLN A 118 0.082 -16.074 23.716 1.00 12.65 O +ATOM 894 NE2 GLN A 118 1.346 -16.099 21.859 1.00 12.27 N +ATOM 895 N THR A 119 3.023 -12.818 22.234 1.00 10.02 N +ATOM 896 CA THR A 119 3.740 -12.318 21.058 1.00 10.45 C +ATOM 897 C THR A 119 3.459 -13.187 19.838 1.00 10.07 C +ATOM 898 O THR A 119 3.189 -14.379 19.960 1.00 10.05 O +ATOM 899 CB THR A 119 5.262 -12.209 21.287 1.00 11.00 C +ATOM 900 OG1 THR A 119 5.796 -13.495 21.604 1.00 12.08 O +ATOM 901 CG2 THR A 119 5.563 -11.233 22.415 1.00 11.25 C +ATOM 902 N PHE A 120 3.526 -12.563 18.666 1.00 9.76 N +ATOM 903 CA PHE A 120 3.251 -13.206 17.392 1.00 9.75 C +ATOM 904 C PHE A 120 4.368 -12.936 16.386 1.00 9.65 C +ATOM 905 O PHE A 120 4.845 -11.802 16.255 1.00 9.83 O +ATOM 906 CB PHE A 120 1.957 -12.653 16.796 1.00 9.71 C +ATOM 907 CG PHE A 120 0.722 -12.972 17.592 1.00 9.83 C +ATOM 908 CD1 PHE A 120 0.020 -14.150 17.369 1.00 10.02 C +ATOM 909 CD2 PHE A 120 0.240 -12.082 18.541 1.00 9.90 C +ATOM 910 CE1 PHE A 120 -1.124 -14.440 18.092 1.00 10.01 C +ATOM 911 CE2 PHE A 120 -0.912 -12.364 19.259 1.00 10.00 C +ATOM 912 CZ PHE A 120 -1.592 -13.545 19.040 1.00 10.00 C +ATOM 913 N ASN A 121 4.775 -13.987 15.681 1.00 9.61 N +ATOM 914 CA ASN A 121 5.586 -13.876 14.476 1.00 9.71 C +ATOM 915 C ASN A 121 4.767 -14.530 13.372 1.00 9.67 C +ATOM 916 O ASN A 121 4.684 -15.757 13.306 1.00 10.09 O +ATOM 917 CB ASN A 121 6.919 -14.598 14.667 1.00 9.81 C +ATOM 918 CG ASN A 121 7.751 -14.640 13.401 1.00 9.79 C +ATOM 919 OD1 ASN A 121 7.267 -14.349 12.305 1.00 9.51 O +ATOM 920 ND2 ASN A 121 9.022 -15.007 13.549 1.00 10.18 N +ATOM 921 N ALEU A 122 4.185 -13.689 12.513 0.50 9.64 N +ATOM 922 CA ALEU A 122 3.213 -14.105 11.497 0.50 9.56 C +ATOM 923 C ALEU A 122 3.810 -14.364 10.110 0.50 9.57 C +ATOM 924 O ALEU A 122 3.065 -14.522 9.145 0.50 9.42 O +ATOM 925 CB ALEU A 122 2.119 -13.039 11.350 0.50 9.56 C +ATOM 926 CG ALEU A 122 1.336 -12.627 12.601 0.50 9.49 C +ATOM 927 CD1ALEU A 122 0.301 -11.570 12.245 0.50 9.48 C +ATOM 928 CD2ALEU A 122 0.667 -13.830 13.250 0.50 9.50 C +ATOM 929 N LEU A 123 5.135 -14.410 9.995 1.00 9.72 N +ATOM 930 CA LEU A 123 5.768 -14.691 8.704 1.00 9.98 C +ATOM 931 C LEU A 123 5.299 -16.060 8.204 1.00 10.46 C +ATOM 932 O LEU A 123 5.326 -17.035 8.957 1.00 10.48 O +ATOM 933 CB LEU A 123 7.291 -14.658 8.829 1.00 9.94 C +ATOM 934 CG LEU A 123 7.858 -13.258 9.092 1.00 9.97 C +ATOM 935 CD1 LEU A 123 9.307 -13.334 9.539 1.00 10.09 C +ATOM 936 CD2 LEU A 123 7.724 -12.380 7.853 1.00 10.03 C +ATOM 937 N ASN A 124 4.838 -16.113 6.955 1.00 11.08 N +ATOM 938 CA ASN A 124 4.241 -17.328 6.368 1.00 11.61 C +ATOM 939 C ASN A 124 2.968 -17.764 7.084 1.00 11.63 C +ATOM 940 O ASN A 124 2.579 -18.927 7.023 1.00 11.90 O +ATOM 941 CB ASN A 124 5.225 -18.505 6.368 1.00 12.04 C +ATOM 942 CG ASN A 124 6.504 -18.201 5.638 1.00 12.67 C +ATOM 943 OD1 ASN A 124 7.537 -17.944 6.259 1.00 14.01 O +ATOM 944 ND2 ASN A 124 6.450 -18.234 4.313 1.00 12.89 N +ATOM 945 N GLN A 125 2.316 -16.838 7.773 1.00 11.48 N +ATOM 946 CA GLN A 125 1.076 -17.151 8.465 1.00 11.51 C +ATOM 947 C GLN A 125 0.057 -16.086 8.140 1.00 10.72 C +ATOM 948 O GLN A 125 0.369 -15.091 7.481 1.00 10.25 O +ATOM 949 CB GLN A 125 1.300 -17.229 9.976 1.00 12.55 C +ATOM 950 CG GLN A 125 2.291 -18.306 10.385 1.00 13.53 C +ATOM 951 CD GLN A 125 2.097 -18.776 11.814 1.00 14.76 C +ATOM 952 OE1 GLN A 125 1.050 -19.325 12.169 1.00 15.41 O +ATOM 953 NE2 GLN A 125 3.109 -18.568 12.643 1.00 15.69 N +ATOM 954 N GLU A 126 -1.167 -16.315 8.595 1.00 10.01 N +ATOM 955 CA GLU A 126 -2.227 -15.340 8.448 1.00 9.66 C +ATOM 956 C GLU A 126 -2.874 -15.090 9.794 1.00 9.05 C +ATOM 957 O GLU A 126 -2.863 -15.956 10.671 1.00 8.90 O +ATOM 958 CB GLU A 126 -3.262 -15.802 7.429 1.00 9.97 C +ATOM 959 CG GLU A 126 -3.988 -17.089 7.782 1.00 10.20 C +ATOM 960 CD GLU A 126 -4.751 -17.677 6.609 1.00 10.49 C +ATOM 961 OE1 GLU A 126 -4.422 -17.360 5.441 1.00 10.89 O +ATOM 962 OE2 GLU A 126 -5.688 -18.464 6.848 1.00 10.59 O +ATOM 963 N PHE A 127 -3.400 -13.880 9.946 1.00 8.36 N +ATOM 964 CA PHE A 127 -4.146 -13.471 11.125 1.00 7.93 C +ATOM 965 C PHE A 127 -5.558 -13.159 10.665 1.00 7.65 C +ATOM 966 O PHE A 127 -5.755 -12.404 9.713 1.00 7.64 O +ATOM 967 CB PHE A 127 -3.512 -12.226 11.757 1.00 7.75 C +ATOM 968 CG PHE A 127 -4.144 -11.811 13.061 1.00 7.67 C +ATOM 969 CD1 PHE A 127 -5.287 -11.025 13.073 1.00 7.64 C +ATOM 970 CD2 PHE A 127 -3.592 -12.202 14.276 1.00 7.65 C +ATOM 971 CE1 PHE A 127 -5.879 -10.652 14.266 1.00 7.66 C +ATOM 972 CE2 PHE A 127 -4.185 -11.827 15.473 1.00 7.62 C +ATOM 973 CZ PHE A 127 -5.323 -11.046 15.466 1.00 7.64 C +ATOM 974 N THR A 128 -6.540 -13.729 11.347 1.00 7.45 N +ATOM 975 CA THR A 128 -7.927 -13.615 10.932 1.00 7.30 C +ATOM 976 C THR A 128 -8.799 -13.287 12.128 1.00 7.05 C +ATOM 977 O THR A 128 -8.574 -13.792 13.225 1.00 7.09 O +ATOM 978 CB THR A 128 -8.384 -14.930 10.272 1.00 7.44 C +ATOM 979 OG1 THR A 128 -7.657 -15.107 9.052 1.00 7.62 O +ATOM 980 CG2 THR A 128 -9.868 -14.925 9.974 1.00 7.59 C +ATOM 981 N PHE A 129 -9.786 -12.425 11.918 1.00 6.93 N +ATOM 982 CA PHE A 129 -10.744 -12.108 12.968 1.00 6.92 C +ATOM 983 C PHE A 129 -12.060 -11.684 12.350 1.00 7.07 C +ATOM 984 O PHE A 129 -12.113 -11.326 11.177 1.00 6.99 O +ATOM 985 CB PHE A 129 -10.215 -11.009 13.898 1.00 6.88 C +ATOM 986 CG PHE A 129 -10.000 -9.687 13.218 1.00 6.77 C +ATOM 987 CD1 PHE A 129 -8.887 -9.489 12.421 1.00 6.68 C +ATOM 988 CD2 PHE A 129 -10.901 -8.644 13.369 1.00 6.71 C +ATOM 989 CE1 PHE A 129 -8.671 -8.278 11.788 1.00 6.64 C +ATOM 990 CE2 PHE A 129 -10.685 -7.431 12.741 1.00 6.73 C +ATOM 991 CZ PHE A 129 -9.576 -7.252 11.945 1.00 6.68 C +ATOM 992 N ASP A 130 -13.116 -11.751 13.151 1.00 7.35 N +ATOM 993 CA ASP A 130 -14.415 -11.211 12.780 1.00 7.71 C +ATOM 994 C ASP A 130 -14.566 -9.836 13.411 1.00 7.55 C +ATOM 995 O ASP A 130 -14.088 -9.593 14.521 1.00 7.25 O +ATOM 996 CB ASP A 130 -15.544 -12.115 13.276 1.00 8.14 C +ATOM 997 CG ASP A 130 -15.590 -13.462 12.567 1.00 8.66 C +ATOM 998 OD1 ASP A 130 -14.798 -13.703 11.632 1.00 9.03 O +ATOM 999 OD2 ASP A 130 -16.432 -14.295 12.972 1.00 9.66 O +ATOM 1000 N VAL A 131 -15.250 -8.934 12.722 1.00 7.61 N +ATOM 1001 CA VAL A 131 -15.467 -7.613 13.280 1.00 7.82 C +ATOM 1002 C VAL A 131 -16.864 -7.097 12.971 1.00 7.99 C +ATOM 1003 O VAL A 131 -17.425 -7.376 11.903 1.00 8.10 O +ATOM 1004 CB VAL A 131 -14.376 -6.609 12.817 1.00 7.75 C +ATOM 1005 CG1 VAL A 131 -14.485 -6.321 11.322 1.00 7.80 C +ATOM 1006 CG2 VAL A 131 -14.438 -5.316 13.627 1.00 7.75 C +ATOM 1007 N AASP A 132 -17.433 -6.376 13.934 0.80 8.21 N +ATOM 1008 CA AASP A 132 -18.661 -5.622 13.738 0.80 8.32 C +ATOM 1009 C AASP A 132 -18.286 -4.146 13.833 0.80 8.23 C +ATOM 1010 O AASP A 132 -17.930 -3.672 14.914 0.80 8.22 O +ATOM 1011 CB AASP A 132 -19.684 -6.001 14.812 0.80 8.62 C +ATOM 1012 CG AASP A 132 -20.943 -5.163 14.750 0.80 8.85 C +ATOM 1013 OD1AASP A 132 -21.161 -4.488 13.722 0.80 8.87 O +ATOM 1014 OD2AASP A 132 -21.721 -5.182 15.740 0.80 9.26 O +ATOM 1015 N VAL A 133 -18.341 -3.443 12.698 1.00 8.11 N +ATOM 1016 CA VAL A 133 -18.047 -1.997 12.622 1.00 8.09 C +ATOM 1017 C VAL A 133 -19.299 -1.176 12.319 1.00 8.11 C +ATOM 1018 O VAL A 133 -19.208 0.027 12.061 1.00 8.07 O +ATOM 1019 CB VAL A 133 -16.982 -1.676 11.546 1.00 8.10 C +ATOM 1020 CG1 VAL A 133 -15.675 -2.394 11.854 1.00 8.15 C +ATOM 1021 CG2 VAL A 133 -17.481 -2.015 10.144 1.00 8.12 C +ATOM 1022 N SER A 134 -20.461 -1.827 12.352 1.00 8.24 N +ATOM 1023 CA SER A 134 -21.729 -1.180 12.020 1.00 8.46 C +ATOM 1024 C SER A 134 -22.048 -0.003 12.936 1.00 8.45 C +ATOM 1025 O SER A 134 -22.745 0.926 12.531 1.00 8.66 O +ATOM 1026 CB SER A 134 -22.876 -2.204 12.038 1.00 8.59 C +ATOM 1027 OG SER A 134 -23.143 -2.670 13.347 1.00 9.03 O +ATOM 1028 N GLY A 135 -21.532 -0.044 14.163 1.00 8.39 N +ATOM 1029 CA GLY A 135 -21.721 1.028 15.128 1.00 8.38 C +ATOM 1030 C GLY A 135 -20.614 2.065 15.149 1.00 8.35 C +ATOM 1031 O GLY A 135 -20.522 2.822 16.104 1.00 8.72 O +ATOM 1032 N LEU A 136 -19.792 2.119 14.098 1.00 8.12 N +ATOM 1033 CA LEU A 136 -18.696 3.091 14.004 1.00 8.07 C +ATOM 1034 C LEU A 136 -18.926 4.084 12.864 1.00 8.25 C +ATOM 1035 O LEU A 136 -18.675 3.773 11.699 1.00 7.97 O +ATOM 1036 CB LEU A 136 -17.362 2.380 13.775 1.00 7.97 C +ATOM 1037 CG LEU A 136 -16.915 1.431 14.884 1.00 7.90 C +ATOM 1038 CD1 LEU A 136 -15.592 0.785 14.520 1.00 7.87 C +ATOM 1039 CD2 LEU A 136 -16.813 2.164 16.215 1.00 8.01 C +ATOM 1040 N PRO A 137 -19.385 5.296 13.195 1.00 8.54 N +ATOM 1041 CA PRO A 137 -19.593 6.297 12.155 1.00 8.90 C +ATOM 1042 C PRO A 137 -18.307 7.044 11.788 1.00 9.13 C +ATOM 1043 O PRO A 137 -17.216 6.686 12.258 1.00 8.98 O +ATOM 1044 CB PRO A 137 -20.611 7.237 12.797 1.00 8.94 C +ATOM 1045 CG PRO A 137 -20.297 7.173 14.250 1.00 8.97 C +ATOM 1046 CD PRO A 137 -19.805 5.781 14.522 1.00 8.78 C +ATOM 1047 N CYX A 138 -18.440 8.064 10.942 1.00 9.47 N +ATOM 1048 CA CYX A 138 -17.332 8.946 10.576 1.00 9.77 C +ATOM 1049 C CYX A 138 -16.601 9.437 11.814 1.00 9.41 C +ATOM 1050 O CYX A 138 -17.225 9.783 12.816 1.00 9.44 O +ATOM 1051 CB CYX A 138 -17.844 10.159 9.791 1.00 10.25 C +ATOM 1052 SG CYX A 138 -18.459 9.787 8.136 1.00 11.43 S +ATOM 1053 N GLY A 139 -15.273 9.445 11.749 1.00 9.04 N +ATOM 1054 CA GLY A 139 -14.458 9.970 12.837 1.00 8.90 C +ATOM 1055 C GLY A 139 -13.996 8.966 13.877 1.00 8.74 C +ATOM 1056 O GLY A 139 -13.133 9.290 14.694 1.00 8.79 O +ATOM 1057 N ALEU A 140 -14.564 7.765 13.872 0.50 8.68 N +ATOM 1058 CA ALEU A 140 -14.122 6.726 14.796 0.50 8.67 C +ATOM 1059 C ALEU A 140 -13.203 5.738 14.107 0.50 8.40 C +ATOM 1060 O ALEU A 140 -13.195 5.622 12.886 0.50 8.23 O +ATOM 1061 CB ALEU A 140 -15.313 6.003 15.406 0.50 8.95 C +ATOM 1062 CG ALEU A 140 -16.100 6.885 16.370 0.50 9.15 C +ATOM 1063 CD1ALEU A 140 -16.997 7.831 15.596 0.50 9.22 C +ATOM 1064 CD2ALEU A 140 -16.901 6.039 17.338 0.50 9.23 C +ATOM 1065 N ASN A 141 -12.429 5.028 14.917 1.00 8.25 N +ATOM 1066 CA ASN A 141 -11.466 4.052 14.424 1.00 8.08 C +ATOM 1067 C ASN A 141 -11.408 2.918 15.424 1.00 7.75 C +ATOM 1068 O ASN A 141 -10.969 3.104 16.559 1.00 7.72 O +ATOM 1069 CB ASN A 141 -10.094 4.710 14.251 1.00 8.18 C +ATOM 1070 CG ASN A 141 -9.058 3.801 13.600 1.00 8.37 C +ATOM 1071 OD1 ASN A 141 -9.194 2.578 13.570 1.00 8.46 O +ATOM 1072 ND2 ASN A 141 -7.998 4.411 13.088 1.00 8.55 N +ATOM 1073 N GLY A 142 -11.909 1.761 15.007 1.00 7.34 N +ATOM 1074 CA GLY A 142 -11.678 0.512 15.706 1.00 7.12 C +ATOM 1075 C GLY A 142 -10.427 -0.071 15.100 1.00 6.95 C +ATOM 1076 O GLY A 142 -10.432 -0.504 13.945 1.00 7.16 O +ATOM 1077 N ALA A 143 -9.337 -0.033 15.853 1.00 6.74 N +ATOM 1078 CA ALA A 143 -8.059 -0.470 15.332 1.00 6.63 C +ATOM 1079 C ALA A 143 -7.641 -1.789 15.969 1.00 6.65 C +ATOM 1080 O ALA A 143 -7.750 -1.975 17.182 1.00 6.93 O +ATOM 1081 CB ALA A 143 -7.003 0.605 15.546 1.00 6.58 C +ATOM 1082 N LEU A 144 -7.192 -2.712 15.132 1.00 6.41 N +ATOM 1083 CA LEU A 144 -6.561 -3.936 15.586 1.00 6.31 C +ATOM 1084 C LEU A 144 -5.211 -3.957 14.903 1.00 6.16 C +ATOM 1085 O LEU A 144 -5.125 -3.866 13.683 1.00 5.99 O +ATOM 1086 CB LEU A 144 -7.413 -5.147 15.215 1.00 6.35 C +ATOM 1087 CG LEU A 144 -6.907 -6.519 15.669 1.00 6.46 C +ATOM 1088 CD1 LEU A 144 -8.067 -7.494 15.801 1.00 6.44 C +ATOM 1089 CD2 LEU A 144 -5.860 -7.070 14.709 1.00 6.51 C +ATOM 1090 N TYR A 145 -4.148 -4.035 15.691 1.00 6.12 N +ATOM 1091 CA TYR A 145 -2.817 -3.875 15.135 1.00 6.20 C +ATOM 1092 C TYR A 145 -1.750 -4.491 16.007 1.00 6.34 C +ATOM 1093 O TYR A 145 -2.035 -5.032 17.069 1.00 6.28 O +ATOM 1094 CB TYR A 145 -2.523 -2.395 14.844 1.00 6.21 C +ATOM 1095 CG TYR A 145 -2.518 -1.431 16.021 1.00 6.18 C +ATOM 1096 CD1 TYR A 145 -3.704 -0.985 16.598 1.00 6.19 C +ATOM 1097 CD2 TYR A 145 -1.327 -0.914 16.514 1.00 6.15 C +ATOM 1098 CE1 TYR A 145 -3.700 -0.073 17.642 1.00 6.21 C +ATOM 1099 CE2 TYR A 145 -1.315 0.007 17.553 1.00 6.17 C +ATOM 1100 CZ TYR A 145 -2.502 0.423 18.115 1.00 6.18 C +ATOM 1101 OH TYR A 145 -2.504 1.333 19.148 1.00 6.22 O +ATOM 1102 N MET A 146 -0.514 -4.429 15.530 1.00 6.65 N +ATOM 1103 CA MET A 146 0.584 -5.062 16.220 1.00 6.94 C +ATOM 1104 C MET A 146 1.778 -4.141 16.317 1.00 6.88 C +ATOM 1105 O MET A 146 2.093 -3.428 15.367 1.00 6.67 O +ATOM 1106 CB MET A 146 0.978 -6.335 15.494 1.00 7.35 C +ATOM 1107 CG MET A 146 -0.038 -7.441 15.664 1.00 7.69 C +ATOM 1108 SD MET A 146 0.512 -8.974 14.905 1.00 8.47 S +ATOM 1109 CE MET A 146 -0.764 -10.075 15.505 1.00 8.34 C +ATOM 1110 N VAL A 147 2.435 -4.186 17.475 1.00 6.83 N +ATOM 1111 CA VAL A 147 3.670 -3.443 17.716 1.00 6.98 C +ATOM 1112 C VAL A 147 4.603 -4.329 18.530 1.00 7.10 C +ATOM 1113 O VAL A 147 4.129 -5.101 19.366 1.00 6.88 O +ATOM 1114 CB VAL A 147 3.440 -2.111 18.476 1.00 6.96 C +ATOM 1115 CG1 VAL A 147 2.855 -1.056 17.554 1.00 6.95 C +ATOM 1116 CG2 VAL A 147 2.551 -2.297 19.700 1.00 6.97 C +ATOM 1117 N PRO A 148 5.926 -4.235 18.288 1.00 7.36 N +ATOM 1118 CA PRO A 148 6.873 -5.082 19.016 1.00 7.61 C +ATOM 1119 C PRO A 148 7.205 -4.543 20.402 1.00 7.87 C +ATOM 1120 O PRO A 148 8.354 -4.192 20.685 1.00 8.27 O +ATOM 1121 CB PRO A 148 8.121 -5.095 18.111 1.00 7.67 C +ATOM 1122 CG PRO A 148 7.769 -4.327 16.892 1.00 7.72 C +ATOM 1123 CD PRO A 148 6.602 -3.466 17.230 1.00 7.54 C +ATOM 1124 N MET A 149 6.194 -4.493 21.259 1.00 8.01 N +ATOM 1125 CA MET A 149 6.380 -4.168 22.670 1.00 8.17 C +ATOM 1126 C MET A 149 7.097 -5.316 23.374 1.00 8.28 C +ATOM 1127 O MET A 149 6.947 -6.476 22.993 1.00 8.47 O +ATOM 1128 CB MET A 149 5.023 -3.932 23.330 1.00 8.18 C +ATOM 1129 CG MET A 149 4.344 -2.646 22.887 1.00 8.22 C +ATOM 1130 SD MET A 149 2.566 -2.626 23.183 1.00 8.53 S +ATOM 1131 CE MET A 149 2.514 -2.739 24.964 1.00 8.41 C +ATOM 1132 N ALA A 150 7.882 -4.989 24.397 1.00 8.48 N +ATOM 1133 CA ALA A 150 8.534 -6.015 25.214 1.00 8.58 C +ATOM 1134 C ALA A 150 7.452 -6.878 25.861 1.00 8.71 C +ATOM 1135 O ALA A 150 6.476 -6.352 26.401 1.00 8.78 O +ATOM 1136 CB ALA A 150 9.409 -5.371 26.278 1.00 8.76 C +ATOM 1137 N ALA A 151 7.615 -8.197 25.809 1.00 8.83 N +ATOM 1138 CA ALA A 151 6.568 -9.108 26.275 1.00 8.89 C +ATOM 1139 C ALA A 151 6.256 -8.922 27.763 1.00 8.94 C +ATOM 1140 O ALA A 151 5.119 -9.097 28.191 1.00 8.69 O +ATOM 1141 CB ALA A 151 6.944 -10.553 25.979 1.00 9.06 C +ATOM 1142 N ASP A 152 7.266 -8.552 28.547 1.00 9.18 N +ATOM 1143 CA ASP A 152 7.075 -8.318 29.987 1.00 9.54 C +ATOM 1144 C ASP A 152 6.688 -6.876 30.351 1.00 9.64 C +ATOM 1145 O ASP A 152 6.599 -6.530 31.530 1.00 9.69 O +ATOM 1146 CB ASP A 152 8.327 -8.749 30.766 1.00 9.88 C +ATOM 1147 CG ASP A 152 9.544 -7.896 30.463 1.00 10.24 C +ATOM 1148 OD1 ASP A 152 9.502 -7.042 29.548 1.00 10.16 O +ATOM 1149 OD2 ASP A 152 10.567 -8.089 31.155 1.00 10.97 O +ATOM 1150 N GLY A 153 6.450 -6.036 29.348 1.00 9.69 N +ATOM 1151 CA GLY A 153 6.152 -4.627 29.573 1.00 9.85 C +ATOM 1152 C GLY A 153 7.347 -3.778 29.968 1.00 10.11 C +ATOM 1153 O GLY A 153 7.168 -2.628 30.365 1.00 10.45 O +ATOM 1154 N GLY A 154 8.556 -4.336 29.853 1.00 10.29 N +ATOM 1155 CA GLY A 154 9.802 -3.603 30.103 1.00 10.57 C +ATOM 1156 C GLY A 154 10.465 -3.876 31.441 1.00 10.85 C +ATOM 1157 O GLY A 154 11.541 -3.343 31.719 1.00 10.95 O +ATOM 1158 N VAL A 155 9.851 -4.709 32.277 1.00 11.37 N +ATOM 1159 CA VAL A 155 10.311 -4.843 33.666 1.00 11.91 C +ATOM 1160 C VAL A 155 11.756 -5.349 33.783 1.00 12.18 C +ATOM 1161 O VAL A 155 12.490 -4.904 34.663 1.00 12.13 O +ATOM 1162 CB VAL A 155 9.372 -5.721 34.539 1.00 12.18 C +ATOM 1163 CG1 VAL A 155 7.965 -5.141 34.595 1.00 12.10 C +ATOM 1164 CG2 VAL A 155 9.329 -7.159 34.058 1.00 12.61 C +ATOM 1165 N SER A 156 12.172 -6.245 32.887 1.00 12.48 N +ATOM 1166 CA SER A 156 13.486 -6.908 33.014 1.00 13.04 C +ATOM 1167 C SER A 156 14.712 -5.988 33.059 1.00 13.17 C +ATOM 1168 O SER A 156 15.715 -6.339 33.686 1.00 13.88 O +ATOM 1169 CB SER A 156 13.683 -7.944 31.903 1.00 13.26 C +ATOM 1170 OG SER A 156 13.818 -7.328 30.640 1.00 13.99 O +ATOM 1171 N AASN A 157 14.652 -4.833 32.405 0.50 12.93 N +ATOM 1172 CA AASN A 157 15.768 -3.884 32.451 0.50 12.84 C +ATOM 1173 C AASN A 157 15.310 -2.464 32.740 0.50 12.43 C +ATOM 1174 O AASN A 157 15.906 -1.504 32.252 0.50 12.58 O +ATOM 1175 CB AASN A 157 16.550 -3.918 31.142 0.50 12.90 C +ATOM 1176 CG AASN A 157 15.704 -3.517 29.953 0.50 13.01 C +ATOM 1177 OD1AASN A 157 14.521 -3.200 30.097 0.50 13.03 O +ATOM 1178 ND2AASN A 157 16.301 -3.538 28.771 0.50 13.28 N +ATOM 1179 N GLU A 158 14.240 -2.340 33.521 1.00 12.01 N +ATOM 1180 CA GLU A 158 13.729 -1.039 33.956 1.00 11.50 C +ATOM 1181 C GLU A 158 13.414 -1.092 35.456 1.00 11.07 C +ATOM 1182 O GLU A 158 12.302 -1.451 35.852 1.00 10.65 O +ATOM 1183 CB GLU A 158 12.481 -0.669 33.149 1.00 11.22 C +ATOM 1184 CG GLU A 158 12.754 -0.505 31.654 1.00 11.03 C +ATOM 1185 CD GLU A 158 11.496 -0.356 30.816 1.00 11.10 C +ATOM 1186 OE1 GLU A 158 10.399 -0.254 31.395 1.00 10.90 O +ATOM 1187 OE2 GLU A 158 11.608 -0.347 29.569 1.00 11.19 O +ATOM 1188 N PRO A 159 14.401 -0.751 36.302 1.00 10.88 N +ATOM 1189 CA PRO A 159 14.253 -0.899 37.754 1.00 10.82 C +ATOM 1190 C PRO A 159 13.034 -0.212 38.365 1.00 10.63 C +ATOM 1191 O PRO A 159 12.498 -0.701 39.354 1.00 10.65 O +ATOM 1192 CB PRO A 159 15.545 -0.284 38.298 1.00 11.00 C +ATOM 1193 CG PRO A 159 16.537 -0.516 37.223 1.00 11.08 C +ATOM 1194 CD PRO A 159 15.776 -0.361 35.936 1.00 10.98 C +ATOM 1195 N ASN A 160 12.607 0.913 37.796 1.00 10.38 N +ATOM 1196 CA ASN A 160 11.455 1.638 38.336 1.00 10.38 C +ATOM 1197 C ASN A 160 10.129 1.249 37.699 1.00 10.05 C +ATOM 1198 O ASN A 160 9.108 1.876 37.976 1.00 10.11 O +ATOM 1199 CB ASN A 160 11.655 3.149 38.221 1.00 10.51 C +ATOM 1200 CG ASN A 160 12.776 3.660 39.100 1.00 10.78 C +ATOM 1201 OD1 ASN A 160 13.607 4.446 38.650 1.00 12.08 O +ATOM 1202 ND2 ASN A 160 12.790 3.242 40.355 1.00 10.73 N +ATOM 1203 N ASN A 161 10.152 0.230 36.841 1.00 9.76 N +ATOM 1204 CA ASN A 161 8.941 -0.333 36.252 1.00 9.64 C +ATOM 1205 C ASN A 161 8.635 -1.678 36.900 1.00 9.58 C +ATOM 1206 O ASN A 161 9.204 -2.700 36.524 1.00 9.75 O +ATOM 1207 CB ASN A 161 9.126 -0.496 34.744 1.00 9.54 C +ATOM 1208 CG ASN A 161 7.911 -1.101 34.059 1.00 9.48 C +ATOM 1209 OD1 ASN A 161 6.861 -1.303 34.674 1.00 9.31 O +ATOM 1210 ND2 ASN A 161 8.052 -1.389 32.771 1.00 9.51 N +ATOM 1211 N LYS A 162 7.758 -1.665 37.900 1.00 9.60 N +ATOM 1212 CA LYS A 162 7.235 -2.898 38.488 1.00 9.84 C +ATOM 1213 C LYS A 162 5.897 -3.301 37.867 1.00 9.29 C +ATOM 1214 O LYS A 162 5.543 -4.478 37.850 1.00 9.29 O +ATOM 1215 CB LYS A 162 7.056 -2.733 39.999 1.00 10.52 C +ATOM 1216 CG LYS A 162 8.343 -2.435 40.754 1.00 11.35 C +ATOM 1217 CD LYS A 162 9.287 -3.622 40.751 1.00 12.08 C +ATOM 1218 CE LYS A 162 10.420 -3.433 41.751 1.00 12.53 C +ATOM 1219 NZ LYS A 162 11.154 -2.152 41.563 1.00 12.97 N +ATOM 1220 N ALA A 163 5.149 -2.325 37.365 1.00 8.73 N +ATOM 1221 CA ALA A 163 3.798 -2.577 36.863 1.00 8.33 C +ATOM 1222 C ALA A 163 3.789 -3.460 35.604 1.00 8.11 C +ATOM 1223 O ALA A 163 3.009 -4.401 35.519 1.00 8.13 O +ATOM 1224 CB ALA A 163 3.076 -1.261 36.615 1.00 8.39 C +ATOM 1225 N GLY A 164 4.645 -3.147 34.634 1.00 7.86 N +ATOM 1226 CA GLY A 164 4.838 -4.001 33.460 1.00 7.70 C +ATOM 1227 C GLY A 164 3.594 -4.337 32.656 1.00 7.57 C +ATOM 1228 O GLY A 164 2.636 -3.564 32.612 1.00 7.35 O +ATOM 1229 N ALA A 165 3.623 -5.501 32.011 1.00 7.42 N +ATOM 1230 CA ALA A 165 2.516 -5.942 31.165 1.00 7.42 C +ATOM 1231 C ALA A 165 1.211 -6.105 31.944 1.00 7.45 C +ATOM 1232 O ALA A 165 0.135 -5.887 31.394 1.00 7.35 O +ATOM 1233 CB ALA A 165 2.876 -7.244 30.462 1.00 7.46 C +ATOM 1234 N GLN A 166 1.314 -6.480 33.218 1.00 7.52 N +ATOM 1235 CA GLN A 166 0.151 -6.661 34.078 1.00 7.78 C +ATOM 1236 C GLN A 166 -0.736 -5.416 34.128 1.00 7.39 C +ATOM 1237 O GLN A 166 -1.949 -5.531 34.320 1.00 7.28 O +ATOM 1238 CB GLN A 166 0.603 -7.031 35.493 1.00 8.25 C +ATOM 1239 CG GLN A 166 -0.536 -7.379 36.432 1.00 8.76 C +ATOM 1240 CD GLN A 166 -0.065 -7.759 37.818 1.00 9.38 C +ATOM 1241 OE1 GLN A 166 1.110 -7.613 38.162 1.00 9.95 O +ATOM 1242 NE2 GLN A 166 -0.988 -8.241 38.626 1.00 9.89 N +ATOM 1243 N TYR A 167 -0.129 -4.241 33.983 1.00 7.16 N +ATOM 1244 CA TYR A 167 -0.863 -2.974 33.970 1.00 7.01 C +ATOM 1245 C TYR A 167 -0.769 -2.239 32.634 1.00 6.88 C +ATOM 1246 O TYR A 167 -1.014 -1.037 32.565 1.00 6.76 O +ATOM 1247 CB TYR A 167 -0.404 -2.088 35.143 1.00 7.07 C +ATOM 1248 CG TYR A 167 -0.825 -2.690 36.455 1.00 7.12 C +ATOM 1249 CD1 TYR A 167 -0.080 -3.702 37.044 1.00 7.16 C +ATOM 1250 CD2 TYR A 167 -1.995 -2.285 37.087 1.00 7.22 C +ATOM 1251 CE1 TYR A 167 -0.484 -4.288 38.228 1.00 7.23 C +ATOM 1252 CE2 TYR A 167 -2.407 -2.872 38.268 1.00 7.24 C +ATOM 1253 CZ TYR A 167 -1.640 -3.869 38.840 1.00 7.26 C +ATOM 1254 OH TYR A 167 -2.047 -4.454 40.023 1.00 7.62 O +ATOM 1255 N GLY A 168 -0.436 -2.962 31.569 1.00 6.75 N +ATOM 1256 CA GLY A 168 -0.485 -2.400 30.225 1.00 6.71 C +ATOM 1257 C GLY A 168 0.572 -1.354 29.962 1.00 6.76 C +ATOM 1258 O GLY A 168 0.338 -0.402 29.226 1.00 6.58 O +ATOM 1259 N VAL A 169 1.747 -1.548 30.552 1.00 6.79 N +ATOM 1260 CA VAL A 169 2.885 -0.653 30.356 1.00 6.95 C +ATOM 1261 C VAL A 169 3.705 -1.123 29.151 1.00 7.02 C +ATOM 1262 O VAL A 169 3.719 -2.314 28.819 1.00 7.16 O +ATOM 1263 CB VAL A 169 3.773 -0.627 31.620 1.00 7.05 C +ATOM 1264 CG1 VAL A 169 4.985 0.275 31.434 1.00 7.11 C +ATOM 1265 CG2 VAL A 169 2.957 -0.190 32.830 1.00 7.04 C +ATOM 1266 N GLY A 170 4.376 -0.180 28.487 1.00 7.04 N +ATOM 1267 CA GLY A 170 5.343 -0.515 27.451 1.00 7.18 C +ATOM 1268 C GLY A 170 4.987 -0.099 26.038 1.00 7.16 C +ATOM 1269 O GLY A 170 5.717 -0.430 25.119 1.00 7.27 O +ATOM 1270 N TYR A 171 3.880 0.618 25.846 1.00 7.05 N +ATOM 1271 CA TYR A 171 3.442 0.971 24.491 1.00 7.08 C +ATOM 1272 C TYR A 171 4.470 1.804 23.745 1.00 7.18 C +ATOM 1273 O TYR A 171 5.151 2.651 24.331 1.00 7.18 O +ATOM 1274 CB TYR A 171 2.122 1.737 24.512 1.00 7.06 C +ATOM 1275 CG TYR A 171 1.515 1.961 23.135 1.00 6.97 C +ATOM 1276 CD1 TYR A 171 1.025 0.897 22.393 1.00 7.01 C +ATOM 1277 CD2 TYR A 171 1.429 3.235 22.586 1.00 7.02 C +ATOM 1278 CE1 TYR A 171 0.475 1.090 21.133 1.00 6.96 C +ATOM 1279 CE2 TYR A 171 0.866 3.442 21.340 1.00 6.99 C +ATOM 1280 CZ TYR A 171 0.388 2.363 20.616 1.00 6.96 C +ATOM 1281 OH TYR A 171 -0.161 2.562 19.365 1.00 7.10 O +ATOM 1282 N CYX A 172 4.548 1.542 22.444 1.00 7.32 N +ATOM 1283 CA CYX A 172 5.326 2.318 21.490 1.00 7.62 C +ATOM 1284 C CYX A 172 4.597 2.164 20.165 1.00 7.57 C +ATOM 1285 O CYX A 172 3.838 1.212 19.986 1.00 7.24 O +ATOM 1286 CB CYX A 172 6.750 1.764 21.378 1.00 7.84 C +ATOM 1287 SG CYX A 172 6.872 0.017 20.889 1.00 8.47 S +ATOM 1288 N ASP A 173 4.799 3.093 19.236 1.00 7.76 N +ATOM 1289 CA ASP A 173 4.327 2.888 17.864 1.00 8.06 C +ATOM 1290 C ASP A 173 5.075 3.789 16.883 1.00 8.20 C +ATOM 1291 O ASP A 173 6.016 4.488 17.280 1.00 7.93 O +ATOM 1292 CB ASP A 173 2.785 2.948 17.761 1.00 8.19 C +ATOM 1293 CG ASP A 173 2.212 4.346 17.835 1.00 8.48 C +ATOM 1294 OD1 ASP A 173 2.903 5.331 17.524 1.00 8.52 O +ATOM 1295 OD2 ASP A 173 1.012 4.454 18.187 1.00 8.86 O +ATOM 1296 N ASER A 174 4.665 3.768 15.616 0.70 8.34 N +ATOM 1297 CA ASER A 174 5.409 4.444 14.553 0.70 8.58 C +ATOM 1298 C ASER A 174 5.187 5.961 14.533 0.70 8.92 C +ATOM 1299 O ASER A 174 5.831 6.668 13.758 0.70 8.87 O +ATOM 1300 CB ASER A 174 5.048 3.841 13.194 0.70 8.62 C +ATOM 1301 OG ASER A 174 3.723 4.169 12.836 0.70 8.56 O +ATOM 1302 N GLN A 175 4.289 6.455 15.383 1.00 9.36 N +ATOM 1303 CA GLN A 175 4.103 7.895 15.573 1.00 10.11 C +ATOM 1304 C GLN A 175 5.029 8.459 16.649 1.00 10.13 C +ATOM 1305 O GLN A 175 5.055 9.674 16.860 1.00 10.19 O +ATOM 1306 CB GLN A 175 2.657 8.213 15.968 1.00 10.81 C +ATOM 1307 CG GLN A 175 1.607 7.720 14.992 1.00 11.51 C +ATOM 1308 CD GLN A 175 1.852 8.187 13.572 1.00 12.15 C +ATOM 1309 OE1 GLN A 175 1.653 7.432 12.623 1.00 13.36 O +ATOM 1310 NE2 GLN A 175 2.294 9.428 13.421 1.00 12.56 N +ATOM 1311 N CYX A 176 5.775 7.592 17.333 1.00 10.33 N +ATOM 1312 CA CYX A 176 6.654 8.014 18.430 1.00 10.62 C +ATOM 1313 C CYX A 176 5.887 8.880 19.436 1.00 10.67 C +ATOM 1314 O CYX A 176 6.295 10.004 19.719 1.00 10.67 O +ATOM 1315 CB CYX A 176 7.872 8.768 17.882 1.00 10.86 C +ATOM 1316 SG CYX A 176 9.003 7.757 16.910 1.00 11.43 S +ATOM 1317 N PRO A 177 4.762 8.363 19.968 1.00 10.67 N +ATOM 1318 CA PRO A 177 3.866 9.186 20.777 1.00 10.84 C +ATOM 1319 C PRO A 177 4.541 9.793 21.997 1.00 11.10 C +ATOM 1320 O PRO A 177 5.231 9.097 22.746 1.00 11.03 O +ATOM 1321 CB PRO A 177 2.763 8.207 21.202 1.00 10.71 C +ATOM 1322 CG PRO A 177 3.354 6.852 21.027 1.00 10.82 C +ATOM 1323 CD PRO A 177 4.253 6.987 19.840 1.00 10.61 C +ATOM 1324 N ARG A 178 4.341 11.096 22.166 1.00 11.65 N +ATOM 1325 CA ARG A 178 4.834 11.812 23.329 1.00 12.00 C +ATOM 1326 C ARG A 178 3.746 12.038 24.393 1.00 11.95 C +ATOM 1327 O ARG A 178 4.040 12.578 25.461 1.00 11.69 O +ATOM 1328 CB ARG A 178 5.455 13.145 22.888 1.00 12.64 C +ATOM 1329 CG ARG A 178 6.678 12.997 21.984 1.00 13.20 C +ATOM 1330 CD ARG A 178 7.063 14.318 21.336 1.00 14.08 C +ATOM 1331 NE ARG A 178 7.351 15.339 22.339 1.00 14.98 N +ATOM 1332 CZ ARG A 178 7.454 16.644 22.096 1.00 15.63 C +ATOM 1333 NH1 ARG A 178 7.303 17.127 20.866 1.00 16.05 N +ATOM 1334 NH2 ARG A 178 7.725 17.475 23.097 1.00 16.08 N +ATOM 1335 N AASP A 179 2.510 11.611 24.127 0.50 11.97 N +ATOM 1336 CA AASP A 179 1.426 11.779 25.099 0.50 12.06 C +ATOM 1337 C AASP A 179 1.411 10.689 26.179 0.50 11.93 C +ATOM 1338 O AASP A 179 0.562 10.706 27.077 0.50 11.99 O +ATOM 1339 CB AASP A 179 0.070 11.841 24.390 0.50 12.43 C +ATOM 1340 CG AASP A 179 -0.424 10.482 23.951 0.50 12.68 C +ATOM 1341 OD1AASP A 179 0.414 9.613 23.637 0.50 13.14 O +ATOM 1342 OD2AASP A 179 -1.658 10.291 23.911 0.50 13.06 O +ATOM 1343 N LEU A 180 2.377 9.775 26.123 1.00 11.90 N +ATOM 1344 CA LEU A 180 2.460 8.680 27.087 1.00 11.78 C +ATOM 1345 C LEU A 180 2.986 9.206 28.415 1.00 11.29 C +ATOM 1346 O LEU A 180 3.918 10.009 28.443 1.00 11.03 O +ATOM 1347 CB LEU A 180 3.381 7.578 26.561 1.00 11.98 C +ATOM 1348 CG LEU A 180 2.967 6.990 25.204 1.00 12.40 C +ATOM 1349 CD1 LEU A 180 4.015 5.999 24.729 1.00 12.63 C +ATOM 1350 CD2 LEU A 180 1.592 6.343 25.262 1.00 12.71 C +ATOM 1351 N LYS A 181 2.381 8.760 29.514 1.00 10.97 N +ATOM 1352 CA LYS A 181 2.800 9.185 30.846 1.00 11.06 C +ATOM 1353 C LYS A 181 4.058 8.467 31.294 1.00 10.72 C +ATOM 1354 O LYS A 181 4.858 9.029 32.039 1.00 10.15 O +ATOM 1355 CB LYS A 181 1.687 8.942 31.855 1.00 11.50 C +ATOM 1356 CG LYS A 181 0.466 9.791 31.580 1.00 12.03 C +ATOM 1357 CD LYS A 181 -0.764 9.236 32.272 1.00 12.58 C +ATOM 1358 CE LYS A 181 -2.018 9.780 31.626 1.00 12.80 C +ATOM 1359 NZ LYS A 181 -3.243 9.355 32.342 1.00 12.88 N +ATOM 1360 N PHE A 182 4.217 7.220 30.854 1.00 10.70 N +ATOM 1361 CA PHE A 182 5.409 6.437 31.145 1.00 10.73 C +ATOM 1362 C PHE A 182 6.041 5.871 29.890 1.00 10.66 C +ATOM 1363 O PHE A 182 5.348 5.309 29.041 1.00 10.70 O +ATOM 1364 CB PHE A 182 5.071 5.303 32.108 1.00 10.88 C +ATOM 1365 CG PHE A 182 4.842 5.777 33.500 1.00 10.91 C +ATOM 1366 CD1 PHE A 182 5.903 5.908 34.377 1.00 11.10 C +ATOM 1367 CD2 PHE A 182 3.576 6.148 33.919 1.00 11.15 C +ATOM 1368 CE1 PHE A 182 5.703 6.379 35.656 1.00 11.07 C +ATOM 1369 CE2 PHE A 182 3.368 6.616 35.199 1.00 11.14 C +ATOM 1370 CZ PHE A 182 4.435 6.741 36.070 1.00 11.21 C +ATOM 1371 N ILE A 183 7.361 6.021 29.790 1.00 10.63 N +ATOM 1372 CA ILE A 183 8.132 5.498 28.666 1.00 10.77 C +ATOM 1373 C ILE A 183 9.433 4.875 29.171 1.00 11.15 C +ATOM 1374 O ILE A 183 10.242 5.543 29.820 1.00 11.19 O +ATOM 1375 CB ILE A 183 8.473 6.595 27.633 1.00 10.70 C +ATOM 1376 CG1 ILE A 183 7.198 7.255 27.095 1.00 10.76 C +ATOM 1377 CG2 ILE A 183 9.288 6.006 26.486 1.00 10.69 C +ATOM 1378 CD1 ILE A 183 7.449 8.477 26.228 1.00 10.79 C +ATOM 1379 N ALA A 184 9.611 3.591 28.870 1.00 11.60 N +ATOM 1380 CA ALA A 184 10.829 2.852 29.197 1.00 11.80 C +ATOM 1381 C ALA A 184 11.237 2.956 30.668 1.00 11.91 C +ATOM 1382 O ALA A 184 12.417 3.102 30.978 1.00 12.22 O +ATOM 1383 CB ALA A 184 11.973 3.292 28.287 1.00 11.96 C +ATOM 1384 N GLY A 185 10.255 2.877 31.563 1.00 11.85 N +ATOM 1385 CA GLY A 185 10.515 2.813 33.002 1.00 11.90 C +ATOM 1386 C GLY A 185 10.761 4.151 33.683 1.00 11.84 C +ATOM 1387 O GLY A 185 11.231 4.192 34.823 1.00 12.43 O +ATOM 1388 N SER A 186 10.437 5.240 32.991 1.00 11.52 N +ATOM 1389 CA SER A 186 10.483 6.590 33.556 1.00 11.55 C +ATOM 1390 C SER A 186 9.166 7.279 33.255 1.00 11.07 C +ATOM 1391 O SER A 186 8.507 6.959 32.265 1.00 10.84 O +ATOM 1392 CB SER A 186 11.608 7.410 32.926 1.00 11.97 C +ATOM 1393 OG SER A 186 12.878 6.897 33.260 1.00 12.85 O +ATOM 1394 N ALA A 187 8.784 8.236 34.095 1.00 10.52 N +ATOM 1395 CA ALA A 187 7.658 9.095 33.761 1.00 10.43 C +ATOM 1396 C ALA A 187 8.064 10.059 32.651 1.00 10.45 C +ATOM 1397 O ALA A 187 9.238 10.167 32.305 1.00 10.67 O +ATOM 1398 CB ALA A 187 7.170 9.859 34.976 1.00 10.38 C +ATOM 1399 N ASN A 188 7.077 10.750 32.102 1.00 10.40 N +ATOM 1400 CA ASN A 188 7.287 11.710 31.023 1.00 10.57 C +ATOM 1401 C ASN A 188 6.849 13.115 31.460 1.00 11.04 C +ATOM 1402 O ASN A 188 6.396 13.923 30.651 1.00 11.51 O +ATOM 1403 CB ASN A 188 6.509 11.237 29.786 1.00 10.30 C +ATOM 1404 CG ASN A 188 7.034 11.822 28.482 1.00 10.08 C +ATOM 1405 OD1 ASN A 188 8.171 12.302 28.394 1.00 10.02 O +ATOM 1406 ND2 ASN A 188 6.200 11.776 27.453 1.00 9.94 N +ATOM 1407 N VAL A 189 7.000 13.398 32.752 1.00 11.35 N +ATOM 1408 CA VAL A 189 6.609 14.693 33.326 1.00 11.61 C +ATOM 1409 C VAL A 189 7.512 15.849 32.883 1.00 11.87 C +ATOM 1410 O VAL A 189 7.044 16.982 32.733 1.00 11.79 O +ATOM 1411 CB VAL A 189 6.548 14.633 34.879 1.00 11.62 C +ATOM 1412 CG1 VAL A 189 7.906 14.313 35.498 1.00 11.70 C +ATOM 1413 CG2 VAL A 189 6.007 15.931 35.455 1.00 11.61 C +ATOM 1414 N GLN A 190 8.796 15.567 32.677 1.00 12.20 N +ATOM 1415 CA GLN A 190 9.728 16.598 32.229 1.00 12.91 C +ATOM 1416 C GLN A 190 9.358 17.039 30.817 1.00 13.12 C +ATOM 1417 O GLN A 190 9.231 16.216 29.908 1.00 13.03 O +ATOM 1418 CB GLN A 190 11.166 16.094 32.286 1.00 13.26 C +ATOM 1419 CG GLN A 190 11.680 15.938 33.707 1.00 13.80 C +ATOM 1420 CD GLN A 190 13.079 15.375 33.763 1.00 14.44 C +ATOM 1421 OE1 GLN A 190 13.329 14.374 34.436 1.00 14.53 O +ATOM 1422 NE2 GLN A 190 14.003 16.006 33.044 1.00 14.98 N +ATOM 1423 N GLY A 191 9.153 18.340 30.650 1.00 13.44 N +ATOM 1424 CA GLY A 191 8.712 18.890 29.375 1.00 14.02 C +ATOM 1425 C GLY A 191 7.224 18.745 29.099 1.00 14.35 C +ATOM 1426 O GLY A 191 6.773 19.059 27.995 1.00 14.46 O +ATOM 1427 N TRP A 192 6.448 18.288 30.081 1.00 14.93 N +ATOM 1428 CA TRP A 192 5.012 18.093 29.876 1.00 15.51 C +ATOM 1429 C TRP A 192 4.303 19.422 29.662 1.00 16.83 C +ATOM 1430 O TRP A 192 4.479 20.359 30.440 1.00 17.29 O +ATOM 1431 CB TRP A 192 4.364 17.368 31.053 1.00 15.29 C +ATOM 1432 CG TRP A 192 2.952 16.913 30.777 1.00 14.87 C +ATOM 1433 CD1 TRP A 192 1.797 17.576 31.085 1.00 14.84 C +ATOM 1434 CD2 TRP A 192 2.556 15.692 30.139 1.00 14.70 C +ATOM 1435 NE1 TRP A 192 0.705 16.839 30.683 1.00 14.64 N +ATOM 1436 CE2 TRP A 192 1.145 15.679 30.101 1.00 14.68 C +ATOM 1437 CE3 TRP A 192 3.258 14.601 29.608 1.00 14.58 C +ATOM 1438 CZ2 TRP A 192 0.422 14.623 29.542 1.00 14.68 C +ATOM 1439 CZ3 TRP A 192 2.538 13.550 29.059 1.00 14.63 C +ATOM 1440 CH2 TRP A 192 1.133 13.574 29.028 1.00 14.58 C +ATOM 1441 N GLU A 193 3.515 19.493 28.597 1.00 18.38 N +ATOM 1442 CA GLU A 193 2.703 20.659 28.315 1.00 20.12 C +ATOM 1443 C GLU A 193 1.310 20.206 27.907 1.00 20.21 C +ATOM 1444 O GLU A 193 1.172 19.272 27.113 1.00 19.58 O +ATOM 1445 CB GLU A 193 3.333 21.489 27.195 1.00 21.59 C +ATOM 1446 CG GLU A 193 4.644 22.175 27.570 1.00 23.22 C +ATOM 1447 CD GLU A 193 4.492 23.255 28.634 1.00 24.78 C +ATOM 1448 OE1 GLU A 193 3.345 23.655 28.945 1.00 26.87 O +ATOM 1449 OE2 GLU A 193 5.528 23.711 29.167 1.00 26.80 O +ATOM 1450 N PRO A 194 0.267 20.851 28.458 1.00 20.53 N +ATOM 1451 CA PRO A 194 -1.089 20.617 27.971 1.00 21.54 C +ATOM 1452 C PRO A 194 -1.204 20.880 26.471 1.00 22.80 C +ATOM 1453 O PRO A 194 -0.604 21.830 25.965 1.00 23.49 O +ATOM 1454 CB PRO A 194 -1.915 21.638 28.755 1.00 21.13 C +ATOM 1455 CG PRO A 194 -1.175 21.798 30.034 1.00 20.85 C +ATOM 1456 CD PRO A 194 0.273 21.714 29.656 1.00 20.62 C +ATOM 1457 N ALA A 195 -1.957 20.037 25.773 1.00 24.71 N +ATOM 1458 CA ALA A 195 -2.142 20.178 24.327 1.00 26.41 C +ATOM 1459 C ALA A 195 -3.544 19.726 23.942 1.00 27.87 C +ATOM 1460 O ALA A 195 -3.947 18.601 24.242 1.00 28.71 O +ATOM 1461 CB ALA A 195 -1.097 19.371 23.574 1.00 26.39 C +ATOM 1462 N OLS A 196 -4.277 20.617 23.280 1.00 29.81 N +ATOM 1463 CA OLS A 196 -5.675 20.378 22.933 1.00 31.13 C +ATOM 1464 C OLS A 196 -5.867 19.271 21.897 1.00 30.70 C +ATOM 1465 O OLS A 196 -6.911 18.620 21.884 1.00 30.01 O +ATOM 1466 CB OLS A 196 -6.307 21.663 22.402 1.00 32.82 C +ATOM 1467 OG OLS A 196 -5.736 22.014 21.148 1.00 34.58 O +ATOM 1468 N ASN A 197 -4.869 19.067 21.036 1.00 30.00 N +ATOM 1469 CA ASN A 197 -4.979 18.091 19.944 1.00 30.05 C +ATOM 1470 C ASN A 197 -4.353 16.727 20.261 1.00 29.94 C +ATOM 1471 O ASN A 197 -3.935 16.004 19.356 1.00 29.69 O +ATOM 1472 CB ASN A 197 -4.420 18.674 18.632 1.00 30.24 C +ATOM 1473 CG ASN A 197 -2.938 18.993 18.700 1.00 30.50 C +ATOM 1474 OD1 ASN A 197 -2.324 18.980 19.769 1.00 30.46 O +ATOM 1475 ND2 ASN A 197 -2.355 19.292 17.544 1.00 30.80 N +ATOM 1476 N SER A 198 -4.318 16.377 21.546 1.00 30.09 N +ATOM 1477 CA SER A 198 -3.878 15.062 21.998 1.00 30.34 C +ATOM 1478 C SER A 198 -4.972 14.408 22.835 1.00 30.56 C +ATOM 1479 O SER A 198 -5.735 15.093 23.519 1.00 30.00 O +ATOM 1480 CB SER A 198 -2.599 15.190 22.819 1.00 30.72 C +ATOM 1481 OG SER A 198 -2.353 14.005 23.550 1.00 30.96 O +ATOM 1482 N GLY A 199 -2.001 15.914 26.955 1.00 17.41 N +ATOM 1483 CA GLY A 199 -0.735 16.643 26.950 1.00 17.04 C +ATOM 1484 C GLY A 199 0.371 15.909 26.225 1.00 16.96 C +ATOM 1485 O GLY A 199 0.175 14.796 25.738 1.00 17.18 O +ATOM 1486 N ALEU A 200 1.532 16.550 26.139 0.80 16.93 N +ATOM 1487 CA ALEU A 200 2.694 15.997 25.455 0.80 17.10 C +ATOM 1488 C ALEU A 200 3.909 16.192 26.342 0.80 16.29 C +ATOM 1489 O ALEU A 200 4.120 17.279 26.877 0.80 16.21 O +ATOM 1490 CB ALEU A 200 2.931 16.715 24.126 0.80 17.63 C +ATOM 1491 CG ALEU A 200 1.792 16.690 23.105 0.80 18.22 C +ATOM 1492 CD1ALEU A 200 2.051 17.705 22.003 0.80 18.52 C +ATOM 1493 CD2ALEU A 200 1.612 15.293 22.532 0.80 18.66 C +ATOM 1494 N GLY A 201 4.694 15.136 26.505 1.00 15.42 N +ATOM 1495 CA GLY A 201 5.917 15.192 27.300 1.00 14.72 C +ATOM 1496 C GLY A 201 7.170 15.363 26.470 1.00 14.03 C +ATOM 1497 O GLY A 201 7.123 15.374 25.239 1.00 13.50 O +ATOM 1498 N GLY A 202 8.303 15.465 27.157 1.00 13.39 N +ATOM 1499 CA GLY A 202 9.591 15.638 26.509 1.00 13.43 C +ATOM 1500 C GLY A 202 10.030 14.497 25.606 1.00 13.24 C +ATOM 1501 O GLY A 202 10.743 14.722 24.632 1.00 13.76 O +ATOM 1502 N ANLN A 203 9.599 13.276 25.913 0.50 13.08 N +ATOM 1503 CA ANLN A 203 10.021 12.116 25.139 0.50 13.01 C +ATOM 1504 C ANLN A 203 8.883 11.351 24.515 0.50 12.10 C +ATOM 1505 O ANLN A 203 7.732 11.457 24.941 0.50 11.74 O +ATOM 1506 CB ANLN A 203 10.886 11.197 25.993 0.50 13.64 C +ATOM 1507 CG ANLN A 203 12.128 11.898 26.470 0.50 14.42 C +ATOM 1508 OD1ANLN A 203 13.235 11.653 25.990 0.50 14.65 O +ATOM 1509 ND2ANLN A 203 11.942 12.808 27.404 0.50 15.60 N +ATOM 1510 N GLY A 204 9.233 10.597 23.479 1.00 11.47 N +ATOM 1511 CA GLY A 204 8.268 9.777 22.746 1.00 10.77 C +ATOM 1512 C GLY A 204 8.742 8.342 22.692 1.00 9.92 C +ATOM 1513 O GLY A 204 9.906 8.046 22.946 1.00 9.66 O +ATOM 1514 N SER A 205 7.827 7.445 22.343 1.00 9.14 N +ATOM 1515 CA SER A 205 8.083 6.008 22.397 1.00 8.87 C +ATOM 1516 C SER A 205 7.932 5.386 21.011 1.00 8.78 C +ATOM 1517 O SER A 205 6.815 5.148 20.558 1.00 8.67 O +ATOM 1518 CB SER A 205 7.107 5.361 23.379 1.00 8.83 C +ATOM 1519 OG SER A 205 7.391 3.990 23.557 1.00 8.77 O +ATOM 1520 N CYX A 206 9.061 5.100 20.365 1.00 8.78 N +ATOM 1521 CA CYX A 206 9.090 4.708 18.952 1.00 9.02 C +ATOM 1522 C CYX A 206 9.225 3.210 18.765 1.00 8.63 C +ATOM 1523 O CYX A 206 9.985 2.567 19.477 1.00 8.51 O +ATOM 1524 CB CYX A 206 10.292 5.348 18.253 1.00 9.58 C +ATOM 1525 SG CYX A 206 10.391 7.144 18.305 1.00 10.90 S +ATOM 1526 N CYX A 207 8.514 2.670 17.779 1.00 8.19 N +ATOM 1527 CA CYX A 207 8.792 1.322 17.274 1.00 7.99 C +ATOM 1528 C CYX A 207 8.068 1.100 15.956 1.00 7.68 C +ATOM 1529 O CYX A 207 7.289 1.950 15.521 1.00 7.42 O +ATOM 1530 CB CYX A 207 8.437 0.226 18.301 1.00 8.09 C +ATOM 1531 SG CYX A 207 6.719 0.110 18.836 1.00 8.36 S +ATOM 1532 N ALA A 208 8.343 -0.030 15.310 1.00 7.39 N +ATOM 1533 CA ALA A 208 7.627 -0.399 14.089 1.00 7.24 C +ATOM 1534 C ALA A 208 6.170 -0.695 14.437 1.00 7.20 C +ATOM 1535 O ALA A 208 5.827 -0.864 15.606 1.00 7.16 O +ATOM 1536 CB ALA A 208 8.278 -1.606 13.436 1.00 7.29 C +ATOM 1537 N GLU A 209 5.312 -0.733 13.426 1.00 7.02 N +ATOM 1538 CA GLU A 209 3.883 -0.868 13.672 1.00 7.21 C +ATOM 1539 C GLU A 209 3.201 -1.488 12.474 1.00 7.07 C +ATOM 1540 O GLU A 209 3.358 -1.016 11.358 1.00 6.89 O +ATOM 1541 CB GLU A 209 3.281 0.504 13.957 1.00 7.43 C +ATOM 1542 CG GLU A 209 1.786 0.496 14.240 1.00 7.73 C +ATOM 1543 CD GLU A 209 1.221 1.883 14.467 1.00 7.96 C +ATOM 1544 OE1 GLU A 209 1.993 2.863 14.565 1.00 8.15 O +ATOM 1545 OE2 GLU A 209 -0.020 1.995 14.564 1.00 8.54 O +ATOM 1546 N LEU A 210 2.432 -2.541 12.721 1.00 7.05 N +ATOM 1547 CA LEU A 210 1.671 -3.191 11.672 1.00 7.15 C +ATOM 1548 C LEU A 210 0.190 -2.946 11.898 1.00 7.06 C +ATOM 1549 O LEU A 210 -0.425 -3.606 12.728 1.00 6.87 O +ATOM 1550 CB LEU A 210 1.960 -4.683 11.670 1.00 7.44 C +ATOM 1551 CG LEU A 210 1.112 -5.507 10.705 1.00 7.71 C +ATOM 1552 CD1 LEU A 210 1.396 -5.128 9.260 1.00 7.82 C +ATOM 1553 CD2 LEU A 210 1.368 -6.984 10.933 1.00 7.87 C +ATOM 1554 N ASP A 211 -0.378 -1.990 11.175 1.00 6.90 N +ATOM 1555 CA ASP A 211 -1.804 -1.703 11.305 1.00 7.01 C +ATOM 1556 C ASP A 211 -2.597 -2.646 10.421 1.00 6.67 C +ATOM 1557 O ASP A 211 -2.921 -2.337 9.273 1.00 6.65 O +ATOM 1558 CB ASP A 211 -2.089 -0.242 10.996 1.00 7.28 C +ATOM 1559 CG ASP A 211 -1.401 0.685 11.968 1.00 7.67 C +ATOM 1560 OD1 ASP A 211 -1.418 0.382 13.186 1.00 8.13 O +ATOM 1561 OD2 ASP A 211 -0.834 1.694 11.522 1.00 8.40 O +ATOM 1562 N ILE A 212 -2.891 -3.816 10.977 1.00 6.36 N +ATOM 1563 CA ILE A 212 -3.672 -4.839 10.295 1.00 6.20 C +ATOM 1564 C ILE A 212 -5.032 -4.252 9.920 1.00 6.03 C +ATOM 1565 O ILE A 212 -5.530 -4.478 8.823 1.00 6.10 O +ATOM 1566 CB ILE A 212 -3.877 -6.097 11.179 1.00 6.27 C +ATOM 1567 CG1 ILE A 212 -2.540 -6.793 11.481 1.00 6.23 C +ATOM 1568 CG2 ILE A 212 -4.835 -7.085 10.519 1.00 6.31 C +ATOM 1569 CD1 ILE A 212 -2.642 -7.924 12.485 1.00 6.28 C +ATOM 1570 N TRP A 213 -5.615 -3.489 10.837 1.00 5.87 N +ATOM 1571 CA TRP A 213 -6.984 -3.020 10.683 1.00 5.84 C +ATOM 1572 C TRP A 213 -7.200 -1.678 11.355 1.00 5.92 C +ATOM 1573 O TRP A 213 -7.104 -1.567 12.573 1.00 5.87 O +ATOM 1574 CB TRP A 213 -7.925 -4.049 11.310 1.00 5.74 C +ATOM 1575 CG TRP A 213 -9.389 -3.796 11.112 1.00 5.68 C +ATOM 1576 CD1 TRP A 213 -10.292 -3.450 12.073 1.00 5.68 C +ATOM 1577 CD2 TRP A 213 -10.127 -3.900 9.886 1.00 5.68 C +ATOM 1578 NE1 TRP A 213 -11.545 -3.330 11.523 1.00 5.74 N +ATOM 1579 CE2 TRP A 213 -11.470 -3.593 10.182 1.00 5.64 C +ATOM 1580 CE3 TRP A 213 -9.782 -4.209 8.564 1.00 5.68 C +ATOM 1581 CZ2 TRP A 213 -12.466 -3.588 9.206 1.00 5.64 C +ATOM 1582 CZ3 TRP A 213 -10.781 -4.206 7.593 1.00 5.63 C +ATOM 1583 CH2 TRP A 213 -12.103 -3.897 7.925 1.00 5.63 C +ATOM 1584 N AGLU A 214 -7.489 -0.667 10.549 0.50 5.86 N +ATOM 1585 CA AGLU A 214 -7.959 0.609 11.051 0.50 5.91 C +ATOM 1586 C AGLU A 214 -9.185 0.953 10.244 0.50 5.93 C +ATOM 1587 O AGLU A 214 -9.108 1.117 9.026 0.50 5.91 O +ATOM 1588 CB AGLU A 214 -6.888 1.669 10.893 0.50 5.92 C +ATOM 1589 CG AGLU A 214 -5.748 1.516 11.877 0.50 5.93 C +ATOM 1590 CD AGLU A 214 -4.756 2.637 11.741 0.50 5.99 C +ATOM 1591 OE1AGLU A 214 -3.914 2.572 10.827 0.50 6.13 O +ATOM 1592 OE2AGLU A 214 -4.838 3.582 12.542 0.50 6.08 O +ATOM 1593 N ALA A 215 -10.326 1.036 10.915 1.00 5.95 N +ATOM 1594 CA ALA A 215 -11.595 1.091 10.196 1.00 5.98 C +ATOM 1595 C ALA A 215 -12.779 1.584 10.991 1.00 6.07 C +ATOM 1596 O ALA A 215 -12.825 1.504 12.222 1.00 6.07 O +ATOM 1597 CB ALA A 215 -11.925 -0.291 9.643 1.00 5.99 C +ATOM 1598 N ASN A 216 -13.752 2.076 10.237 1.00 6.14 N +ATOM 1599 CA ASN A 216 -15.099 2.300 10.733 1.00 6.31 C +ATOM 1600 C ASN A 216 -16.060 1.764 9.675 1.00 6.54 C +ATOM 1601 O ASN A 216 -15.642 1.023 8.797 1.00 6.50 O +ATOM 1602 CB ASN A 216 -15.323 3.780 11.061 1.00 6.26 C +ATOM 1603 CG ASN A 216 -14.917 4.715 9.934 1.00 6.20 C +ATOM 1604 OD1 ASN A 216 -15.172 4.449 8.766 1.00 6.23 O +ATOM 1605 ND2 ASN A 216 -14.277 5.831 10.294 1.00 6.18 N +ATOM 1606 N SER A 217 -17.333 2.134 9.744 1.00 6.92 N +ATOM 1607 CA SER A 217 -18.304 1.662 8.759 1.00 7.25 C +ATOM 1608 C SER A 217 -18.132 2.262 7.354 1.00 7.27 C +ATOM 1609 O SER A 217 -18.744 1.768 6.405 1.00 7.53 O +ATOM 1610 CB SER A 217 -19.735 1.911 9.247 1.00 7.51 C +ATOM 1611 OG SER A 217 -20.020 3.287 9.336 1.00 7.97 O +ATOM 1612 N AILE A 218 -17.327 3.317 7.224 0.50 7.33 N +ATOM 1613 CA AILE A 218 -17.137 3.995 5.944 0.50 7.37 C +ATOM 1614 C AILE A 218 -15.910 3.491 5.201 0.50 7.28 C +ATOM 1615 O AILE A 218 -16.003 3.099 4.034 0.50 7.27 O +ATOM 1616 CB AILE A 218 -16.984 5.512 6.127 0.50 7.51 C +ATOM 1617 CG1AILE A 218 -18.258 6.106 6.719 0.50 7.67 C +ATOM 1618 CG2AILE A 218 -16.656 6.170 4.801 0.50 7.48 C +ATOM 1619 CD1AILE A 218 -18.322 5.971 8.220 0.50 7.74 C +ATOM 1620 N SER A 219 -14.760 3.517 5.874 1.00 7.20 N +ATOM 1621 CA SER A 219 -13.491 3.148 5.246 1.00 7.17 C +ATOM 1622 C SER A 219 -12.628 2.281 6.149 1.00 6.88 C +ATOM 1623 O SER A 219 -12.774 2.294 7.380 1.00 6.77 O +ATOM 1624 CB SER A 219 -12.705 4.406 4.875 1.00 7.36 C +ATOM 1625 OG SER A 219 -13.352 5.118 3.837 1.00 7.93 O +ATOM 1626 N ALA A 220 -11.719 1.547 5.515 1.00 6.58 N +ATOM 1627 CA ALA A 220 -10.762 0.693 6.208 1.00 6.51 C +ATOM 1628 C ALA A 220 -9.397 0.821 5.555 1.00 6.39 C +ATOM 1629 O ALA A 220 -9.296 1.021 4.341 1.00 6.51 O +ATOM 1630 CB ALA A 220 -11.226 -0.756 6.181 1.00 6.44 C +ATOM 1631 N ALA A 221 -8.346 0.693 6.356 1.00 6.30 N +ATOM 1632 CA ALA A 221 -6.988 0.714 5.838 1.00 6.18 C +ATOM 1633 C ALA A 221 -6.136 -0.375 6.485 1.00 6.12 C +ATOM 1634 O ALA A 221 -6.289 -0.696 7.669 1.00 6.06 O +ATOM 1635 CB ALA A 221 -6.354 2.075 6.051 1.00 6.15 C +ATOM 1636 N LEU A 222 -5.247 -0.937 5.670 1.00 5.98 N +ATOM 1637 CA LEU A 222 -4.230 -1.883 6.098 1.00 5.94 C +ATOM 1638 C LEU A 222 -2.893 -1.206 5.844 1.00 5.91 C +ATOM 1639 O LEU A 222 -2.607 -0.815 4.710 1.00 5.94 O +ATOM 1640 CB LEU A 222 -4.342 -3.159 5.270 1.00 6.00 C +ATOM 1641 CG LEU A 222 -3.165 -4.134 5.244 1.00 6.04 C +ATOM 1642 CD1 LEU A 222 -2.895 -4.689 6.630 1.00 6.08 C +ATOM 1643 CD2 LEU A 222 -3.452 -5.246 4.247 1.00 6.12 C +ATOM 1644 N THR A 223 -2.065 -1.089 6.880 1.00 5.84 N +ATOM 1645 CA THR A 223 -0.881 -0.231 6.800 1.00 5.86 C +ATOM 1646 C THR A 223 0.308 -0.703 7.644 1.00 5.81 C +ATOM 1647 O THR A 223 0.349 -0.469 8.847 1.00 5.80 O +ATOM 1648 CB THR A 223 -1.219 1.219 7.220 1.00 5.91 C +ATOM 1649 OG1 THR A 223 -2.417 1.659 6.567 1.00 6.06 O +ATOM 1650 CG2 THR A 223 -0.086 2.158 6.866 1.00 5.95 C +ATOM 1651 N PRO A 224 1.302 -1.342 7.010 1.00 5.97 N +ATOM 1652 CA PRO A 224 2.563 -1.538 7.727 1.00 5.99 C +ATOM 1653 C PRO A 224 3.377 -0.235 7.811 1.00 6.01 C +ATOM 1654 O PRO A 224 3.354 0.572 6.882 1.00 6.13 O +ATOM 1655 CB PRO A 224 3.281 -2.579 6.870 1.00 6.03 C +ATOM 1656 CG PRO A 224 2.751 -2.354 5.498 1.00 6.08 C +ATOM 1657 CD PRO A 224 1.305 -2.024 5.704 1.00 6.06 C +ATOM 1658 N HIS A 225 4.070 -0.046 8.931 1.00 6.05 N +ATOM 1659 CA HIS A 225 4.963 1.104 9.151 1.00 6.10 C +ATOM 1660 C HIS A 225 6.327 0.571 9.549 1.00 6.39 C +ATOM 1661 O HIS A 225 6.436 -0.229 10.484 1.00 6.56 O +ATOM 1662 CB HIS A 225 4.489 1.972 10.317 1.00 6.03 C +ATOM 1663 CG HIS A 225 3.161 2.635 10.121 1.00 5.98 C +ATOM 1664 ND1 HIS A 225 3.033 3.994 9.949 1.00 5.89 N +ATOM 1665 CD2 HIS A 225 1.901 2.142 10.151 1.00 5.89 C +ATOM 1666 CE1 HIS A 225 1.754 4.311 9.867 1.00 5.89 C +ATOM 1667 NE2 HIS A 225 1.046 3.204 9.984 1.00 5.86 N +ATOM 1668 N SER A 226 7.371 1.045 8.882 1.00 6.53 N +ATOM 1669 CA SER A 226 8.732 0.630 9.206 1.00 6.76 C +ATOM 1670 C SER A 226 9.366 1.496 10.307 1.00 6.96 C +ATOM 1671 O SER A 226 8.814 2.524 10.714 1.00 6.96 O +ATOM 1672 CB SER A 226 9.585 0.665 7.943 1.00 6.81 C +ATOM 1673 OG SER A 226 9.572 1.967 7.389 1.00 6.80 O +ATOM 1674 N ALA A 227 10.523 1.047 10.789 1.00 7.36 N +ATOM 1675 CA ALA A 227 11.321 1.778 11.775 1.00 7.69 C +ATOM 1676 C ALA A 227 12.781 1.334 11.709 1.00 8.02 C +ATOM 1677 O ALA A 227 13.071 0.161 11.477 1.00 7.99 O +ATOM 1678 CB ALA A 227 10.772 1.554 13.174 1.00 7.83 C +ATOM 1679 N ASP A 228 13.695 2.277 11.923 1.00 8.58 N +ATOM 1680 CA ASP A 228 15.130 1.974 11.927 1.00 9.00 C +ATOM 1681 C ASP A 228 15.463 0.882 12.939 1.00 9.19 C +ATOM 1682 O ASP A 228 16.211 -0.051 12.645 1.00 9.58 O +ATOM 1683 CB ASP A 228 15.946 3.219 12.278 1.00 9.27 C +ATOM 1684 CG ASP A 228 15.865 4.308 11.227 1.00 9.60 C +ATOM 1685 OD1 ASP A 228 15.435 4.047 10.082 1.00 9.96 O +ATOM 1686 OD2 ASP A 228 16.253 5.442 11.565 1.00 10.04 O +ATOM 1687 N THR A 229 14.921 1.030 14.143 1.00 9.35 N +ATOM 1688 CA THR A 229 14.995 0.008 15.174 1.00 9.43 C +ATOM 1689 C THR A 229 13.566 -0.431 15.436 1.00 9.55 C +ATOM 1690 O THR A 229 12.709 0.388 15.757 1.00 9.58 O +ATOM 1691 CB THR A 229 15.654 0.551 16.453 1.00 9.61 C +ATOM 1692 OG1 THR A 229 17.040 0.819 16.191 1.00 9.87 O +ATOM 1693 CG2 THR A 229 15.540 -0.451 17.597 1.00 9.61 C +ATOM 1694 N VAL A 230 13.302 -1.720 15.270 1.00 9.71 N +ATOM 1695 CA VAL A 230 11.908 -2.179 15.264 1.00 9.78 C +ATOM 1696 C VAL A 230 11.277 -2.203 16.648 1.00 9.93 C +ATOM 1697 O VAL A 230 10.074 -2.007 16.765 1.00 9.94 O +ATOM 1698 CB VAL A 230 11.723 -3.538 14.553 1.00 9.95 C +ATOM 1699 CG1 VAL A 230 12.201 -3.438 13.108 1.00 9.98 C +ATOM 1700 CG2 VAL A 230 12.420 -4.667 15.301 1.00 9.94 C +ATOM 1701 N THR A 231 12.085 -2.437 17.683 1.00 10.06 N +ATOM 1702 CA THR A 231 11.600 -2.447 19.063 1.00 10.43 C +ATOM 1703 C THR A 231 11.691 -1.047 19.664 1.00 10.57 C +ATOM 1704 O THR A 231 12.159 -0.113 19.009 1.00 10.46 O +ATOM 1705 CB THR A 231 12.403 -3.450 19.903 1.00 10.62 C +ATOM 1706 OG1 THR A 231 13.801 -3.211 19.704 1.00 11.41 O +ATOM 1707 CG2 THR A 231 12.065 -4.866 19.470 1.00 10.63 C +ATOM 1708 N GLN A 232 11.232 -0.897 20.905 1.00 11.02 N +ATOM 1709 CA GLN A 232 11.121 0.420 21.520 1.00 11.63 C +ATOM 1710 C GLN A 232 12.433 1.197 21.552 1.00 11.65 C +ATOM 1711 O GLN A 232 13.476 0.672 21.932 1.00 11.61 O +ATOM 1712 CB GLN A 232 10.584 0.315 22.949 1.00 12.32 C +ATOM 1713 CG GLN A 232 10.370 1.674 23.603 1.00 13.04 C +ATOM 1714 CD GLN A 232 9.944 1.573 25.052 1.00 13.63 C +ATOM 1715 OE1 GLN A 232 10.687 1.064 25.898 1.00 14.96 O +ATOM 1716 NE2 GLN A 232 8.754 2.066 25.351 1.00 13.81 N +ATOM 1717 N THR A 233 12.363 2.457 21.138 1.00 11.66 N +ATOM 1718 CA THR A 233 13.429 3.409 21.408 1.00 11.83 C +ATOM 1719 C THR A 233 12.784 4.683 21.925 1.00 12.01 C +ATOM 1720 O THR A 233 11.606 4.950 21.663 1.00 11.93 O +ATOM 1721 CB THR A 233 14.285 3.727 20.164 1.00 11.78 C +ATOM 1722 OG1 THR A 233 13.458 4.262 19.129 1.00 11.87 O +ATOM 1723 CG2 THR A 233 14.986 2.486 19.652 1.00 11.91 C +ATOM 1724 N VAL A 234 13.561 5.465 22.661 1.00 12.37 N +ATOM 1725 CA VAL A 234 13.083 6.713 23.235 1.00 12.80 C +ATOM 1726 C VAL A 234 13.636 7.879 22.425 1.00 13.17 C +ATOM 1727 O VAL A 234 14.836 7.927 22.150 1.00 13.51 O +ATOM 1728 CB VAL A 234 13.520 6.847 24.704 1.00 13.00 C +ATOM 1729 CG1 VAL A 234 12.987 8.137 25.307 1.00 13.14 C +ATOM 1730 CG2 VAL A 234 13.048 5.635 25.497 1.00 13.02 C +ATOM 1731 N CYX A 235 12.760 8.804 22.042 1.00 13.48 N +ATOM 1732 CA CYX A 235 13.170 9.971 21.261 1.00 13.88 C +ATOM 1733 C CYX A 235 12.978 11.253 22.051 1.00 14.76 C +ATOM 1734 O CYX A 235 12.232 11.288 23.025 1.00 14.81 O +ATOM 1735 CB CYX A 235 12.407 10.043 19.941 1.00 13.77 C +ATOM 1736 SG CYX A 235 10.621 10.109 20.137 1.00 13.46 S +ATOM 1737 N ASN A 236 13.658 12.300 21.595 1.00 15.82 N +ATOM 1738 CA ASN A 236 13.744 13.584 22.282 1.00 16.80 C +ATOM 1739 C ASN A 236 12.954 14.653 21.517 1.00 16.68 C +ATOM 1740 O ASN A 236 13.369 15.082 20.444 1.00 16.40 O +ATOM 1741 CB ASN A 236 15.233 13.970 22.404 1.00 17.82 C +ATOM 1742 CG ASN A 236 15.455 15.424 22.807 1.00 18.43 C +ATOM 1743 OD1 ASN A 236 14.658 16.021 23.535 1.00 19.53 O +ATOM 1744 ND2 ASN A 236 16.559 15.997 22.334 1.00 19.05 N +ATOM 1745 N GLY A 237 11.811 15.060 22.064 1.00 17.07 N +ATOM 1746 CA GLY A 237 11.039 16.193 21.540 1.00 17.49 C +ATOM 1747 C GLY A 237 10.711 16.178 20.053 1.00 18.29 C +ATOM 1748 O GLY A 237 10.174 15.201 19.533 1.00 17.12 O +ATOM 1749 N ASP A 238 11.039 17.265 19.359 1.00 19.24 N +ATOM 1750 CA ASP A 238 10.713 17.389 17.937 1.00 20.25 C +ATOM 1751 C ASP A 238 11.517 16.440 17.046 1.00 20.20 C +ATOM 1752 O ASP A 238 11.079 16.121 15.940 1.00 20.28 O +ATOM 1753 CB ASP A 238 10.877 18.839 17.466 1.00 21.41 C +ATOM 1754 CG ASP A 238 9.735 19.729 17.924 1.00 22.59 C +ATOM 1755 OD1 ASP A 238 8.568 19.428 17.582 1.00 24.18 O +ATOM 1756 OD2 ASP A 238 10.001 20.735 18.620 1.00 23.72 O +ATOM 1757 N ASP A 239 12.672 15.980 17.529 1.00 19.83 N +ATOM 1758 CA ASP A 239 13.461 14.969 16.812 1.00 19.68 C +ATOM 1759 C ASP A 239 12.716 13.641 16.682 1.00 17.91 C +ATOM 1760 O ASP A 239 13.082 12.808 15.857 1.00 17.79 O +ATOM 1761 CB ASP A 239 14.810 14.721 17.497 1.00 21.31 C +ATOM 1762 CG ASP A 239 15.725 15.932 17.461 1.00 22.90 C +ATOM 1763 OD1 ASP A 239 15.399 16.928 16.775 1.00 24.99 O +ATOM 1764 OD2 ASP A 239 16.779 15.882 18.131 1.00 25.69 O +ATOM 1765 N CYX A 240 11.687 13.445 17.509 1.00 15.97 N +ATOM 1766 CA CYX A 240 10.824 12.270 17.423 1.00 14.89 C +ATOM 1767 C CYX A 240 10.207 12.061 16.048 1.00 14.98 C +ATOM 1768 O CYX A 240 10.047 10.929 15.610 1.00 14.22 O +ATOM 1769 CB CYX A 240 9.686 12.372 18.444 1.00 14.18 C +ATOM 1770 SG CYX A 240 10.202 12.092 20.151 1.00 13.26 S +ATOM 1771 N GLY A 241 9.841 13.153 15.383 1.00 15.22 N +ATOM 1772 CA GLY A 241 9.031 13.066 14.180 1.00 15.81 C +ATOM 1773 C GLY A 241 7.639 12.620 14.578 1.00 16.47 C +ATOM 1774 O GLY A 241 7.287 12.645 15.757 1.00 16.15 O +ATOM 1775 N GLY A 242 6.854 12.192 13.600 1.00 17.62 N +ATOM 1776 CA GLY A 242 5.506 11.713 13.865 1.00 19.10 C +ATOM 1777 C GLY A 242 4.521 12.844 14.071 1.00 21.15 C +ATOM 1778 O GLY A 242 4.815 14.004 13.781 1.00 20.86 O +ATOM 1779 N THR A 243 3.353 12.496 14.603 1.00 24.10 N +ATOM 1780 CA THR A 243 2.206 13.406 14.647 1.00 27.04 C +ATOM 1781 C THR A 243 2.436 14.681 15.475 1.00 29.01 C +ATOM 1782 O THR A 243 2.011 15.764 15.063 1.00 29.83 O +ATOM 1783 CB THR A 243 0.939 12.660 15.128 1.00 27.46 C +ATOM 1784 OG1 THR A 243 0.571 11.675 14.153 1.00 27.97 O +ATOM 1785 CG2 THR A 243 -0.231 13.614 15.326 1.00 27.62 C +ATOM 1786 N ATYR A 244 3.146 14.542 16.578 0.60 30.32 N +ATOM 1787 CA ATYR A 244 3.452 15.704 17.423 0.60 31.52 C +ATOM 1788 C ATYR A 244 4.882 16.105 17.359 0.60 31.31 C +ATOM 1789 O ATYR A 244 5.546 16.283 18.379 0.60 31.65 O +ATOM 1790 CB ATYR A 244 3.038 15.470 18.878 0.60 32.16 C +ATOM 1791 CG ATYR A 244 1.646 15.085 18.987 0.60 33.03 C +ATOM 1792 CD1ATYR A 244 0.647 15.974 18.588 0.60 33.28 C +ATOM 1793 CD2ATYR A 244 1.293 13.802 19.401 0.60 33.41 C +ATOM 1794 CE1ATYR A 244 -0.663 15.630 18.620 0.60 33.43 C +ATOM 1795 CE2ATYR A 244 -0.016 13.469 19.415 0.60 33.75 C +ATOM 1796 CZ ATYR A 244 -0.982 14.401 19.012 0.60 33.81 C +ATOM 1797 OH ATYR A 244 -2.294 14.132 19.008 0.60 34.02 O +ATOM 1798 N SER A 245 5.155 16.628 16.195 1.00 30.90 N +ATOM 1799 CA SER A 245 6.483 17.164 15.914 1.00 30.44 C +ATOM 1800 C SER A 245 6.357 18.222 14.826 1.00 30.27 C +ATOM 1801 O SER A 245 5.455 18.151 13.989 1.00 30.55 O +ATOM 1802 CB SER A 245 7.420 16.049 15.451 1.00 30.34 C +ATOM 1803 OG SER A 245 8.640 16.574 14.959 1.00 29.99 O +ATOM 1804 N ASN A 246 7.256 19.203 14.842 1.00 29.85 N +ATOM 1805 CA ASN A 246 7.243 20.261 13.827 1.00 29.63 C +ATOM 1806 C ASN A 246 7.714 19.771 12.450 1.00 27.69 C +ATOM 1807 O ASN A 246 7.376 20.375 11.431 1.00 28.21 O +ATOM 1808 CB ASN A 246 8.040 21.496 14.287 1.00 30.65 C +ATOM 1809 CG ASN A 246 9.511 21.204 14.538 1.00 31.72 C +ATOM 1810 OD1 ASN A 246 9.983 20.080 14.359 1.00 32.77 O +ATOM 1811 ND2 ASN A 246 10.246 22.228 14.964 1.00 32.71 N +ATOM 1812 N ASP A 247 8.493 18.686 12.431 1.00 25.24 N +ATOM 1813 CA ASP A 247 8.863 18.005 11.190 1.00 23.16 C +ATOM 1814 C ASP A 247 8.497 16.525 11.304 1.00 20.70 C +ATOM 1815 O ASP A 247 9.228 15.724 11.887 1.00 19.50 O +ATOM 1816 CB ASP A 247 10.355 18.171 10.881 1.00 24.56 C +ATOM 1817 CG ASP A 247 10.730 17.673 9.483 1.00 25.45 C +ATOM 1818 OD1 ASP A 247 9.921 16.968 8.830 1.00 26.05 O +ATOM 1819 OD2 ASP A 247 11.853 17.986 9.035 1.00 27.72 O +ATOM 1820 N ARG A 248 7.354 16.184 10.723 1.00 18.32 N +ATOM 1821 CA ARG A 248 6.786 14.840 10.792 1.00 16.87 C +ATOM 1822 C ARG A 248 7.745 13.726 10.374 1.00 15.53 C +ATOM 1823 O ARG A 248 7.706 12.628 10.934 1.00 14.33 O +ATOM 1824 CB ARG A 248 5.544 14.796 9.907 1.00 16.96 C +ATOM 1825 CG ARG A 248 4.778 13.491 9.928 1.00 17.07 C +ATOM 1826 CD ARG A 248 3.614 13.552 8.956 1.00 16.83 C +ATOM 1827 NE ARG A 248 2.868 12.300 8.952 1.00 16.66 N +ATOM 1828 CZ ARG A 248 2.004 11.926 9.893 1.00 16.76 C +ATOM 1829 NH1 ARG A 248 1.751 12.707 10.945 1.00 17.34 N +ATOM 1830 NH2 ARG A 248 1.393 10.753 9.790 1.00 16.63 N +ATOM 1831 N TYR A 249 8.599 14.004 9.394 1.00 14.66 N +ATOM 1832 CA TYR A 249 9.454 12.980 8.809 1.00 14.48 C +ATOM 1833 C TYR A 249 10.909 13.012 9.289 1.00 14.23 C +ATOM 1834 O TYR A 249 11.758 12.347 8.705 1.00 14.49 O +ATOM 1835 CB TYR A 249 9.397 13.105 7.286 1.00 14.56 C +ATOM 1836 CG TYR A 249 7.994 12.988 6.743 1.00 14.83 C +ATOM 1837 CD1 TYR A 249 7.260 11.822 6.921 1.00 14.80 C +ATOM 1838 CD2 TYR A 249 7.395 14.041 6.060 1.00 15.12 C +ATOM 1839 CE1 TYR A 249 5.973 11.704 6.430 1.00 15.28 C +ATOM 1840 CE2 TYR A 249 6.107 13.931 5.567 1.00 15.45 C +ATOM 1841 CZ TYR A 249 5.403 12.760 5.751 1.00 15.51 C +ATOM 1842 OH TYR A 249 4.125 12.651 5.258 1.00 16.23 O +ATOM 1843 N SER A 250 11.180 13.733 10.377 1.00 14.22 N +ATOM 1844 CA SER A 250 12.553 13.920 10.859 1.00 14.11 C +ATOM 1845 C SER A 250 13.045 12.824 11.810 1.00 13.56 C +ATOM 1846 O SER A 250 14.204 12.851 12.223 1.00 13.92 O +ATOM 1847 CB SER A 250 12.691 15.282 11.551 1.00 14.58 C +ATOM 1848 OG SER A 250 11.900 15.358 12.723 1.00 15.22 O +ATOM 1849 N GLY A 251 12.179 11.866 12.151 1.00 12.35 N +ATOM 1850 CA GLY A 251 12.510 10.829 13.134 1.00 11.56 C +ATOM 1851 C GLY A 251 13.002 9.517 12.549 1.00 10.88 C +ATOM 1852 O GLY A 251 13.351 9.432 11.377 1.00 10.75 O +ATOM 1853 N THR A 252 13.011 8.478 13.378 1.00 10.23 N +ATOM 1854 CA THR A 252 13.571 7.184 12.998 1.00 9.98 C +ATOM 1855 C THR A 252 12.510 6.163 12.581 1.00 9.57 C +ATOM 1856 O THR A 252 12.843 5.011 12.282 1.00 9.35 O +ATOM 1857 CB THR A 252 14.355 6.586 14.167 1.00 10.16 C +ATOM 1858 OG1 THR A 252 13.473 6.411 15.278 1.00 10.56 O +ATOM 1859 CG2 THR A 252 15.500 7.509 14.565 1.00 10.35 C +ATOM 1860 N THR A 253 11.244 6.577 12.591 1.00 9.22 N +ATOM 1861 CA THR A 253 10.143 5.710 12.181 1.00 9.05 C +ATOM 1862 C THR A 253 9.402 6.287 10.986 1.00 8.80 C +ATOM 1863 O THR A 253 9.559 7.458 10.638 1.00 8.90 O +ATOM 1864 CB THR A 253 9.112 5.500 13.310 1.00 9.16 C +ATOM 1865 OG1 THR A 253 8.389 6.716 13.540 1.00 9.10 O +ATOM 1866 CG2 THR A 253 9.788 5.040 14.591 1.00 9.22 C +ATOM 1867 N ASP A 254 8.573 5.444 10.384 1.00 8.50 N +ATOM 1868 CA ASP A 254 7.749 5.810 9.249 1.00 8.44 C +ATOM 1869 C ASP A 254 6.331 6.107 9.757 1.00 8.37 C +ATOM 1870 O ASP A 254 5.584 5.183 10.042 1.00 8.39 O +ATOM 1871 CB ASP A 254 7.749 4.640 8.264 1.00 8.56 C +ATOM 1872 CG ASP A 254 6.576 4.653 7.325 1.00 8.64 C +ATOM 1873 OD1 ASP A 254 6.088 5.746 6.962 1.00 8.64 O +ATOM 1874 OD2 ASP A 254 6.143 3.544 6.948 1.00 8.93 O +ATOM 1875 N PRO A 255 5.962 7.395 9.879 1.00 8.24 N +ATOM 1876 CA PRO A 255 4.661 7.714 10.467 1.00 8.27 C +ATOM 1877 C PRO A 255 3.475 7.536 9.520 1.00 8.29 C +ATOM 1878 O PRO A 255 2.331 7.584 9.969 1.00 8.50 O +ATOM 1879 CB PRO A 255 4.808 9.187 10.862 1.00 8.44 C +ATOM 1880 CG PRO A 255 5.785 9.735 9.898 1.00 8.49 C +ATOM 1881 CD PRO A 255 6.719 8.615 9.526 1.00 8.30 C +ATOM 1882 N ASP A 256 3.731 7.329 8.229 1.00 8.23 N +ATOM 1883 CA ASP A 256 2.647 7.240 7.244 1.00 8.34 C +ATOM 1884 C ASP A 256 2.307 5.808 6.863 1.00 8.05 C +ATOM 1885 O ASP A 256 1.134 5.463 6.729 1.00 8.07 O +ATOM 1886 CB ASP A 256 3.007 8.022 5.985 1.00 8.64 C +ATOM 1887 CG ASP A 256 3.046 9.520 6.220 1.00 9.08 C +ATOM 1888 OD1 ASP A 256 2.873 9.966 7.380 1.00 9.60 O +ATOM 1889 OD2 ASP A 256 3.262 10.254 5.232 1.00 9.79 O +ATOM 1890 N GLY A 257 3.335 4.991 6.660 1.00 7.89 N +ATOM 1891 CA GLY A 257 3.145 3.590 6.315 1.00 7.83 C +ATOM 1892 C GLY A 257 2.867 3.395 4.839 1.00 7.84 C +ATOM 1893 O GLY A 257 2.687 4.358 4.101 1.00 8.43 O +ATOM 1894 N CYX A 258 2.847 2.142 4.404 1.00 7.59 N +ATOM 1895 CA CYX A 258 2.429 1.813 3.053 1.00 7.60 C +ATOM 1896 C CYX A 258 1.004 1.284 3.156 1.00 7.32 C +ATOM 1897 O CYX A 258 0.785 0.122 3.471 1.00 7.32 O +ATOM 1898 CB CYX A 258 3.349 0.773 2.428 1.00 7.76 C +ATOM 1899 SG CYX A 258 2.779 0.334 0.776 1.00 8.07 S +ATOM 1900 N ASP A 259 0.037 2.155 2.911 1.00 7.02 N +ATOM 1901 CA ASP A 259 -1.362 1.842 3.185 1.00 6.86 C +ATOM 1902 C ASP A 259 -2.092 1.304 1.970 1.00 6.68 C +ATOM 1903 O ASP A 259 -1.795 1.684 0.837 1.00 6.64 O +ATOM 1904 CB ASP A 259 -2.099 3.093 3.661 1.00 6.97 C +ATOM 1905 CG ASP A 259 -2.066 4.208 2.636 1.00 7.11 C +ATOM 1906 OD1 ASP A 259 -0.946 4.600 2.239 1.00 7.45 O +ATOM 1907 OD2 ASP A 259 -3.146 4.699 2.234 1.00 7.26 O +ATOM 1908 N PHE A 260 -3.056 0.426 2.227 1.00 6.52 N +ATOM 1909 CA PHE A 260 -4.058 0.045 1.238 1.00 6.52 C +ATOM 1910 C PHE A 260 -5.438 0.277 1.835 1.00 6.52 C +ATOM 1911 O PHE A 260 -5.884 -0.476 2.707 1.00 6.56 O +ATOM 1912 CB PHE A 260 -3.915 -1.417 0.811 1.00 6.49 C +ATOM 1913 CG PHE A 260 -4.586 -1.732 -0.502 1.00 6.52 C +ATOM 1914 CD1 PHE A 260 -5.970 -1.658 -0.636 1.00 6.54 C +ATOM 1915 CD2 PHE A 260 -3.834 -2.079 -1.616 1.00 6.53 C +ATOM 1916 CE1 PHE A 260 -6.579 -1.941 -1.846 1.00 6.55 C +ATOM 1917 CE2 PHE A 260 -4.440 -2.369 -2.824 1.00 6.59 C +ATOM 1918 CZ PHE A 260 -5.813 -2.291 -2.946 1.00 6.56 C +ATOM 1919 N ASN A 261 -6.077 1.348 1.371 1.00 6.50 N +ATOM 1920 CA ASN A 261 -7.485 1.660 1.623 1.00 6.54 C +ATOM 1921 C ASN A 261 -8.164 1.555 0.255 1.00 6.62 C +ATOM 1922 O ASN A 261 -7.848 2.322 -0.652 1.00 6.40 O +ATOM 1923 CB ASN A 261 -7.578 3.078 2.218 1.00 6.60 C +ATOM 1924 CG ASN A 261 -8.991 3.649 2.258 1.00 6.60 C +ATOM 1925 OD1 ASN A 261 -9.904 3.207 1.560 1.00 6.60 O +ATOM 1926 ND2 ASN A 261 -9.155 4.691 3.061 1.00 6.61 N +ATOM 1927 N ASER A 262 -9.083 0.603 0.110 0.50 6.59 N +ATOM 1928 CA ASER A 262 -9.725 0.328 -1.180 0.50 6.67 C +ATOM 1929 C ASER A 262 -10.292 1.582 -1.856 0.50 6.82 C +ATOM 1930 O ASER A 262 -10.177 1.744 -3.077 0.50 6.87 O +ATOM 1931 CB ASER A 262 -10.841 -0.705 -1.001 0.50 6.62 C +ATOM 1932 OG ASER A 262 -10.306 -1.977 -0.664 0.50 6.50 O +ATOM 1933 N TYR A 263 -10.891 2.460 -1.056 1.00 6.96 N +ATOM 1934 CA TYR A 263 -11.476 3.705 -1.549 1.00 7.11 C +ATOM 1935 C TYR A 263 -10.387 4.661 -2.046 1.00 7.07 C +ATOM 1936 O TYR A 263 -10.505 5.240 -3.124 1.00 6.93 O +ATOM 1937 CB TYR A 263 -12.289 4.352 -0.427 1.00 7.36 C +ATOM 1938 CG TYR A 263 -13.244 5.437 -0.858 1.00 7.66 C +ATOM 1939 CD1 TYR A 263 -12.779 6.696 -1.240 1.00 7.87 C +ATOM 1940 CD2 TYR A 263 -14.614 5.218 -0.841 1.00 7.83 C +ATOM 1941 CE1 TYR A 263 -13.659 7.695 -1.620 1.00 8.18 C +ATOM 1942 CE2 TYR A 263 -15.499 6.210 -1.215 1.00 8.13 C +ATOM 1943 CZ TYR A 263 -15.016 7.441 -1.602 1.00 8.26 C +ATOM 1944 OH TYR A 263 -15.891 8.432 -1.970 1.00 9.17 O +ATOM 1945 N ARG A 264 -9.317 4.794 -1.269 1.00 7.02 N +ATOM 1946 CA ARG A 264 -8.190 5.643 -1.654 1.00 7.12 C +ATOM 1947 C ARG A 264 -7.524 5.106 -2.918 1.00 7.22 C +ATOM 1948 O ARG A 264 -6.991 5.872 -3.734 1.00 7.35 O +ATOM 1949 CB ARG A 264 -7.166 5.741 -0.520 1.00 7.22 C +ATOM 1950 CG ARG A 264 -6.180 6.875 -0.715 1.00 7.31 C +ATOM 1951 CD ARG A 264 -5.145 6.967 0.390 1.00 7.39 C +ATOM 1952 NE ARG A 264 -4.275 8.121 0.157 1.00 7.54 N +ATOM 1953 CZ ARG A 264 -2.975 8.184 0.441 1.00 7.60 C +ATOM 1954 NH1 ARG A 264 -2.341 7.157 0.993 1.00 7.63 N +ATOM 1955 NH2 ARG A 264 -2.297 9.290 0.155 1.00 7.71 N +ATOM 1956 N GLN A 265 -7.568 3.787 -3.082 1.00 7.25 N +ATOM 1957 CA GLN A 265 -7.008 3.135 -4.269 1.00 7.49 C +ATOM 1958 C GLN A 265 -7.985 3.036 -5.443 1.00 7.79 C +ATOM 1959 O GLN A 265 -7.721 2.310 -6.409 1.00 8.00 O +ATOM 1960 CB GLN A 265 -6.448 1.760 -3.905 1.00 7.42 C +ATOM 1961 CG GLN A 265 -5.325 1.819 -2.879 1.00 7.38 C +ATOM 1962 CD GLN A 265 -4.186 2.735 -3.291 1.00 7.36 C +ATOM 1963 OE1 GLN A 265 -3.730 2.728 -4.445 1.00 7.68 O +ATOM 1964 NE2 GLN A 265 -3.722 3.523 -2.358 1.00 7.06 N +ATOM 1965 N GLY A 266 -9.096 3.768 -5.362 1.00 8.15 N +ATOM 1966 CA GLY A 266 -9.943 4.037 -6.519 1.00 8.43 C +ATOM 1967 C GLY A 266 -11.211 3.220 -6.635 1.00 8.66 C +ATOM 1968 O GLY A 266 -12.012 3.458 -7.548 1.00 9.08 O +ATOM 1969 N ASP A 267 -11.414 2.270 -5.725 1.00 8.85 N +ATOM 1970 CA ASP A 267 -12.635 1.469 -5.727 1.00 8.99 C +ATOM 1971 C ASP A 267 -13.568 1.929 -4.606 1.00 8.75 C +ATOM 1972 O ASP A 267 -13.427 1.524 -3.450 1.00 8.90 O +ATOM 1973 CB ASP A 267 -12.313 -0.018 -5.600 1.00 9.34 C +ATOM 1974 CG ASP A 267 -13.516 -0.907 -5.904 1.00 9.59 C +ATOM 1975 OD1 ASP A 267 -14.673 -0.430 -5.803 1.00 9.99 O +ATOM 1976 OD2 ASP A 267 -13.310 -2.098 -6.224 1.00 10.13 O +ATOM 1977 N THR A 268 -14.531 2.770 -4.966 1.00 8.44 N +ATOM 1978 CA THR A 268 -15.462 3.338 -3.999 1.00 8.48 C +ATOM 1979 C THR A 268 -16.671 2.442 -3.745 1.00 8.55 C +ATOM 1980 O THR A 268 -17.482 2.755 -2.882 1.00 8.78 O +ATOM 1981 CB THR A 268 -15.977 4.723 -4.453 1.00 8.38 C +ATOM 1982 OG1 THR A 268 -16.830 4.578 -5.602 1.00 8.47 O +ATOM 1983 CG2 THR A 268 -14.814 5.651 -4.778 1.00 8.35 C +ATOM 1984 N SER A 269 -16.807 1.352 -4.505 1.00 8.59 N +ATOM 1985 CA SER A 269 -17.953 0.442 -4.362 1.00 8.81 C +ATOM 1986 C SER A 269 -17.675 -0.791 -3.501 1.00 8.48 C +ATOM 1987 O SER A 269 -18.563 -1.623 -3.309 1.00 8.55 O +ATOM 1988 CB SER A 269 -18.408 -0.031 -5.746 1.00 9.25 C +ATOM 1989 OG SER A 269 -17.463 -0.916 -6.326 1.00 10.41 O +ATOM 1990 N PHE A 270 -16.448 -0.915 -2.996 1.00 8.10 N +ATOM 1991 CA PHE A 270 -15.986 -2.164 -2.396 1.00 7.87 C +ATOM 1992 C PHE A 270 -16.326 -2.306 -0.916 1.00 7.60 C +ATOM 1993 O PHE A 270 -16.884 -3.317 -0.512 1.00 7.65 O +ATOM 1994 CB PHE A 270 -14.483 -2.330 -2.590 1.00 8.03 C +ATOM 1995 CG PHE A 270 -13.943 -3.622 -2.041 1.00 8.04 C +ATOM 1996 CD1 PHE A 270 -14.287 -4.838 -2.621 1.00 8.09 C +ATOM 1997 CD2 PHE A 270 -13.089 -3.628 -0.940 1.00 8.09 C +ATOM 1998 CE1 PHE A 270 -13.799 -6.029 -2.113 1.00 8.10 C +ATOM 1999 CE2 PHE A 270 -12.594 -4.821 -0.436 1.00 8.04 C +ATOM 2000 CZ PHE A 270 -12.949 -6.021 -1.022 1.00 8.12 C +ATOM 2001 N TYR A 271 -15.966 -1.302 -0.118 1.00 7.28 N +ATOM 2002 CA TYR A 271 -16.085 -1.394 1.343 1.00 7.10 C +ATOM 2003 C TYR A 271 -16.946 -0.259 1.876 1.00 7.23 C +ATOM 2004 O TYR A 271 -16.665 0.903 1.612 1.00 7.08 O +ATOM 2005 CB TYR A 271 -14.693 -1.359 1.994 1.00 6.90 C +ATOM 2006 CG TYR A 271 -14.732 -1.391 3.510 1.00 6.66 C +ATOM 2007 CD1 TYR A 271 -14.869 -0.222 4.246 1.00 6.55 C +ATOM 2008 CD2 TYR A 271 -14.658 -2.596 4.205 1.00 6.59 C +ATOM 2009 CE1 TYR A 271 -14.932 -0.244 5.625 1.00 6.45 C +ATOM 2010 CE2 TYR A 271 -14.714 -2.629 5.592 1.00 6.52 C +ATOM 2011 CZ TYR A 271 -14.850 -1.448 6.291 1.00 6.41 C +ATOM 2012 OH TYR A 271 -14.910 -1.459 7.662 1.00 6.37 O +ATOM 2013 N GLY A 272 -17.992 -0.596 2.629 1.00 7.52 N +ATOM 2014 CA GLY A 272 -18.857 0.416 3.222 1.00 7.92 C +ATOM 2015 C GLY A 272 -20.282 -0.060 3.363 1.00 8.25 C +ATOM 2016 O GLY A 272 -20.572 -1.234 3.117 1.00 8.30 O +ATOM 2017 N PRO A 273 -21.187 0.847 3.755 1.00 8.62 N +ATOM 2018 CA PRO A 273 -22.574 0.461 3.995 1.00 8.86 C +ATOM 2019 C PRO A 273 -23.271 0.048 2.699 1.00 9.11 C +ATOM 2020 O PRO A 273 -23.316 0.823 1.741 1.00 9.25 O +ATOM 2021 CB PRO A 273 -23.195 1.731 4.600 1.00 8.92 C +ATOM 2022 CG PRO A 273 -22.035 2.575 5.024 1.00 8.87 C +ATOM 2023 CD PRO A 273 -20.981 2.280 4.006 1.00 8.70 C +ATOM 2024 N GLY A 274 -23.765 -1.187 2.663 1.00 9.28 N +ATOM 2025 CA GLY A 274 -24.410 -1.728 1.466 1.00 9.52 C +ATOM 2026 C GLY A 274 -23.470 -2.109 0.336 1.00 9.71 C +ATOM 2027 O GLY A 274 -23.917 -2.431 -0.771 1.00 10.25 O +ATOM 2028 N LYS A 275 -22.166 -2.103 0.596 1.00 9.75 N +ATOM 2029 CA LYS A 275 -21.186 -2.355 -0.461 1.00 9.86 C +ATOM 2030 C LYS A 275 -20.752 -3.825 -0.456 1.00 10.06 C +ATOM 2031 O LYS A 275 -21.305 -4.633 0.292 1.00 10.35 O +ATOM 2032 CB LYS A 275 -20.014 -1.375 -0.320 1.00 9.82 C +ATOM 2033 CG LYS A 275 -20.449 0.071 -0.535 1.00 9.75 C +ATOM 2034 CD LYS A 275 -19.307 1.069 -0.470 1.00 9.72 C +ATOM 2035 CE LYS A 275 -19.807 2.483 -0.715 1.00 9.70 C +ATOM 2036 NZ LYS A 275 -18.722 3.486 -0.546 1.00 9.85 N +ATOM 2037 N THR A 276 -19.785 -4.178 -1.301 1.00 10.12 N +ATOM 2038 CA THR A 276 -19.387 -5.572 -1.481 1.00 10.24 C +ATOM 2039 C THR A 276 -19.014 -6.231 -0.159 1.00 10.05 C +ATOM 2040 O THR A 276 -19.460 -7.341 0.143 1.00 10.43 O +ATOM 2041 CB THR A 276 -18.213 -5.672 -2.474 1.00 10.49 C +ATOM 2042 OG1 THR A 276 -18.608 -5.090 -3.722 1.00 11.08 O +ATOM 2043 CG2 THR A 276 -17.794 -7.119 -2.684 1.00 10.60 C +ATOM 2044 N VAL A 277 -18.182 -5.544 0.620 1.00 9.63 N +ATOM 2045 CA VAL A 277 -17.986 -5.873 2.023 1.00 9.52 C +ATOM 2046 C VAL A 277 -18.914 -4.902 2.748 1.00 9.63 C +ATOM 2047 O VAL A 277 -18.625 -3.714 2.850 1.00 9.49 O +ATOM 2048 CB VAL A 277 -16.518 -5.688 2.458 1.00 9.39 C +ATOM 2049 CG1 VAL A 277 -16.363 -5.983 3.946 1.00 9.28 C +ATOM 2050 CG2 VAL A 277 -15.603 -6.576 1.623 1.00 9.42 C +ATOM 2051 N ASP A 278 -20.052 -5.420 3.206 1.00 9.65 N +ATOM 2052 CA ASP A 278 -21.153 -4.609 3.707 1.00 9.80 C +ATOM 2053 C ASP A 278 -20.981 -4.359 5.196 1.00 9.50 C +ATOM 2054 O ASP A 278 -21.162 -5.262 6.010 1.00 9.35 O +ATOM 2055 CB ASP A 278 -22.472 -5.342 3.437 1.00 10.33 C +ATOM 2056 CG ASP A 278 -23.697 -4.510 3.770 1.00 10.80 C +ATOM 2057 OD1 ASP A 278 -23.580 -3.461 4.430 1.00 10.94 O +ATOM 2058 OD2 ASP A 278 -24.803 -4.916 3.354 1.00 12.00 O +ATOM 2059 N THR A 279 -20.643 -3.125 5.550 1.00 9.10 N +ATOM 2060 CA THR A 279 -20.334 -2.792 6.935 1.00 8.95 C +ATOM 2061 C THR A 279 -21.565 -2.705 7.833 1.00 9.25 C +ATOM 2062 O THR A 279 -21.429 -2.490 9.031 1.00 8.99 O +ATOM 2063 CB THR A 279 -19.546 -1.479 7.029 1.00 8.76 C +ATOM 2064 OG1 THR A 279 -20.296 -0.423 6.424 1.00 8.55 O +ATOM 2065 CG2 THR A 279 -18.209 -1.610 6.317 1.00 8.58 C +ATOM 2066 N ASN A 280 -22.762 -2.875 7.266 1.00 9.80 N +ATOM 2067 CA ASN A 280 -23.975 -2.993 8.074 1.00 10.42 C +ATOM 2068 C ASN A 280 -24.041 -4.312 8.856 1.00 10.41 C +ATOM 2069 O ASN A 280 -24.818 -4.423 9.802 1.00 10.79 O +ATOM 2070 CB ASN A 280 -25.235 -2.832 7.203 1.00 10.97 C +ATOM 2071 CG ASN A 280 -25.345 -1.448 6.564 1.00 11.38 C +ATOM 2072 OD1 ASN A 280 -25.707 -1.308 5.400 1.00 12.43 O +ATOM 2073 ND2 ASN A 280 -25.029 -0.422 7.324 1.00 11.85 N +ATOM 2074 N SER A 281 -23.213 -5.288 8.481 1.00 10.23 N +ATOM 2075 CA SER A 281 -23.175 -6.588 9.145 1.00 10.29 C +ATOM 2076 C SER A 281 -21.749 -7.032 9.437 1.00 9.96 C +ATOM 2077 O SER A 281 -20.794 -6.539 8.835 1.00 9.45 O +ATOM 2078 CB SER A 281 -23.840 -7.644 8.267 1.00 10.66 C +ATOM 2079 OG SER A 281 -25.195 -7.331 8.039 1.00 11.38 O +ATOM 2080 N LYS A 282 -21.633 -7.999 10.341 1.00 9.79 N +ATOM 2081 CA LYS A 282 -20.350 -8.599 10.694 1.00 9.92 C +ATOM 2082 C LYS A 282 -19.677 -9.208 9.464 1.00 9.03 C +ATOM 2083 O LYS A 282 -20.340 -9.678 8.541 1.00 8.85 O +ATOM 2084 CB LYS A 282 -20.559 -9.685 11.764 1.00 10.91 C +ATOM 2085 CG LYS A 282 -19.282 -10.226 12.384 1.00 11.91 C +ATOM 2086 CD LYS A 282 -19.560 -11.121 13.590 1.00 12.81 C +ATOM 2087 CE LYS A 282 -20.240 -12.421 13.191 1.00 13.54 C +ATOM 2088 NZ LYS A 282 -20.354 -13.388 14.322 1.00 14.24 N +ATOM 2089 N PHE A 283 -18.353 -9.185 9.451 1.00 8.32 N +ATOM 2090 CA PHE A 283 -17.592 -9.881 8.426 1.00 7.68 C +ATOM 2091 C PHE A 283 -16.260 -10.330 8.994 1.00 7.54 C +ATOM 2092 O PHE A 283 -15.831 -9.869 10.059 1.00 7.31 O +ATOM 2093 CB PHE A 283 -17.381 -9.005 7.176 1.00 7.44 C +ATOM 2094 CG PHE A 283 -16.815 -7.637 7.479 1.00 7.22 C +ATOM 2095 CD1 PHE A 283 -15.449 -7.436 7.560 1.00 7.16 C +ATOM 2096 CD2 PHE A 283 -17.657 -6.557 7.692 1.00 7.18 C +ATOM 2097 CE1 PHE A 283 -14.932 -6.178 7.853 1.00 7.03 C +ATOM 2098 CE2 PHE A 283 -17.151 -5.301 7.991 1.00 7.13 C +ATOM 2099 CZ PHE A 283 -15.781 -5.113 8.066 1.00 7.10 C +ATOM 2100 N THR A 284 -15.626 -11.243 8.267 1.00 7.29 N +ATOM 2101 CA THR A 284 -14.317 -11.771 8.609 1.00 7.34 C +ATOM 2102 C THR A 284 -13.236 -11.058 7.797 1.00 7.00 C +ATOM 2103 O THR A 284 -13.407 -10.829 6.598 1.00 7.02 O +ATOM 2104 CB THR A 284 -14.256 -13.277 8.316 1.00 7.52 C +ATOM 2105 OG1 THR A 284 -15.338 -13.939 8.986 1.00 7.99 O +ATOM 2106 CG2 THR A 284 -12.932 -13.865 8.767 1.00 7.70 C +ATOM 2107 N VAL A 285 -12.133 -10.717 8.468 1.00 6.73 N +ATOM 2108 CA VAL A 285 -10.978 -10.048 7.867 1.00 6.61 C +ATOM 2109 C VAL A 285 -9.769 -10.972 7.960 1.00 6.50 C +ATOM 2110 O VAL A 285 -9.331 -11.317 9.059 1.00 6.24 O +ATOM 2111 CB VAL A 285 -10.652 -8.733 8.609 1.00 6.54 C +ATOM 2112 CG1 VAL A 285 -9.459 -8.029 7.967 1.00 6.55 C +ATOM 2113 CG2 VAL A 285 -11.870 -7.817 8.647 1.00 6.59 C +ATOM 2114 N VAL A 286 -9.239 -11.366 6.805 1.00 6.51 N +ATOM 2115 CA VAL A 286 -8.080 -12.256 6.720 1.00 6.55 C +ATOM 2116 C VAL A 286 -6.894 -11.452 6.214 1.00 6.51 C +ATOM 2117 O VAL A 286 -7.009 -10.763 5.211 1.00 6.52 O +ATOM 2118 CB VAL A 286 -8.324 -13.416 5.728 1.00 6.62 C +ATOM 2119 CG1 VAL A 286 -7.090 -14.307 5.610 1.00 6.70 C +ATOM 2120 CG2 VAL A 286 -9.550 -14.227 6.134 1.00 6.66 C +ATOM 2121 N THR A 287 -5.759 -11.545 6.899 1.00 6.53 N +ATOM 2122 CA THR A 287 -4.546 -10.861 6.478 1.00 6.65 C +ATOM 2123 C THR A 287 -3.397 -11.865 6.450 1.00 6.87 C +ATOM 2124 O THR A 287 -3.086 -12.469 7.471 1.00 6.81 O +ATOM 2125 CB THR A 287 -4.241 -9.684 7.415 1.00 6.60 C +ATOM 2126 OG1 THR A 287 -5.435 -8.916 7.588 1.00 6.45 O +ATOM 2127 CG2 THR A 287 -3.162 -8.786 6.849 1.00 6.70 C +ATOM 2128 N GLN A 288 -2.792 -12.036 5.275 1.00 7.17 N +ATOM 2129 CA GLN A 288 -1.758 -13.046 5.042 1.00 7.64 C +ATOM 2130 C GLN A 288 -0.400 -12.395 4.840 1.00 7.87 C +ATOM 2131 O GLN A 288 -0.285 -11.406 4.118 1.00 7.98 O +ATOM 2132 CB GLN A 288 -2.096 -13.848 3.793 1.00 7.71 C +ATOM 2133 CG GLN A 288 -3.469 -14.488 3.818 1.00 7.90 C +ATOM 2134 CD GLN A 288 -3.760 -15.268 2.555 1.00 8.15 C +ATOM 2135 OE1 GLN A 288 -3.277 -14.924 1.475 1.00 8.50 O +ATOM 2136 NE2 GLN A 288 -4.558 -16.316 2.681 1.00 8.30 N +ATOM 2137 N PHE A 289 0.629 -12.973 5.453 1.00 8.24 N +ATOM 2138 CA PHE A 289 1.975 -12.408 5.427 1.00 8.69 C +ATOM 2139 C PHE A 289 2.899 -13.358 4.677 1.00 9.16 C +ATOM 2140 O PHE A 289 3.475 -14.283 5.259 1.00 9.23 O +ATOM 2141 CB PHE A 289 2.418 -12.136 6.857 1.00 8.71 C +ATOM 2142 CG PHE A 289 1.477 -11.233 7.590 1.00 8.84 C +ATOM 2143 CD1 PHE A 289 1.584 -9.858 7.460 1.00 8.93 C +ATOM 2144 CD2 PHE A 289 0.441 -11.753 8.357 1.00 9.13 C +ATOM 2145 CE1 PHE A 289 0.703 -9.013 8.113 1.00 9.00 C +ATOM 2146 CE2 PHE A 289 -0.446 -10.911 9.011 1.00 9.23 C +ATOM 2147 CZ PHE A 289 -0.314 -9.541 8.888 1.00 9.18 C +ATOM 2148 N ALEU A 290 3.009 -13.128 3.369 0.50 9.45 N +ATOM 2149 CA ALEU A 290 3.769 -13.992 2.469 0.50 9.73 C +ATOM 2150 C ALEU A 290 5.225 -13.560 2.422 0.50 10.11 C +ATOM 2151 O ALEU A 290 5.534 -12.377 2.585 0.50 9.91 O +ATOM 2152 CB ALEU A 290 3.188 -13.942 1.053 0.50 9.86 C +ATOM 2153 CG ALEU A 290 1.863 -14.653 0.758 0.50 9.89 C +ATOM 2154 CD1ALEU A 290 0.698 -13.977 1.463 0.50 9.90 C +ATOM 2155 CD2ALEU A 290 1.623 -14.691 -0.744 0.50 9.93 C +ATOM 2156 N THR A 291 6.109 -14.525 2.180 1.00 10.58 N +ATOM 2157 CA THR A 291 7.551 -14.276 2.139 1.00 11.42 C +ATOM 2158 C THR A 291 8.130 -14.630 0.785 1.00 12.36 C +ATOM 2159 O THR A 291 7.471 -15.275 -0.034 1.00 12.27 O +ATOM 2160 CB THR A 291 8.291 -15.115 3.196 1.00 11.73 C +ATOM 2161 OG1 THR A 291 8.142 -16.508 2.897 1.00 12.25 O +ATOM 2162 CG2 THR A 291 7.744 -14.832 4.590 1.00 11.71 C +ATOM 2163 N ASP A 292 9.358 -14.174 0.555 1.00 13.53 N +ATOM 2164 CA ASP A 292 10.165 -14.654 -0.566 1.00 14.56 C +ATOM 2165 C ASP A 292 10.758 -16.007 -0.172 1.00 15.52 C +ATOM 2166 O ASP A 292 10.452 -16.530 0.901 1.00 15.65 O +ATOM 2167 CB ASP A 292 11.245 -13.631 -0.965 1.00 14.99 C +ATOM 2168 CG ASP A 292 12.211 -13.298 0.159 1.00 15.12 C +ATOM 2169 OD1 ASP A 292 12.342 -14.075 1.127 1.00 15.56 O +ATOM 2170 OD2 ASP A 292 12.860 -12.235 0.068 1.00 16.37 O +ATOM 2171 N SER A 293 11.608 -16.577 -1.021 1.00 16.73 N +ATOM 2172 CA SER A 293 12.193 -17.889 -0.727 1.00 17.59 C +ATOM 2173 C SER A 293 13.237 -17.861 0.398 1.00 18.23 C +ATOM 2174 O SER A 293 13.709 -18.920 0.824 1.00 19.31 O +ATOM 2175 CB SER A 293 12.811 -18.490 -1.990 1.00 17.95 C +ATOM 2176 OG SER A 293 13.899 -17.708 -2.438 1.00 18.04 O +ATOM 2177 N SER A 294 13.604 -16.665 0.861 1.00 18.64 N +ATOM 2178 CA SER A 294 14.557 -16.482 1.965 1.00 18.66 C +ATOM 2179 C SER A 294 13.880 -16.202 3.314 1.00 17.65 C +ATOM 2180 O SER A 294 14.554 -15.922 4.310 1.00 17.81 O +ATOM 2181 CB SER A 294 15.507 -15.330 1.637 1.00 19.49 C +ATOM 2182 OG SER A 294 16.175 -15.557 0.409 1.00 20.76 O +ATOM 2183 N GLY A 295 12.552 -16.255 3.345 1.00 16.23 N +ATOM 2184 CA GLY A 295 11.807 -16.067 4.583 1.00 15.48 C +ATOM 2185 C GLY A 295 11.578 -14.619 4.984 1.00 14.40 C +ATOM 2186 O GLY A 295 11.123 -14.357 6.100 1.00 14.36 O +ATOM 2187 N ASN A 296 11.881 -13.676 4.092 1.00 13.63 N +ATOM 2188 CA ASN A 296 11.604 -12.268 4.354 1.00 13.10 C +ATOM 2189 C ASN A 296 10.242 -11.890 3.790 1.00 11.71 C +ATOM 2190 O ASN A 296 9.871 -12.313 2.697 1.00 11.23 O +ATOM 2191 CB ASN A 296 12.693 -11.368 3.758 1.00 14.04 C +ATOM 2192 CG ASN A 296 14.065 -11.613 4.371 1.00 14.77 C +ATOM 2193 OD1 ASN A 296 15.058 -11.701 3.658 1.00 16.89 O +ATOM 2194 ND2 ASN A 296 14.124 -11.724 5.690 1.00 15.16 N +ATOM 2195 N LEU A 297 9.495 -11.099 4.549 1.00 10.81 N +ATOM 2196 CA LEU A 297 8.186 -10.636 4.106 1.00 10.22 C +ATOM 2197 C LEU A 297 8.298 -9.940 2.753 1.00 10.15 C +ATOM 2198 O LEU A 297 9.159 -9.079 2.566 1.00 10.13 O +ATOM 2199 CB LEU A 297 7.595 -9.663 5.131 1.00 9.94 C +ATOM 2200 CG LEU A 297 6.159 -9.188 4.883 1.00 9.78 C +ATOM 2201 CD1 LEU A 297 5.167 -10.296 5.202 1.00 9.71 C +ATOM 2202 CD2 LEU A 297 5.860 -7.948 5.712 1.00 9.83 C +ATOM 2203 N ASN A 298 7.442 -10.318 1.807 1.00 10.17 N +ATOM 2204 CA ASN A 298 7.391 -9.609 0.526 1.00 10.15 C +ATOM 2205 C ASN A 298 5.988 -9.259 0.034 1.00 9.87 C +ATOM 2206 O ASN A 298 5.840 -8.605 -0.995 1.00 9.70 O +ATOM 2207 CB ASN A 298 8.173 -10.368 -0.558 1.00 10.71 C +ATOM 2208 CG ASN A 298 7.461 -11.611 -1.051 1.00 10.92 C +ATOM 2209 OD1 ASN A 298 6.486 -12.075 -0.455 1.00 11.33 O +ATOM 2210 ND2 ASN A 298 7.960 -12.175 -2.155 1.00 11.34 N +ATOM 2211 N GLU A 299 4.959 -9.679 0.763 1.00 9.62 N +ATOM 2212 CA GLU A 299 3.598 -9.407 0.340 1.00 9.45 C +ATOM 2213 C GLU A 299 2.631 -9.576 1.492 1.00 8.91 C +ATOM 2214 O GLU A 299 2.721 -10.539 2.255 1.00 8.96 O +ATOM 2215 CB GLU A 299 3.180 -10.313 -0.825 1.00 10.00 C +ATOM 2216 CG GLU A 299 1.776 -10.022 -1.344 1.00 10.57 C +ATOM 2217 CD GLU A 299 1.438 -10.791 -2.605 1.00 11.11 C +ATOM 2218 OE1 GLU A 299 2.049 -11.853 -2.846 1.00 12.16 O +ATOM 2219 OE2 GLU A 299 0.559 -10.340 -3.360 1.00 11.97 O +ATOM 2220 N ILE A 300 1.707 -8.627 1.608 1.00 8.18 N +ATOM 2221 CA ILE A 300 0.581 -8.750 2.530 1.00 7.79 C +ATOM 2222 C ILE A 300 -0.693 -8.819 1.694 1.00 7.60 C +ATOM 2223 O ILE A 300 -0.987 -7.887 0.941 1.00 7.41 O +ATOM 2224 CB ILE A 300 0.507 -7.568 3.521 1.00 7.81 C +ATOM 2225 CG1 ILE A 300 1.850 -7.381 4.237 1.00 7.84 C +ATOM 2226 CG2 ILE A 300 -0.613 -7.802 4.533 1.00 7.76 C +ATOM 2227 CD1 ILE A 300 1.884 -6.192 5.176 1.00 7.90 C +ATOM 2228 N ALYS A 301 -1.425 -9.930 1.811 0.50 7.48 N +ATOM 2229 CA ALYS A 301 -2.703 -10.103 1.120 0.50 7.47 C +ATOM 2230 C ALYS A 301 -3.856 -9.927 2.099 0.50 7.26 C +ATOM 2231 O ALYS A 301 -3.685 -10.104 3.308 0.50 7.25 O +ATOM 2232 CB ALYS A 301 -2.806 -11.491 0.485 0.50 7.66 C +ATOM 2233 CG ALYS A 301 -1.783 -11.782 -0.602 0.50 7.88 C +ATOM 2234 CD ALYS A 301 -2.112 -13.084 -1.316 0.50 8.10 C +ATOM 2235 CE ALYS A 301 -1.180 -13.352 -2.487 0.50 8.28 C +ATOM 2236 NZ ALYS A 301 -1.314 -12.337 -3.567 0.50 8.46 N +ATOM 2237 N ARG A 302 -5.026 -9.587 1.562 1.00 7.07 N +ATOM 2238 CA ARG A 302 -6.236 -9.401 2.351 1.00 6.81 C +ATOM 2239 C ARG A 302 -7.393 -10.124 1.668 1.00 6.74 C +ATOM 2240 O ARG A 302 -7.586 -9.977 0.466 1.00 6.71 O +ATOM 2241 CB ARG A 302 -6.535 -7.901 2.457 1.00 6.65 C +ATOM 2242 CG ARG A 302 -7.942 -7.508 2.905 1.00 6.53 C +ATOM 2243 CD ARG A 302 -8.321 -8.009 4.289 1.00 6.47 C +ATOM 2244 NE ARG A 302 -7.348 -7.682 5.334 1.00 6.41 N +ATOM 2245 CZ ARG A 302 -7.206 -6.487 5.904 1.00 6.48 C +ATOM 2246 NH1 ARG A 302 -7.980 -5.468 5.549 1.00 6.53 N +ATOM 2247 NH2 ARG A 302 -6.288 -6.314 6.843 1.00 6.48 N +ATOM 2248 N PHE A 303 -8.141 -10.911 2.436 1.00 6.79 N +ATOM 2249 CA PHE A 303 -9.427 -11.448 1.993 1.00 6.93 C +ATOM 2250 C PHE A 303 -10.483 -11.088 3.016 1.00 7.00 C +ATOM 2251 O PHE A 303 -10.176 -10.889 4.189 1.00 7.01 O +ATOM 2252 CB PHE A 303 -9.374 -12.968 1.850 1.00 7.05 C +ATOM 2253 CG PHE A 303 -8.497 -13.435 0.739 1.00 7.17 C +ATOM 2254 CD1 PHE A 303 -7.140 -13.634 0.944 1.00 7.27 C +ATOM 2255 CD2 PHE A 303 -9.023 -13.672 -0.516 1.00 7.24 C +ATOM 2256 CE1 PHE A 303 -6.320 -14.058 -0.087 1.00 7.41 C +ATOM 2257 CE2 PHE A 303 -8.216 -14.110 -1.552 1.00 7.36 C +ATOM 2258 CZ PHE A 303 -6.857 -14.300 -1.337 1.00 7.36 C +ATOM 2259 N TYR A 304 -11.729 -11.010 2.568 1.00 7.12 N +ATOM 2260 CA TYR A 304 -12.857 -10.886 3.475 1.00 7.33 C +ATOM 2261 C TYR A 304 -13.733 -12.110 3.310 1.00 7.79 C +ATOM 2262 O TYR A 304 -13.703 -12.756 2.262 1.00 7.73 O +ATOM 2263 CB TYR A 304 -13.647 -9.612 3.176 1.00 7.20 C +ATOM 2264 CG TYR A 304 -12.808 -8.376 3.346 1.00 7.09 C +ATOM 2265 CD1 TYR A 304 -12.726 -7.742 4.576 1.00 7.07 C +ATOM 2266 CD2 TYR A 304 -12.066 -7.864 2.292 1.00 7.01 C +ATOM 2267 CE1 TYR A 304 -11.942 -6.620 4.750 1.00 7.11 C +ATOM 2268 CE2 TYR A 304 -11.268 -6.747 2.458 1.00 7.05 C +ATOM 2269 CZ TYR A 304 -11.213 -6.125 3.689 1.00 7.07 C +ATOM 2270 OH TYR A 304 -10.415 -5.009 3.867 1.00 7.13 O +ATOM 2271 N VAL A 305 -14.489 -12.440 4.351 1.00 8.31 N +ATOM 2272 CA VAL A 305 -15.545 -13.442 4.234 1.00 8.84 C +ATOM 2273 C VAL A 305 -16.811 -12.830 4.809 1.00 9.21 C +ATOM 2274 O VAL A 305 -16.812 -12.341 5.940 1.00 9.23 O +ATOM 2275 CB VAL A 305 -15.218 -14.767 4.968 1.00 8.94 C +ATOM 2276 CG1 VAL A 305 -16.179 -15.862 4.517 1.00 9.11 C +ATOM 2277 CG2 VAL A 305 -13.776 -15.194 4.731 1.00 9.01 C +ATOM 2278 N GLN A 306 -17.883 -12.832 4.019 1.00 9.84 N +ATOM 2279 CA GLN A 306 -19.185 -12.379 4.500 1.00 10.59 C +ATOM 2280 C GLN A 306 -20.277 -13.198 3.824 1.00 11.84 C +ATOM 2281 O GLN A 306 -20.204 -13.454 2.629 1.00 12.15 O +ATOM 2282 CB GLN A 306 -19.385 -10.883 4.231 1.00 10.27 C +ATOM 2283 CG GLN A 306 -20.533 -10.285 5.032 1.00 10.03 C +ATOM 2284 CD GLN A 306 -20.655 -8.782 4.867 1.00 9.78 C +ATOM 2285 OE1 GLN A 306 -20.606 -8.266 3.754 1.00 9.52 O +ATOM 2286 NE2 GLN A 306 -20.811 -8.074 5.979 1.00 9.62 N +ATOM 2287 N ASN A 307 -21.277 -13.612 4.600 1.00 13.70 N +ATOM 2288 CA ASN A 307 -22.336 -14.507 4.098 1.00 15.18 C +ATOM 2289 C ASN A 307 -21.765 -15.807 3.509 1.00 15.28 C +ATOM 2290 O ASN A 307 -22.330 -16.374 2.569 1.00 16.46 O +ATOM 2291 CB ASN A 307 -23.224 -13.795 3.054 1.00 16.05 C +ATOM 2292 CG ASN A 307 -23.994 -12.618 3.627 1.00 17.15 C +ATOM 2293 OD1 ASN A 307 -23.967 -11.508 3.078 1.00 18.66 O +ATOM 2294 ND2 ASN A 307 -24.693 -12.851 4.728 1.00 17.78 N +ATOM 2295 N GLY A 308 -20.644 -16.274 4.060 1.00 15.06 N +ATOM 2296 CA GLY A 308 -19.984 -17.493 3.583 1.00 14.59 C +ATOM 2297 C GLY A 308 -19.231 -17.364 2.266 1.00 14.17 C +ATOM 2298 O GLY A 308 -18.746 -18.365 1.734 1.00 14.93 O +ATOM 2299 N VAL A 309 -19.117 -16.141 1.748 1.00 13.03 N +ATOM 2300 CA VAL A 309 -18.464 -15.886 0.467 1.00 12.61 C +ATOM 2301 C VAL A 309 -17.088 -15.279 0.697 1.00 11.90 C +ATOM 2302 O VAL A 309 -16.960 -14.292 1.421 1.00 11.60 O +ATOM 2303 CB VAL A 309 -19.297 -14.919 -0.394 1.00 12.72 C +ATOM 2304 CG1 VAL A 309 -18.596 -14.620 -1.716 1.00 12.78 C +ATOM 2305 CG2 VAL A 309 -20.685 -15.495 -0.635 1.00 12.89 C +ATOM 2306 N VAL A 310 -16.074 -15.879 0.082 1.00 11.18 N +ATOM 2307 CA VAL A 310 -14.708 -15.365 0.144 1.00 10.85 C +ATOM 2308 C VAL A 310 -14.567 -14.252 -0.886 1.00 10.52 C +ATOM 2309 O VAL A 310 -14.836 -14.445 -2.080 1.00 10.45 O +ATOM 2310 CB VAL A 310 -13.662 -16.470 -0.112 1.00 10.93 C +ATOM 2311 CG1 VAL A 310 -12.260 -15.881 -0.178 1.00 11.03 C +ATOM 2312 CG2 VAL A 310 -13.739 -17.536 0.975 1.00 10.98 C +ATOM 2313 N ILE A 311 -14.149 -13.087 -0.406 1.00 9.94 N +ATOM 2314 CA ILE A 311 -14.063 -11.877 -1.205 1.00 9.93 C +ATOM 2315 C ILE A 311 -12.602 -11.431 -1.258 1.00 9.70 C +ATOM 2316 O ILE A 311 -12.059 -11.001 -0.244 1.00 9.82 O +ATOM 2317 CB ILE A 311 -14.905 -10.764 -0.555 1.00 10.04 C +ATOM 2318 CG1 ILE A 311 -16.365 -11.216 -0.430 1.00 10.25 C +ATOM 2319 CG2 ILE A 311 -14.787 -9.464 -1.337 1.00 10.03 C +ATOM 2320 CD1 ILE A 311 -17.181 -10.389 0.539 1.00 10.37 C +ATOM 2321 N PRO A 312 -11.954 -11.552 -2.429 1.00 9.48 N +ATOM 2322 CA PRO A 312 -10.605 -11.010 -2.556 1.00 9.23 C +ATOM 2323 C PRO A 312 -10.578 -9.503 -2.375 1.00 8.83 C +ATOM 2324 O PRO A 312 -11.572 -8.825 -2.630 1.00 8.62 O +ATOM 2325 CB PRO A 312 -10.212 -11.370 -3.990 1.00 9.36 C +ATOM 2326 CG PRO A 312 -11.045 -12.551 -4.323 1.00 9.52 C +ATOM 2327 CD PRO A 312 -12.350 -12.309 -3.629 1.00 9.47 C +ATOM 2328 N ASN A 313 -9.438 -8.978 -1.945 1.00 8.73 N +ATOM 2329 CA ASN A 313 -9.298 -7.538 -1.839 1.00 8.57 C +ATOM 2330 C ASN A 313 -9.487 -6.897 -3.211 1.00 8.64 C +ATOM 2331 O ASN A 313 -9.157 -7.496 -4.234 1.00 8.57 O +ATOM 2332 CB ASN A 313 -7.933 -7.167 -1.257 1.00 8.52 C +ATOM 2333 CG ASN A 313 -7.884 -5.741 -0.768 1.00 8.61 C +ATOM 2334 OD1 ASN A 313 -8.888 -5.193 -0.321 1.00 8.50 O +ATOM 2335 ND2 ASN A 313 -6.713 -5.127 -0.853 1.00 8.60 N +ATOM 2336 N SER A 314 -10.042 -5.690 -3.227 1.00 8.58 N +ATOM 2337 CA SER A 314 -10.267 -4.969 -4.475 1.00 8.74 C +ATOM 2338 C SER A 314 -8.948 -4.573 -5.113 1.00 8.92 C +ATOM 2339 O SER A 314 -7.966 -4.286 -4.422 1.00 8.69 O +ATOM 2340 CB SER A 314 -11.111 -3.720 -4.233 1.00 8.80 C +ATOM 2341 OG SER A 314 -10.501 -2.878 -3.271 1.00 8.74 O +ATOM 2342 N GLN A 315 -8.944 -4.550 -6.440 1.00 9.30 N +ATOM 2343 CA GLN A 315 -7.812 -4.058 -7.202 1.00 9.76 C +ATOM 2344 C GLN A 315 -7.690 -2.557 -7.023 1.00 9.47 C +ATOM 2345 O GLN A 315 -8.691 -1.845 -6.994 1.00 9.07 O +ATOM 2346 CB GLN A 315 -7.995 -4.351 -8.694 1.00 10.40 C +ATOM 2347 CG GLN A 315 -8.045 -5.823 -9.061 1.00 11.22 C +ATOM 2348 CD GLN A 315 -6.751 -6.547 -8.767 1.00 12.01 C +ATOM 2349 OE1 GLN A 315 -5.662 -6.029 -9.022 1.00 13.22 O +ATOM 2350 NE2 GLN A 315 -6.862 -7.762 -8.233 1.00 12.76 N +ATOM 2351 N SER A 316 -6.456 -2.081 -6.907 1.00 9.27 N +ATOM 2352 CA SER A 316 -6.176 -0.664 -7.039 1.00 9.29 C +ATOM 2353 C SER A 316 -6.417 -0.280 -8.498 1.00 9.41 C +ATOM 2354 O SER A 316 -5.956 -0.971 -9.411 1.00 9.58 O +ATOM 2355 CB SER A 316 -4.728 -0.377 -6.643 1.00 9.13 C +ATOM 2356 OG SER A 316 -4.423 0.993 -6.812 1.00 9.02 O +ATOM 2357 N THR A 317 -7.174 0.792 -8.721 1.00 9.54 N +ATOM 2358 CA THR A 317 -7.533 1.216 -10.077 1.00 9.82 C +ATOM 2359 C THR A 317 -6.827 2.506 -10.477 1.00 10.06 C +ATOM 2360 O THR A 317 -7.022 3.006 -11.588 1.00 10.39 O +ATOM 2361 CB THR A 317 -9.052 1.444 -10.215 1.00 9.90 C +ATOM 2362 OG1 THR A 317 -9.428 2.612 -9.476 1.00 10.00 O +ATOM 2363 CG2 THR A 317 -9.839 0.251 -9.714 1.00 10.03 C +ATOM 2364 N ILE A 318 -6.007 3.043 -9.576 1.00 10.25 N +ATOM 2365 CA ILE A 318 -5.295 4.284 -9.844 1.00 10.37 C +ATOM 2366 C ILE A 318 -4.280 4.015 -10.950 1.00 10.58 C +ATOM 2367 O ILE A 318 -3.534 3.044 -10.876 1.00 10.55 O +ATOM 2368 CB ILE A 318 -4.528 4.797 -8.600 1.00 10.39 C +ATOM 2369 CG1 ILE A 318 -5.438 4.903 -7.364 1.00 10.51 C +ATOM 2370 CG2 ILE A 318 -3.860 6.135 -8.896 1.00 10.37 C +ATOM 2371 CD1 ILE A 318 -6.756 5.611 -7.595 1.00 10.59 C +ATOM 2372 N ALA A 319 -4.252 4.865 -11.971 1.00 10.84 N +ATOM 2373 CA ALA A 319 -3.280 4.710 -13.051 1.00 11.13 C +ATOM 2374 C ALA A 319 -1.865 4.754 -12.475 1.00 11.25 C +ATOM 2375 O ALA A 319 -1.498 5.703 -11.774 1.00 11.63 O +ATOM 2376 CB ALA A 319 -3.468 5.794 -14.101 1.00 11.16 C +ATOM 2377 N GLY A 320 -1.087 3.710 -12.750 1.00 11.29 N +ATOM 2378 CA GLY A 320 0.256 3.580 -12.204 1.00 11.31 C +ATOM 2379 C GLY A 320 0.353 2.770 -10.919 1.00 11.14 C +ATOM 2380 O GLY A 320 1.459 2.419 -10.511 1.00 11.39 O +ATOM 2381 N ILE A 321 -0.783 2.462 -10.287 1.00 10.90 N +ATOM 2382 CA ILE A 321 -0.809 1.633 -9.073 1.00 10.81 C +ATOM 2383 C ILE A 321 -1.760 0.451 -9.251 1.00 10.94 C +ATOM 2384 O ILE A 321 -2.970 0.574 -9.027 1.00 10.86 O +ATOM 2385 CB ILE A 321 -1.263 2.408 -7.813 1.00 10.45 C +ATOM 2386 CG1 ILE A 321 -0.656 3.816 -7.753 1.00 10.41 C +ATOM 2387 CG2 ILE A 321 -0.885 1.610 -6.569 1.00 10.45 C +ATOM 2388 CD1 ILE A 321 -1.303 4.693 -6.701 1.00 10.36 C +ATOM 2389 N SER A 322 -1.217 -0.696 -9.642 1.00 11.37 N +ATOM 2390 CA SER A 322 -2.036 -1.885 -9.872 1.00 11.64 C +ATOM 2391 C SER A 322 -1.932 -2.889 -8.726 1.00 11.26 C +ATOM 2392 O SER A 322 -1.084 -2.759 -7.838 1.00 11.50 O +ATOM 2393 CB SER A 322 -1.622 -2.563 -11.172 1.00 12.18 C +ATOM 2394 OG SER A 322 -0.275 -2.977 -11.090 1.00 13.16 O +ATOM 2395 N GLY A 323 -2.808 -3.887 -8.768 1.00 10.63 N +ATOM 2396 CA GLY A 323 -2.798 -4.997 -7.820 1.00 10.25 C +ATOM 2397 C GLY A 323 -3.709 -4.782 -6.630 1.00 9.74 C +ATOM 2398 O GLY A 323 -4.211 -3.683 -6.413 1.00 9.37 O +ATOM 2399 N ASN A 324 -3.901 -5.843 -5.852 1.00 9.22 N +ATOM 2400 CA ASN A 324 -4.782 -5.816 -4.690 1.00 8.95 C +ATOM 2401 C ASN A 324 -4.077 -6.209 -3.395 1.00 8.71 C +ATOM 2402 O ASN A 324 -4.715 -6.614 -2.436 1.00 8.66 O +ATOM 2403 CB ASN A 324 -5.999 -6.724 -4.922 1.00 9.02 C +ATOM 2404 CG ASN A 324 -5.660 -8.205 -4.861 1.00 9.09 C +ATOM 2405 OD1 ASN A 324 -4.503 -8.604 -4.969 1.00 9.45 O +ATOM 2406 ND2 ASN A 324 -6.681 -9.026 -4.696 1.00 9.20 N +ATOM 2407 N SER A 325 -2.761 -6.063 -3.361 1.00 8.59 N +ATOM 2408 CA SER A 325 -1.993 -6.456 -2.187 1.00 8.58 C +ATOM 2409 C SER A 325 -0.847 -5.490 -1.935 1.00 8.37 C +ATOM 2410 O SER A 325 -0.526 -4.660 -2.787 1.00 8.63 O +ATOM 2411 CB SER A 325 -1.465 -7.876 -2.355 1.00 8.84 C +ATOM 2412 OG SER A 325 -0.517 -7.934 -3.393 1.00 9.35 O +ATOM 2413 N ILE A 326 -0.241 -5.591 -0.758 1.00 8.05 N +ATOM 2414 CA ILE A 326 0.878 -4.720 -0.407 1.00 7.95 C +ATOM 2415 C ILE A 326 2.195 -5.434 -0.702 1.00 7.98 C +ATOM 2416 O ILE A 326 2.526 -6.442 -0.081 1.00 7.90 O +ATOM 2417 CB ILE A 326 0.796 -4.244 1.058 1.00 7.96 C +ATOM 2418 CG1 ILE A 326 -0.496 -3.441 1.262 1.00 7.92 C +ATOM 2419 CG2 ILE A 326 2.001 -3.384 1.415 1.00 8.00 C +ATOM 2420 CD1 ILE A 326 -0.765 -3.055 2.696 1.00 7.85 C +ATOM 2421 N THR A 327 2.931 -4.889 -1.667 1.00 8.13 N +ATOM 2422 CA THR A 327 4.188 -5.446 -2.149 1.00 8.35 C +ATOM 2423 C THR A 327 5.169 -4.304 -2.342 1.00 8.64 C +ATOM 2424 O THR A 327 4.780 -3.140 -2.302 1.00 8.27 O +ATOM 2425 CB THR A 327 4.022 -6.113 -3.527 1.00 8.28 C +ATOM 2426 OG1 THR A 327 3.626 -5.127 -4.490 1.00 8.31 O +ATOM 2427 CG2 THR A 327 2.991 -7.230 -3.488 1.00 8.32 C +ATOM 2428 N GLN A 328 6.431 -4.648 -2.578 1.00 9.32 N +ATOM 2429 CA GLN A 328 7.459 -3.667 -2.916 1.00 10.10 C +ATOM 2430 C GLN A 328 7.021 -2.763 -4.070 1.00 9.63 C +ATOM 2431 O GLN A 328 7.089 -1.530 -3.983 1.00 9.27 O +ATOM 2432 CB GLN A 328 8.744 -4.396 -3.314 1.00 11.08 C +ATOM 2433 CG GLN A 328 9.917 -3.487 -3.635 1.00 12.34 C +ATOM 2434 CD GLN A 328 10.417 -2.736 -2.427 1.00 13.37 C +ATOM 2435 OE1 GLN A 328 10.274 -3.198 -1.290 1.00 14.78 O +ATOM 2436 NE2 GLN A 328 11.020 -1.573 -2.659 1.00 14.64 N +ATOM 2437 N ASP A 329 6.562 -3.384 -5.150 1.00 9.33 N +ATOM 2438 CA ASP A 329 6.160 -2.645 -6.344 1.00 9.24 C +ATOM 2439 C ASP A 329 4.981 -1.726 -6.063 1.00 8.64 C +ATOM 2440 O ASP A 329 4.953 -0.587 -6.513 1.00 8.42 O +ATOM 2441 CB ASP A 329 5.791 -3.604 -7.478 1.00 9.67 C +ATOM 2442 CG ASP A 329 6.985 -4.357 -8.028 1.00 10.25 C +ATOM 2443 OD1 ASP A 329 8.130 -4.048 -7.641 1.00 10.66 O +ATOM 2444 OD2 ASP A 329 6.767 -5.268 -8.857 1.00 10.99 O +ATOM 2445 N TYR A 330 3.998 -2.225 -5.321 1.00 8.07 N +ATOM 2446 CA TYR A 330 2.844 -1.414 -4.959 1.00 7.73 C +ATOM 2447 C TYR A 330 3.255 -0.195 -4.140 1.00 7.53 C +ATOM 2448 O TYR A 330 2.820 0.918 -4.422 1.00 7.25 O +ATOM 2449 CB TYR A 330 1.837 -2.247 -4.165 1.00 7.60 C +ATOM 2450 CG TYR A 330 0.750 -1.421 -3.526 1.00 7.54 C +ATOM 2451 CD1 TYR A 330 -0.394 -1.075 -4.234 1.00 7.52 C +ATOM 2452 CD2 TYR A 330 0.869 -0.982 -2.212 1.00 7.41 C +ATOM 2453 CE1 TYR A 330 -1.387 -0.308 -3.652 1.00 7.48 C +ATOM 2454 CE2 TYR A 330 -0.114 -0.215 -1.622 1.00 7.40 C +ATOM 2455 CZ TYR A 330 -1.241 0.121 -2.340 1.00 7.43 C +ATOM 2456 OH TYR A 330 -2.220 0.881 -1.743 1.00 7.41 O +ATOM 2457 N CYX A 331 4.086 -0.406 -3.123 1.00 7.45 N +ATOM 2458 CA CYX A 331 4.450 0.688 -2.228 1.00 7.39 C +ATOM 2459 C CYX A 331 5.237 1.773 -2.952 1.00 7.37 C +ATOM 2460 O CYX A 331 4.983 2.962 -2.762 1.00 7.45 O +ATOM 2461 CB CYX A 331 5.229 0.164 -1.024 1.00 7.55 C +ATOM 2462 SG CYX A 331 4.213 -0.900 0.030 1.00 7.77 S +ATOM 2463 N THR A 332 6.187 1.362 -3.785 1.00 7.33 N +ATOM 2464 CA THR A 332 6.967 2.313 -4.562 1.00 7.31 C +ATOM 2465 C THR A 332 6.061 3.103 -5.500 1.00 7.44 C +ATOM 2466 O THR A 332 6.143 4.329 -5.566 1.00 7.62 O +ATOM 2467 CB THR A 332 8.061 1.598 -5.362 1.00 7.19 C +ATOM 2468 OG1 THR A 332 8.988 0.995 -4.454 1.00 7.09 O +ATOM 2469 CG2 THR A 332 8.803 2.574 -6.261 1.00 7.20 C +ATOM 2470 N ALA A 333 5.184 2.396 -6.202 1.00 7.56 N +ATOM 2471 CA ALA A 333 4.278 3.036 -7.149 1.00 7.92 C +ATOM 2472 C ALA A 333 3.329 3.998 -6.457 1.00 8.16 C +ATOM 2473 O ALA A 333 3.105 5.110 -6.926 1.00 8.23 O +ATOM 2474 CB ALA A 333 3.488 1.997 -7.912 1.00 7.84 C +ATOM 2475 N GLN A 334 2.759 3.559 -5.343 1.00 8.48 N +ATOM 2476 CA GLN A 334 1.755 4.353 -4.650 1.00 8.90 C +ATOM 2477 C GLN A 334 2.339 5.666 -4.122 1.00 8.99 C +ATOM 2478 O GLN A 334 1.726 6.733 -4.255 1.00 9.07 O +ATOM 2479 CB GLN A 334 1.134 3.516 -3.535 1.00 9.09 C +ATOM 2480 CG GLN A 334 -0.099 4.123 -2.900 1.00 9.29 C +ATOM 2481 CD GLN A 334 0.152 4.579 -1.485 1.00 9.61 C +ATOM 2482 OE1 GLN A 334 1.127 5.281 -1.207 1.00 9.70 O +ATOM 2483 NE2 GLN A 334 -0.732 4.191 -0.581 1.00 9.71 N +ATOM 2484 N LYS A 335 3.529 5.599 -3.537 1.00 9.18 N +ATOM 2485 CA LYS A 335 4.166 6.797 -3.003 1.00 9.50 C +ATOM 2486 C LYS A 335 4.556 7.749 -4.131 1.00 9.98 C +ATOM 2487 O LYS A 335 4.395 8.959 -4.001 1.00 10.38 O +ATOM 2488 CB LYS A 335 5.371 6.427 -2.135 1.00 9.35 C +ATOM 2489 CG LYS A 335 4.988 5.644 -0.885 1.00 9.32 C +ATOM 2490 CD LYS A 335 4.240 6.492 0.133 1.00 9.31 C +ATOM 2491 CE LYS A 335 3.725 5.641 1.286 1.00 9.27 C +ATOM 2492 NZ LYS A 335 2.898 6.419 2.249 1.00 9.34 N +ATOM 2493 N GLN A 336 5.039 7.203 -5.244 1.00 10.69 N +ATOM 2494 CA GLN A 336 5.368 8.029 -6.411 1.00 11.41 C +ATOM 2495 C GLN A 336 4.124 8.682 -7.010 1.00 10.98 C +ATOM 2496 O GLN A 336 4.108 9.884 -7.241 1.00 11.27 O +ATOM 2497 CB GLN A 336 6.102 7.217 -7.482 1.00 12.40 C +ATOM 2498 CG GLN A 336 7.543 6.855 -7.139 1.00 13.47 C +ATOM 2499 CD GLN A 336 8.378 8.051 -6.706 1.00 14.83 C +ATOM 2500 OE1 GLN A 336 8.471 9.055 -7.416 1.00 17.01 O +ATOM 2501 NE2 GLN A 336 8.981 7.951 -5.524 1.00 15.52 N +ATOM 2502 N VAL A 337 3.072 7.906 -7.234 1.00 10.33 N +ATOM 2503 CA VAL A 337 1.862 8.438 -7.867 1.00 10.03 C +ATOM 2504 C VAL A 337 1.107 9.420 -6.962 1.00 9.82 C +ATOM 2505 O VAL A 337 0.617 10.456 -7.433 1.00 10.07 O +ATOM 2506 CB VAL A 337 0.934 7.300 -8.335 1.00 9.99 C +ATOM 2507 CG1 VAL A 337 -0.398 7.842 -8.837 1.00 9.94 C +ATOM 2508 CG2 VAL A 337 1.617 6.480 -9.421 1.00 9.90 C +ATOM 2509 N PHE A 338 1.013 9.112 -5.670 1.00 9.59 N +ATOM 2510 CA PHE A 338 0.309 9.991 -4.733 1.00 9.65 C +ATOM 2511 C PHE A 338 1.175 11.182 -4.330 1.00 9.94 C +ATOM 2512 O PHE A 338 0.658 12.161 -3.792 1.00 10.59 O +ATOM 2513 CB PHE A 338 -0.124 9.236 -3.464 1.00 9.29 C +ATOM 2514 CG PHE A 338 -1.261 8.261 -3.661 1.00 9.06 C +ATOM 2515 CD1 PHE A 338 -2.007 8.215 -4.839 1.00 8.86 C +ATOM 2516 CD2 PHE A 338 -1.618 7.414 -2.622 1.00 8.90 C +ATOM 2517 CE1 PHE A 338 -3.059 7.323 -4.978 1.00 8.74 C +ATOM 2518 CE2 PHE A 338 -2.668 6.529 -2.755 1.00 8.82 C +ATOM 2519 CZ PHE A 338 -3.393 6.484 -3.933 1.00 8.75 C +ATOM 2520 N GLY A 339 2.481 11.094 -4.576 1.00 10.07 N +ATOM 2521 CA GLY A 339 3.411 12.159 -4.203 1.00 10.49 C +ATOM 2522 C GLY A 339 3.597 12.268 -2.701 1.00 10.78 C +ATOM 2523 O GLY A 339 3.736 13.367 -2.164 1.00 11.19 O +ATOM 2524 N ASP A 340 3.576 11.128 -2.016 1.00 11.13 N +ATOM 2525 CA ASP A 340 3.801 11.083 -0.577 1.00 11.58 C +ATOM 2526 C ASP A 340 5.232 10.626 -0.342 1.00 11.52 C +ATOM 2527 O ASP A 340 5.744 9.769 -1.066 1.00 11.71 O +ATOM 2528 CB ASP A 340 2.822 10.120 0.096 1.00 11.93 C +ATOM 2529 CG ASP A 340 1.377 10.590 0.017 1.00 12.44 C +ATOM 2530 OD1 ASP A 340 1.125 11.802 -0.160 1.00 13.34 O +ATOM 2531 OD2 ASP A 340 0.481 9.732 0.138 1.00 13.07 O +ATOM 2532 N THR A 341 5.877 11.204 0.667 1.00 11.44 N +ATOM 2533 CA THR A 341 7.256 10.880 0.983 1.00 11.62 C +ATOM 2534 C THR A 341 7.335 9.410 1.387 1.00 11.13 C +ATOM 2535 O THR A 341 6.541 8.952 2.204 1.00 11.12 O +ATOM 2536 CB THR A 341 7.773 11.759 2.138 1.00 11.88 C +ATOM 2537 OG1 THR A 341 7.573 13.141 1.811 1.00 13.09 O +ATOM 2538 CG2 THR A 341 9.253 11.487 2.413 1.00 11.99 C +ATOM 2539 N ASN A 342 8.283 8.673 0.816 1.00 10.73 N +ATOM 2540 CA ASN A 342 8.368 7.239 1.057 1.00 10.40 C +ATOM 2541 C ASN A 342 9.210 6.935 2.293 1.00 10.16 C +ATOM 2542 O ASN A 342 10.271 6.321 2.196 1.00 9.97 O +ATOM 2543 CB ASN A 342 8.920 6.506 -0.179 1.00 10.40 C +ATOM 2544 CG ASN A 342 8.558 5.028 -0.192 1.00 10.40 C +ATOM 2545 OD1 ASN A 342 8.204 4.445 0.840 1.00 9.98 O +ATOM 2546 ND2 ASN A 342 8.641 4.415 -1.363 1.00 10.51 N +ATOM 2547 N THR A 343 8.717 7.352 3.457 1.00 9.82 N +ATOM 2548 CA THR A 343 9.373 7.036 4.728 1.00 9.70 C +ATOM 2549 C THR A 343 9.290 5.538 5.031 1.00 9.31 C +ATOM 2550 O THR A 343 10.125 4.997 5.757 1.00 9.05 O +ATOM 2551 CB THR A 343 8.792 7.849 5.901 1.00 9.96 C +ATOM 2552 OG1 THR A 343 7.359 7.807 5.863 1.00 10.18 O +ATOM 2553 CG2 THR A 343 9.269 9.305 5.827 1.00 10.10 C +ATOM 2554 N TRP A 344 8.275 4.882 4.473 1.00 9.02 N +ATOM 2555 CA TRP A 344 8.174 3.426 4.507 1.00 9.01 C +ATOM 2556 C TRP A 344 9.467 2.778 4.013 1.00 9.46 C +ATOM 2557 O TRP A 344 10.079 1.966 4.707 1.00 9.06 O +ATOM 2558 CB TRP A 344 6.963 2.964 3.675 1.00 8.67 C +ATOM 2559 CG TRP A 344 6.995 1.531 3.274 1.00 8.52 C +ATOM 2560 CD1 TRP A 344 7.242 1.037 2.022 1.00 8.52 C +ATOM 2561 CD2 TRP A 344 6.784 0.395 4.118 1.00 8.39 C +ATOM 2562 NE1 TRP A 344 7.191 -0.332 2.038 1.00 8.48 N +ATOM 2563 CE2 TRP A 344 6.907 -0.755 3.309 1.00 8.39 C +ATOM 2564 CE3 TRP A 344 6.494 0.236 5.480 1.00 8.25 C +ATOM 2565 CZ2 TRP A 344 6.760 -2.051 3.816 1.00 8.29 C +ATOM 2566 CZ3 TRP A 344 6.349 -1.054 5.983 1.00 8.36 C +ATOM 2567 CH2 TRP A 344 6.485 -2.180 5.147 1.00 8.37 C +ATOM 2568 N GLU A 345 9.885 3.161 2.813 1.00 10.41 N +ATOM 2569 CA GLU A 345 11.116 2.639 2.233 1.00 11.67 C +ATOM 2570 C GLU A 345 12.349 3.139 3.006 1.00 11.65 C +ATOM 2571 O GLU A 345 13.285 2.370 3.268 1.00 11.25 O +ATOM 2572 CB GLU A 345 11.187 3.032 0.751 1.00 12.82 C +ATOM 2573 CG GLU A 345 12.464 2.636 0.019 1.00 14.09 C +ATOM 2574 CD GLU A 345 12.523 1.174 -0.386 1.00 15.25 C +ATOM 2575 OE1 GLU A 345 11.464 0.542 -0.622 1.00 15.76 O +ATOM 2576 OE2 GLU A 345 13.659 0.654 -0.503 1.00 16.71 O +ATOM 2577 N ASP A 346 12.343 4.413 3.388 1.00 11.65 N +ATOM 2578 CA ASP A 346 13.503 5.019 4.057 1.00 12.19 C +ATOM 2579 C ASP A 346 13.903 4.296 5.332 1.00 11.64 C +ATOM 2580 O ASP A 346 15.089 4.200 5.642 1.00 11.90 O +ATOM 2581 CB ASP A 346 13.245 6.483 4.411 1.00 13.21 C +ATOM 2582 CG ASP A 346 13.057 7.364 3.198 1.00 14.54 C +ATOM 2583 OD1 ASP A 346 13.457 6.958 2.083 1.00 16.16 O +ATOM 2584 OD2 ASP A 346 12.502 8.473 3.370 1.00 16.09 O +ATOM 2585 N HIS A 347 12.917 3.804 6.079 1.00 10.72 N +ATOM 2586 CA HIS A 347 13.193 3.152 7.363 1.00 10.18 C +ATOM 2587 C HIS A 347 13.172 1.625 7.289 1.00 9.81 C +ATOM 2588 O HIS A 347 13.075 0.958 8.319 1.00 9.87 O +ATOM 2589 CB HIS A 347 12.233 3.668 8.432 1.00 10.15 C +ATOM 2590 CG HIS A 347 12.337 5.141 8.662 1.00 10.24 C +ATOM 2591 ND1 HIS A 347 13.477 5.738 9.156 1.00 10.25 N +ATOM 2592 CD2 HIS A 347 11.456 6.141 8.435 1.00 10.29 C +ATOM 2593 CE1 HIS A 347 13.284 7.041 9.246 1.00 10.20 C +ATOM 2594 NE2 HIS A 347 12.066 7.312 8.813 1.00 10.22 N +ATOM 2595 N GLY A 348 13.283 1.078 6.080 1.00 9.30 N +ATOM 2596 CA GLY A 348 13.569 -0.346 5.898 1.00 9.11 C +ATOM 2597 C GLY A 348 12.449 -1.195 5.332 1.00 9.04 C +ATOM 2598 O GLY A 348 12.626 -2.395 5.143 1.00 8.95 O +ATOM 2599 N GLY A 349 11.303 -0.579 5.057 1.00 8.71 N +ATOM 2600 CA GLY A 349 10.177 -1.262 4.406 1.00 8.69 C +ATOM 2601 C GLY A 349 9.940 -2.691 4.869 1.00 8.70 C +ATOM 2602 O GLY A 349 9.760 -2.944 6.054 1.00 8.34 O +ATOM 2603 N PHE A 350 9.953 -3.625 3.920 1.00 8.81 N +ATOM 2604 CA PHE A 350 9.598 -5.010 4.191 1.00 9.14 C +ATOM 2605 C PHE A 350 10.599 -5.730 5.086 1.00 9.36 C +ATOM 2606 O PHE A 350 10.224 -6.625 5.844 1.00 9.24 O +ATOM 2607 CB PHE A 350 9.412 -5.771 2.882 1.00 9.21 C +ATOM 2608 CG PHE A 350 8.125 -5.451 2.195 1.00 9.26 C +ATOM 2609 CD1 PHE A 350 6.975 -6.167 2.494 1.00 9.46 C +ATOM 2610 CD2 PHE A 350 8.050 -4.418 1.279 1.00 9.31 C +ATOM 2611 CE1 PHE A 350 5.774 -5.864 1.879 1.00 9.50 C +ATOM 2612 CE2 PHE A 350 6.856 -4.111 0.662 1.00 9.38 C +ATOM 2613 CZ PHE A 350 5.717 -4.837 0.960 1.00 9.54 C +ATOM 2614 N GLN A 351 11.865 -5.340 5.014 1.00 9.73 N +ATOM 2615 CA GLN A 351 12.870 -5.937 5.886 1.00 10.19 C +ATOM 2616 C GLN A 351 12.648 -5.522 7.341 1.00 9.70 C +ATOM 2617 O GLN A 351 12.805 -6.317 8.276 1.00 9.14 O +ATOM 2618 CB GLN A 351 14.269 -5.532 5.433 1.00 11.08 C +ATOM 2619 CG GLN A 351 15.363 -6.367 6.053 1.00 12.13 C +ATOM 2620 CD GLN A 351 15.157 -7.850 5.812 1.00 13.13 C +ATOM 2621 OE1 GLN A 351 14.931 -8.283 4.676 1.00 14.78 O +ATOM 2622 NE2 GLN A 351 15.193 -8.632 6.883 1.00 14.06 N +ATOM 2623 N SER A 352 12.282 -4.260 7.525 1.00 9.16 N +ATOM 2624 CA SER A 352 11.934 -3.754 8.836 1.00 8.92 C +ATOM 2625 C SER A 352 10.762 -4.546 9.437 1.00 8.74 C +ATOM 2626 O SER A 352 10.812 -4.950 10.593 1.00 8.49 O +ATOM 2627 CB SER A 352 11.615 -2.257 8.757 1.00 8.91 C +ATOM 2628 OG SER A 352 11.336 -1.730 10.037 1.00 8.76 O +ATOM 2629 N AMET A 353 9.722 -4.782 8.645 0.75 8.69 N +ATOM 2630 CA AMET A 353 8.565 -5.515 9.147 0.75 8.78 C +ATOM 2631 C AMET A 353 8.909 -6.980 9.421 0.75 8.56 C +ATOM 2632 O AMET A 353 8.403 -7.572 10.377 0.75 8.39 O +ATOM 2633 CB AMET A 353 7.380 -5.404 8.183 0.75 9.08 C +ATOM 2634 CG AMET A 353 6.065 -5.901 8.772 0.75 9.25 C +ATOM 2635 SD AMET A 353 5.627 -5.154 10.361 0.75 9.82 S +ATOM 2636 CE AMET A 353 5.492 -3.437 9.883 0.75 9.58 C +ATOM 2637 N THR A 354 9.774 -7.560 8.590 1.00 8.33 N +ATOM 2638 CA THR A 354 10.286 -8.907 8.840 1.00 8.37 C +ATOM 2639 C THR A 354 10.981 -8.972 10.201 1.00 8.51 C +ATOM 2640 O THR A 354 10.735 -9.877 10.990 1.00 8.37 O +ATOM 2641 CB THR A 354 11.282 -9.333 7.752 1.00 8.26 C +ATOM 2642 OG1 THR A 354 10.624 -9.341 6.482 1.00 8.19 O +ATOM 2643 CG2 THR A 354 11.854 -10.717 8.043 1.00 8.34 C +ATOM 2644 N ASN A 355 11.833 -7.993 10.484 1.00 8.71 N +ATOM 2645 CA ASN A 355 12.548 -7.966 11.755 1.00 9.01 C +ATOM 2646 C ASN A 355 11.625 -7.693 12.946 1.00 8.88 C +ATOM 2647 O ASN A 355 11.864 -8.199 14.040 1.00 8.90 O +ATOM 2648 CB ASN A 355 13.702 -6.962 11.685 1.00 9.58 C +ATOM 2649 CG ASN A 355 14.757 -7.372 10.670 1.00 10.08 C +ATOM 2650 OD1 ASN A 355 14.787 -8.521 10.227 1.00 11.39 O +ATOM 2651 ND2 ASN A 355 15.609 -6.442 10.291 1.00 10.49 N +ATOM 2652 N ALA A 356 10.566 -6.910 12.729 1.00 8.75 N +ATOM 2653 CA ALA A 356 9.549 -6.698 13.764 1.00 8.65 C +ATOM 2654 C ALA A 356 8.839 -8.005 14.141 1.00 8.67 C +ATOM 2655 O ALA A 356 8.633 -8.286 15.328 1.00 8.33 O +ATOM 2656 CB ALA A 356 8.543 -5.650 13.312 1.00 8.68 C +ATOM 2657 N PHE A 357 8.496 -8.809 13.140 1.00 8.86 N +ATOM 2658 CA PHE A 357 7.883 -10.111 13.396 1.00 9.25 C +ATOM 2659 C PHE A 357 8.835 -11.037 14.136 1.00 9.57 C +ATOM 2660 O PHE A 357 8.431 -11.748 15.056 1.00 9.41 O +ATOM 2661 CB PHE A 357 7.441 -10.784 12.096 1.00 9.36 C +ATOM 2662 CG PHE A 357 6.072 -10.368 11.612 1.00 9.63 C +ATOM 2663 CD1 PHE A 357 4.989 -10.294 12.483 1.00 9.91 C +ATOM 2664 CD2 PHE A 357 5.856 -10.095 10.270 1.00 9.88 C +ATOM 2665 CE1 PHE A 357 3.727 -9.931 12.024 1.00 10.10 C +ATOM 2666 CE2 PHE A 357 4.599 -9.739 9.809 1.00 10.04 C +ATOM 2667 CZ PHE A 357 3.535 -9.654 10.686 1.00 10.16 C +ATOM 2668 N LYS A 358 10.102 -11.025 13.741 1.00 10.05 N +ATOM 2669 CA LYS A 358 11.100 -11.845 14.410 1.00 10.74 C +ATOM 2670 C LYS A 358 11.297 -11.448 15.871 1.00 10.55 C +ATOM 2671 O LYS A 358 11.554 -12.311 16.711 1.00 11.28 O +ATOM 2672 CB LYS A 358 12.418 -11.809 13.647 1.00 11.22 C +ATOM 2673 CG LYS A 358 12.344 -12.564 12.330 1.00 11.88 C +ATOM 2674 CD LYS A 358 13.664 -12.537 11.587 1.00 12.76 C +ATOM 2675 CE LYS A 358 13.574 -13.253 10.256 1.00 13.39 C +ATOM 2676 NZ LYS A 358 14.915 -13.325 9.613 1.00 14.11 N +ATOM 2677 N ALA A 359 11.168 -10.155 16.166 1.00 10.35 N +ATOM 2678 CA ALA A 359 11.242 -9.647 17.541 1.00 10.19 C +ATOM 2679 C ALA A 359 10.051 -10.117 18.378 1.00 10.04 C +ATOM 2680 O ALA A 359 10.172 -10.329 19.587 1.00 10.28 O +ATOM 2681 CB ALA A 359 11.316 -8.126 17.542 1.00 10.30 C +ATOM 2682 N GLY A 360 8.901 -10.266 17.728 1.00 9.63 N +ATOM 2683 CA GLY A 360 7.677 -10.676 18.387 1.00 9.34 C +ATOM 2684 C GLY A 360 6.764 -9.476 18.534 1.00 9.04 C +ATOM 2685 O GLY A 360 7.131 -8.482 19.164 1.00 9.23 O +ATOM 2686 N AMET A 361 5.578 -9.587 17.941 0.60 8.60 N +ATOM 2687 CA AMET A 361 4.566 -8.535 17.937 0.60 8.42 C +ATOM 2688 C AMET A 361 3.518 -8.769 19.017 0.60 8.16 C +ATOM 2689 O AMET A 361 3.060 -9.895 19.198 0.60 8.09 O +ATOM 2690 CB AMET A 361 3.848 -8.532 16.586 0.60 8.43 C +ATOM 2691 CG AMET A 361 4.682 -8.079 15.399 0.60 8.41 C +ATOM 2692 SD AMET A 361 4.971 -6.304 15.427 0.60 8.38 S +ATOM 2693 CE AMET A 361 4.804 -5.887 13.697 0.60 8.43 C +ATOM 2694 N VAL A 362 3.119 -7.702 19.707 1.00 7.89 N +ATOM 2695 CA VAL A 362 1.996 -7.752 20.642 1.00 7.57 C +ATOM 2696 C VAL A 362 0.733 -7.276 19.916 1.00 7.25 C +ATOM 2697 O VAL A 362 0.783 -6.304 19.157 1.00 7.16 O +ATOM 2698 CB VAL A 362 2.278 -6.852 21.862 1.00 7.56 C +ATOM 2699 CG1 VAL A 362 1.051 -6.721 22.761 1.00 7.61 C +ATOM 2700 CG2 VAL A 362 3.477 -7.386 22.631 1.00 7.58 C +ATOM 2701 N LEU A 363 -0.393 -7.955 20.156 1.00 6.92 N +ATOM 2702 CA LEU A 363 -1.671 -7.597 19.545 1.00 6.85 C +ATOM 2703 C LEU A 363 -2.347 -6.497 20.353 1.00 6.66 C +ATOM 2704 O LEU A 363 -2.520 -6.618 21.572 1.00 6.41 O +ATOM 2705 CB LEU A 363 -2.590 -8.820 19.465 1.00 6.87 C +ATOM 2706 CG LEU A 363 -3.994 -8.596 18.887 1.00 7.01 C +ATOM 2707 CD1 LEU A 363 -3.918 -8.138 17.440 1.00 7.11 C +ATOM 2708 CD2 LEU A 363 -4.813 -9.873 19.007 1.00 7.11 C +ATOM 2709 N VAL A 364 -2.720 -5.428 19.661 1.00 6.65 N +ATOM 2710 CA VAL A 364 -3.393 -4.283 20.249 1.00 6.77 C +ATOM 2711 C VAL A 364 -4.792 -4.193 19.666 1.00 6.92 C +ATOM 2712 O VAL A 364 -4.958 -4.298 18.450 1.00 6.68 O +ATOM 2713 CB VAL A 364 -2.652 -2.978 19.903 1.00 6.71 C +ATOM 2714 CG1 VAL A 364 -3.226 -1.804 20.688 1.00 6.77 C +ATOM 2715 CG2 VAL A 364 -1.156 -3.127 20.142 1.00 6.67 C +ATOM 2716 N MET A 365 -5.787 -4.003 20.527 1.00 7.28 N +ATOM 2717 CA MET A 365 -7.161 -3.766 20.087 1.00 7.78 C +ATOM 2718 C MET A 365 -7.673 -2.510 20.761 1.00 7.64 C +ATOM 2719 O MET A 365 -7.673 -2.420 21.984 1.00 7.46 O +ATOM 2720 CB MET A 365 -8.033 -4.973 20.404 1.00 8.53 C +ATOM 2721 CG MET A 365 -7.708 -6.153 19.502 1.00 9.12 C +ATOM 2722 SD MET A 365 -8.514 -7.688 19.961 1.00 10.75 S +ATOM 2723 CE MET A 365 -7.561 -8.132 21.398 1.00 10.30 C +ATOM 2724 N SER A 366 -8.094 -1.536 19.958 1.00 7.70 N +ATOM 2725 CA SER A 366 -8.402 -0.212 20.469 1.00 7.69 C +ATOM 2726 C SER A 366 -9.626 0.381 19.783 1.00 7.72 C +ATOM 2727 O SER A 366 -10.071 -0.101 18.741 1.00 7.71 O +ATOM 2728 CB SER A 366 -7.202 0.711 20.253 1.00 7.88 C +ATOM 2729 OG SER A 366 -7.042 0.987 18.874 1.00 8.32 O +ATOM 2730 N LEU A 367 -10.168 1.423 20.403 1.00 7.70 N +ATOM 2731 CA LEU A 367 -11.228 2.230 19.825 1.00 7.85 C +ATOM 2732 C LEU A 367 -10.918 3.676 20.174 1.00 8.09 C +ATOM 2733 O LEU A 367 -10.728 4.007 21.344 1.00 8.00 O +ATOM 2734 CB LEU A 367 -12.589 1.821 20.397 1.00 7.79 C +ATOM 2735 CG LEU A 367 -13.794 2.629 19.900 1.00 7.83 C +ATOM 2736 CD1 LEU A 367 -13.916 2.549 18.383 1.00 7.94 C +ATOM 2737 CD2 LEU A 367 -15.075 2.160 20.576 1.00 7.92 C +ATOM 2738 N TRP A 368 -10.844 4.541 19.169 1.00 8.37 N +ATOM 2739 CA TRP A 368 -10.412 5.907 19.407 1.00 8.85 C +ATOM 2740 C TRP A 368 -10.989 6.919 18.438 1.00 9.13 C +ATOM 2741 O TRP A 368 -11.399 6.581 17.326 1.00 8.75 O +ATOM 2742 CB TRP A 368 -8.881 5.991 19.404 1.00 8.98 C +ATOM 2743 CG TRP A 368 -8.177 5.528 18.141 1.00 9.28 C +ATOM 2744 CD1 TRP A 368 -8.118 4.255 17.649 1.00 9.59 C +ATOM 2745 CD2 TRP A 368 -7.383 6.333 17.256 1.00 9.46 C +ATOM 2746 NE1 TRP A 368 -7.363 4.224 16.505 1.00 9.70 N +ATOM 2747 CE2 TRP A 368 -6.899 5.485 16.242 1.00 9.62 C +ATOM 2748 CE3 TRP A 368 -7.050 7.691 17.215 1.00 9.54 C +ATOM 2749 CZ2 TRP A 368 -6.092 5.949 15.200 1.00 9.63 C +ATOM 2750 CZ3 TRP A 368 -6.244 8.150 16.179 1.00 9.59 C +ATOM 2751 CH2 TRP A 368 -5.780 7.281 15.188 1.00 9.66 C +ATOM 2752 N ASP A 369 -11.042 8.166 18.900 1.00 9.54 N +ATOM 2753 CA ASP A 369 -11.200 9.314 18.012 1.00 10.11 C +ATOM 2754 C ASP A 369 -9.885 10.080 17.948 1.00 10.27 C +ATOM 2755 O ASP A 369 -8.974 9.843 18.742 1.00 10.34 O +ATOM 2756 CB ASP A 369 -12.405 10.192 18.383 1.00 10.34 C +ATOM 2757 CG ASP A 369 -12.330 10.798 19.778 1.00 10.59 C +ATOM 2758 OD1 ASP A 369 -11.427 10.474 20.572 1.00 10.90 O +ATOM 2759 OD2 ASP A 369 -13.222 11.615 20.078 1.00 11.11 O +ATOM 2760 N ASP A 370 -9.781 10.976 16.974 1.00 10.77 N +ATOM 2761 CA ASP A 370 -8.497 11.511 16.546 1.00 11.21 C +ATOM 2762 C ASP A 370 -8.451 13.014 16.788 1.00 11.98 C +ATOM 2763 O ASP A 370 -9.022 13.800 16.033 1.00 11.56 O +ATOM 2764 CB ASP A 370 -8.306 11.154 15.068 1.00 11.13 C +ATOM 2765 CG ASP A 370 -7.059 11.753 14.446 1.00 11.15 C +ATOM 2766 OD1 ASP A 370 -6.199 12.324 15.153 1.00 11.38 O +ATOM 2767 OD2 ASP A 370 -6.944 11.649 13.207 1.00 11.02 O +ATOM 2768 N TYR A 371 -7.754 13.396 17.854 1.00 13.10 N +ATOM 2769 CA TYR A 371 -7.654 14.796 18.248 1.00 14.18 C +ATOM 2770 C TYR A 371 -6.694 15.597 17.354 1.00 14.81 C +ATOM 2771 O TYR A 371 -6.694 16.829 17.402 1.00 15.18 O +ATOM 2772 CB TYR A 371 -7.250 14.903 19.725 1.00 14.60 C +ATOM 2773 CG TYR A 371 -8.406 14.749 20.692 1.00 15.21 C +ATOM 2774 CD1 TYR A 371 -8.998 13.511 20.915 1.00 15.41 C +ATOM 2775 CD2 TYR A 371 -8.915 15.851 21.375 1.00 15.48 C +ATOM 2776 CE1 TYR A 371 -10.063 13.374 21.793 1.00 15.82 C +ATOM 2777 CE2 TYR A 371 -9.977 15.724 22.253 1.00 15.78 C +ATOM 2778 CZ TYR A 371 -10.546 14.487 22.461 1.00 15.98 C +ATOM 2779 OH TYR A 371 -11.602 14.367 23.335 1.00 16.81 O +ATOM 2780 N TYR A 372 -5.895 14.909 16.535 1.00 15.55 N +ATOM 2781 CA TYR A 372 -4.985 15.575 15.602 1.00 16.48 C +ATOM 2782 C TYR A 372 -5.673 15.921 14.280 1.00 15.40 C +ATOM 2783 O TYR A 372 -5.688 17.080 13.869 1.00 15.90 O +ATOM 2784 CB TYR A 372 -3.750 14.704 15.343 1.00 18.18 C +ATOM 2785 CG TYR A 372 -2.812 15.251 14.285 1.00 20.45 C +ATOM 2786 CD1 TYR A 372 -2.100 16.434 14.496 1.00 21.69 C +ATOM 2787 CD2 TYR A 372 -2.622 14.578 13.078 1.00 21.58 C +ATOM 2788 CE1 TYR A 372 -1.234 16.930 13.528 1.00 22.81 C +ATOM 2789 CE2 TYR A 372 -1.762 15.068 12.108 1.00 22.77 C +ATOM 2790 CZ TYR A 372 -1.072 16.244 12.334 1.00 23.23 C +ATOM 2791 OH TYR A 372 -0.216 16.727 11.366 1.00 25.63 O +ATOM 2792 N ALA A 373 -6.240 14.912 13.618 1.00 13.99 N +ATOM 2793 CA ALA A 373 -6.768 15.083 12.258 1.00 12.98 C +ATOM 2794 C ALA A 373 -8.194 14.563 12.028 1.00 12.00 C +ATOM 2795 O ALA A 373 -8.608 14.385 10.879 1.00 11.47 O +ATOM 2796 CB ALA A 373 -5.806 14.461 11.258 1.00 13.13 C +ATOM 2797 N ASP A 374 -8.938 14.331 13.110 1.00 11.51 N +ATOM 2798 CA ASP A 374 -10.367 13.998 13.044 1.00 11.23 C +ATOM 2799 C ASP A 374 -10.670 12.735 12.223 1.00 10.23 C +ATOM 2800 O ASP A 374 -11.785 12.555 11.743 1.00 9.95 O +ATOM 2801 CB ASP A 374 -11.173 15.189 12.501 1.00 11.92 C +ATOM 2802 CG ASP A 374 -10.975 16.462 13.318 1.00 12.51 C +ATOM 2803 OD1 ASP A 374 -10.584 16.381 14.499 1.00 13.41 O +ATOM 2804 OD2 ASP A 374 -11.220 17.558 12.772 1.00 14.11 O +ATOM 2805 N MET A 375 -9.662 11.877 12.083 1.00 9.51 N +ATOM 2806 CA MET A 375 -9.744 10.628 11.332 1.00 8.92 C +ATOM 2807 C MET A 375 -9.963 10.861 9.836 1.00 8.66 C +ATOM 2808 O MET A 375 -10.347 9.945 9.109 1.00 8.50 O +ATOM 2809 CB MET A 375 -10.826 9.705 11.903 1.00 8.79 C +ATOM 2810 CG MET A 375 -10.396 8.245 11.946 1.00 8.60 C +ATOM 2811 SD MET A 375 -9.077 7.947 13.142 1.00 8.40 S +ATOM 2812 CE MET A 375 -9.985 8.096 14.682 1.00 8.40 C +ATOM 2813 N LEU A 376 -9.669 12.073 9.371 1.00 8.55 N +ATOM 2814 CA LEU A 376 -9.959 12.443 7.987 1.00 8.48 C +ATOM 2815 C LEU A 376 -9.067 11.705 7.002 1.00 8.45 C +ATOM 2816 O LEU A 376 -9.482 11.410 5.878 1.00 8.49 O +ATOM 2817 CB LEU A 376 -9.829 13.955 7.797 1.00 8.58 C +ATOM 2818 CG LEU A 376 -10.868 14.790 8.547 1.00 8.68 C +ATOM 2819 CD1 LEU A 376 -10.397 16.234 8.607 1.00 8.90 C +ATOM 2820 CD2 LEU A 376 -12.257 14.695 7.922 1.00 8.78 C +ATOM 2821 N TRP A 377 -7.848 11.406 7.434 1.00 8.40 N +ATOM 2822 CA TRP A 377 -6.920 10.565 6.671 1.00 8.34 C +ATOM 2823 C TRP A 377 -7.502 9.169 6.348 1.00 8.11 C +ATOM 2824 O TRP A 377 -7.102 8.538 5.363 1.00 8.03 O +ATOM 2825 CB TRP A 377 -5.601 10.428 7.439 1.00 8.63 C +ATOM 2826 CG TRP A 377 -5.783 9.879 8.820 1.00 8.96 C +ATOM 2827 CD1 TRP A 377 -5.993 10.587 9.967 1.00 9.23 C +ATOM 2828 CD2 TRP A 377 -5.807 8.501 9.189 1.00 9.21 C +ATOM 2829 NE1 TRP A 377 -6.146 9.730 11.031 1.00 9.26 N +ATOM 2830 CE2 TRP A 377 -6.026 8.442 10.579 1.00 9.40 C +ATOM 2831 CE3 TRP A 377 -5.658 7.307 8.477 1.00 9.40 C +ATOM 2832 CZ2 TRP A 377 -6.098 7.231 11.271 1.00 9.35 C +ATOM 2833 CZ3 TRP A 377 -5.733 6.107 9.165 1.00 9.48 C +ATOM 2834 CH2 TRP A 377 -5.946 6.080 10.545 1.00 9.45 C +ATOM 2835 N LEU A 378 -8.424 8.689 7.183 1.00 7.82 N +ATOM 2836 CA LEU A 378 -9.068 7.392 6.973 1.00 7.73 C +ATOM 2837 C LEU A 378 -10.313 7.477 6.109 1.00 7.81 C +ATOM 2838 O LEU A 378 -10.523 6.616 5.253 1.00 7.68 O +ATOM 2839 CB LEU A 378 -9.435 6.746 8.317 1.00 7.74 C +ATOM 2840 CG LEU A 378 -10.076 5.350 8.285 1.00 7.74 C +ATOM 2841 CD1 LEU A 378 -9.172 4.346 7.580 1.00 7.81 C +ATOM 2842 CD2 LEU A 378 -10.429 4.889 9.698 1.00 7.77 C +ATOM 2843 N ASP A 379 -11.156 8.483 6.344 1.00 7.94 N +ATOM 2844 CA ASP A 379 -12.518 8.435 5.809 1.00 8.11 C +ATOM 2845 C ASP A 379 -13.040 9.688 5.097 1.00 8.25 C +ATOM 2846 O ASP A 379 -14.209 9.723 4.727 1.00 8.30 O +ATOM 2847 CB ASP A 379 -13.499 7.998 6.918 1.00 8.18 C +ATOM 2848 CG ASP A 379 -13.569 8.978 8.087 1.00 8.26 C +ATOM 2849 OD1 ASP A 379 -13.313 10.186 7.883 1.00 8.29 O +ATOM 2850 OD2 ASP A 379 -13.913 8.533 9.211 1.00 8.15 O +ATOM 2851 N SER A 380 -12.196 10.694 4.885 1.00 8.56 N +ATOM 2852 CA SER A 380 -12.671 11.955 4.314 1.00 8.84 C +ATOM 2853 C SER A 380 -12.770 11.913 2.792 1.00 9.09 C +ATOM 2854 O SER A 380 -11.968 11.267 2.121 1.00 9.07 O +ATOM 2855 CB SER A 380 -11.760 13.117 4.713 1.00 8.98 C +ATOM 2856 OG SER A 380 -12.303 14.364 4.286 1.00 9.31 O +ATOM 2857 N VAL A 381 -13.746 12.643 2.256 1.00 9.29 N +ATOM 2858 CA VAL A 381 -13.788 12.934 0.821 1.00 9.64 C +ATOM 2859 C VAL A 381 -12.507 13.627 0.346 1.00 9.74 C +ATOM 2860 O VAL A 381 -12.168 13.564 -0.841 1.00 10.12 O +ATOM 2861 CB VAL A 381 -15.019 13.785 0.421 1.00 9.68 C +ATOM 2862 CG1 VAL A 381 -16.310 13.039 0.723 1.00 9.84 C +ATOM 2863 CG2 VAL A 381 -15.001 15.155 1.095 1.00 9.74 C +ATOM 2864 N ALA A 382 -11.795 14.286 1.258 1.00 10.00 N +ATOM 2865 CA ALA A 382 -10.496 14.860 0.938 1.00 10.37 C +ATOM 2866 C ALA A 382 -9.593 15.001 2.166 1.00 10.68 C +ATOM 2867 O ALA A 382 -9.991 15.577 3.179 1.00 10.64 O +ATOM 2868 CB ALA A 382 -10.689 16.216 0.271 1.00 10.38 C +ATOM 2869 N TYR A 383 -8.371 14.477 2.063 1.00 11.11 N +ATOM 2870 CA TYR A 383 -7.327 14.761 3.043 1.00 11.97 C +ATOM 2871 C TYR A 383 -5.998 15.015 2.318 1.00 12.42 C +ATOM 2872 O TYR A 383 -5.585 14.187 1.512 1.00 12.73 O +ATOM 2873 CB TYR A 383 -7.164 13.624 4.058 1.00 12.02 C +ATOM 2874 CG TYR A 383 -6.252 14.017 5.206 1.00 12.18 C +ATOM 2875 CD1 TYR A 383 -6.708 14.852 6.221 1.00 12.41 C +ATOM 2876 CD2 TYR A 383 -4.927 13.589 5.256 1.00 12.50 C +ATOM 2877 CE1 TYR A 383 -5.882 15.236 7.264 1.00 12.80 C +ATOM 2878 CE2 TYR A 383 -4.093 13.966 6.297 1.00 12.72 C +ATOM 2879 CZ TYR A 383 -4.572 14.789 7.297 1.00 13.00 C +ATOM 2880 OH TYR A 383 -3.751 15.177 8.339 1.00 14.02 O +ATOM 2881 N PRO A 384 -5.345 16.155 2.568 1.00 13.71 N +ATOM 2882 CA PRO A 384 -5.854 17.225 3.433 1.00 14.02 C +ATOM 2883 C PRO A 384 -7.162 17.828 2.911 1.00 14.13 C +ATOM 2884 O PRO A 384 -7.496 17.657 1.736 1.00 13.86 O +ATOM 2885 CB PRO A 384 -4.718 18.260 3.432 1.00 14.29 C +ATOM 2886 CG PRO A 384 -3.865 17.925 2.263 1.00 14.31 C +ATOM 2887 CD PRO A 384 -3.994 16.449 2.060 1.00 14.10 C +ATOM 2888 N THR A 385 -7.895 18.511 3.786 1.00 14.80 N +ATOM 2889 CA THR A 385 -9.260 18.947 3.470 1.00 15.32 C +ATOM 2890 C THR A 385 -9.327 19.995 2.362 1.00 16.05 C +ATOM 2891 O THR A 385 -10.378 20.166 1.742 1.00 16.15 O +ATOM 2892 CB THR A 385 -9.992 19.491 4.711 1.00 15.67 C +ATOM 2893 OG1 THR A 385 -9.245 20.572 5.278 1.00 15.96 O +ATOM 2894 CG2 THR A 385 -10.180 18.390 5.738 1.00 15.63 C +ATOM 2895 N ASP A 386 -8.213 20.684 2.121 1.00 16.84 N +ATOM 2896 CA ASP A 386 -8.124 21.704 1.071 1.00 17.68 C +ATOM 2897 C ASP A 386 -7.555 21.183 -0.259 1.00 17.58 C +ATOM 2898 O ASP A 386 -7.390 21.954 -1.203 1.00 16.98 O +ATOM 2899 CB ASP A 386 -7.300 22.905 1.566 1.00 18.69 C +ATOM 2900 CG ASP A 386 -5.866 22.539 1.944 1.00 19.74 C +ATOM 2901 OD1 ASP A 386 -5.548 21.338 2.030 1.00 20.80 O +ATOM 2902 OD2 ASP A 386 -5.046 23.461 2.162 1.00 21.54 O +ATOM 2903 N ALA A 387 -7.255 19.885 -0.334 1.00 17.44 N +ATOM 2904 CA ALA A 387 -6.704 19.295 -1.548 1.00 17.94 C +ATOM 2905 C ALA A 387 -7.814 18.914 -2.514 1.00 18.53 C +ATOM 2906 O ALA A 387 -8.968 18.750 -2.119 1.00 18.47 O +ATOM 2907 CB ALA A 387 -5.859 18.078 -1.209 1.00 17.87 C +ATOM 2908 N ASP A 388 -7.445 18.760 -3.780 1.00 19.77 N +ATOM 2909 CA ASP A 388 -8.382 18.427 -4.844 1.00 20.81 C +ATOM 2910 C ASP A 388 -8.605 16.911 -4.894 1.00 20.98 C +ATOM 2911 O ASP A 388 -7.650 16.170 -5.103 1.00 19.85 O +ATOM 2912 CB ASP A 388 -7.800 18.914 -6.174 1.00 21.67 C +ATOM 2913 CG ASP A 388 -8.798 18.861 -7.318 1.00 22.73 C +ATOM 2914 OD1 ASP A 388 -9.870 18.227 -7.181 1.00 23.75 O +ATOM 2915 OD2 ASP A 388 -8.493 19.459 -8.369 1.00 24.40 O +ATOM 2916 N PRO A 389 -9.861 16.442 -4.719 1.00 21.56 N +ATOM 2917 CA PRO A 389 -10.134 15.000 -4.854 1.00 21.53 C +ATOM 2918 C PRO A 389 -9.790 14.399 -6.228 1.00 21.47 C +ATOM 2919 O PRO A 389 -9.615 13.182 -6.330 1.00 22.07 O +ATOM 2920 CB PRO A 389 -11.642 14.897 -4.587 1.00 22.05 C +ATOM 2921 CG PRO A 389 -11.965 16.094 -3.770 1.00 21.99 C +ATOM 2922 CD PRO A 389 -11.061 17.178 -4.276 1.00 21.98 C +ATOM 2923 N SER A 390 -9.694 15.240 -7.261 1.00 20.45 N +ATOM 2924 CA SER A 390 -9.184 14.821 -8.577 1.00 20.01 C +ATOM 2925 C SER A 390 -7.731 14.363 -8.539 1.00 18.65 C +ATOM 2926 O SER A 390 -7.275 13.669 -9.449 1.00 18.69 O +ATOM 2927 CB SER A 390 -9.289 15.960 -9.595 1.00 20.96 C +ATOM 2928 OG SER A 390 -10.629 16.198 -9.959 1.00 22.09 O +ATOM 2929 N THR A 391 -6.993 14.793 -7.523 1.00 16.62 N +ATOM 2930 CA THR A 391 -5.622 14.356 -7.338 1.00 15.57 C +ATOM 2931 C THR A 391 -5.645 12.966 -6.710 1.00 14.26 C +ATOM 2932 O THR A 391 -6.258 12.779 -5.660 1.00 13.80 O +ATOM 2933 CB THR A 391 -4.856 15.318 -6.419 1.00 15.74 C +ATOM 2934 OG1 THR A 391 -4.940 16.648 -6.946 1.00 16.52 O +ATOM 2935 CG2 THR A 391 -3.396 14.906 -6.300 1.00 15.90 C +ATOM 2936 N PRO A 392 -4.994 11.982 -7.353 1.00 13.36 N +ATOM 2937 CA PRO A 392 -4.949 10.644 -6.770 1.00 12.79 C +ATOM 2938 C PRO A 392 -4.384 10.637 -5.350 1.00 11.87 C +ATOM 2939 O PRO A 392 -3.361 11.274 -5.089 1.00 11.65 O +ATOM 2940 CB PRO A 392 -4.019 9.884 -7.712 1.00 13.12 C +ATOM 2941 CG PRO A 392 -4.187 10.567 -9.027 1.00 13.40 C +ATOM 2942 CD PRO A 392 -4.364 12.017 -8.686 1.00 13.33 C +ATOM 2943 N GLY A 393 -5.060 9.924 -4.452 1.00 11.16 N +ATOM 2944 CA GLY A 393 -4.623 9.784 -3.066 1.00 10.67 C +ATOM 2945 C GLY A 393 -5.300 10.718 -2.082 1.00 10.35 C +ATOM 2946 O GLY A 393 -5.155 10.554 -0.869 1.00 10.14 O +ATOM 2947 N VAL A 394 -6.040 11.698 -2.588 1.00 9.93 N +ATOM 2948 CA VAL A 394 -6.681 12.684 -1.722 1.00 9.69 C +ATOM 2949 C VAL A 394 -7.960 12.149 -1.059 1.00 9.46 C +ATOM 2950 O VAL A 394 -8.145 12.334 0.145 1.00 9.40 O +ATOM 2951 CB VAL A 394 -6.951 13.999 -2.493 1.00 9.62 C +ATOM 2952 CG1 VAL A 394 -7.921 14.901 -1.735 1.00 9.56 C +ATOM 2953 CG2 VAL A 394 -5.634 14.720 -2.745 1.00 9.68 C +ATOM 2954 N ALA A 395 -8.836 11.497 -1.824 1.00 9.42 N +ATOM 2955 CA ALA A 395 -10.094 10.958 -1.283 1.00 9.34 C +ATOM 2956 C ALA A 395 -9.871 9.616 -0.588 1.00 9.16 C +ATOM 2957 O ALA A 395 -9.215 8.732 -1.141 1.00 9.52 O +ATOM 2958 CB ALA A 395 -11.132 10.808 -2.392 1.00 9.39 C +ATOM 2959 N ARG A 396 -10.399 9.468 0.625 1.00 9.00 N +ATOM 2960 CA ARG A 396 -10.257 8.210 1.373 1.00 8.95 C +ATOM 2961 C ARG A 396 -11.574 7.585 1.830 1.00 8.63 C +ATOM 2962 O ARG A 396 -11.597 6.431 2.241 1.00 8.13 O +ATOM 2963 CB ARG A 396 -9.343 8.412 2.579 1.00 9.26 C +ATOM 2964 CG ARG A 396 -7.922 8.832 2.214 1.00 9.52 C +ATOM 2965 CD ARG A 396 -7.715 10.282 2.566 1.00 9.68 C +ATOM 2966 NE ARG A 396 -6.451 10.821 2.069 1.00 9.62 N +ATOM 2967 CZ ARG A 396 -5.246 10.589 2.590 1.00 9.50 C +ATOM 2968 NH1 ARG A 396 -5.087 9.788 3.645 1.00 9.54 N +ATOM 2969 NH2 ARG A 396 -4.181 11.180 2.056 1.00 9.65 N +ATOM 2970 N GLY A 397 -12.661 8.344 1.757 1.00 8.62 N +ATOM 2971 CA GLY A 397 -13.982 7.852 2.128 1.00 8.82 C +ATOM 2972 C GLY A 397 -15.032 8.881 1.774 1.00 9.05 C +ATOM 2973 O GLY A 397 -14.760 9.808 1.016 1.00 8.92 O +ATOM 2974 N THR A 398 -16.227 8.723 2.331 1.00 9.25 N +ATOM 2975 CA THR A 398 -17.366 9.572 1.996 1.00 9.65 C +ATOM 2976 C THR A 398 -17.679 10.620 3.073 1.00 9.93 C +ATOM 2977 O THR A 398 -18.648 11.371 2.943 1.00 9.84 O +ATOM 2978 CB THR A 398 -18.623 8.714 1.769 1.00 9.68 C +ATOM 2979 OG1 THR A 398 -18.978 8.048 2.988 1.00 9.87 O +ATOM 2980 CG2 THR A 398 -18.378 7.684 0.673 1.00 9.80 C +ATOM 2981 N CYX A 399 -16.864 10.692 4.124 1.00 10.33 N +ATOM 2982 CA CYX A 399 -17.151 11.606 5.230 1.00 10.56 C +ATOM 2983 C CYX A 399 -16.808 13.040 4.846 1.00 11.17 C +ATOM 2984 O CYX A 399 -15.843 13.287 4.128 1.00 10.98 O +ATOM 2985 CB CYX A 399 -16.376 11.200 6.484 1.00 10.62 C +ATOM 2986 SG CYX A 399 -16.760 9.528 7.053 1.00 10.58 S +ATOM 2987 N SER A 400 -17.595 13.991 5.333 1.00 11.85 N +ATOM 2988 CA SER A 400 -17.321 15.394 5.047 1.00 12.50 C +ATOM 2989 C SER A 400 -16.013 15.832 5.696 1.00 12.57 C +ATOM 2990 O SER A 400 -15.545 15.219 6.666 1.00 12.43 O +ATOM 2991 CB SER A 400 -18.465 16.281 5.538 1.00 13.04 C +ATOM 2992 OG SER A 400 -18.418 16.443 6.939 1.00 14.25 O +ATOM 2993 N THR A 401 -15.433 16.902 5.161 1.00 12.87 N +ATOM 2994 CA THR A 401 -14.196 17.460 5.700 1.00 13.12 C +ATOM 2995 C THR A 401 -14.363 18.072 7.093 1.00 13.21 C +ATOM 2996 O THR A 401 -13.368 18.329 7.764 1.00 13.27 O +ATOM 2997 CB THR A 401 -13.623 18.550 4.774 1.00 13.47 C +ATOM 2998 OG1 THR A 401 -14.628 19.543 4.530 1.00 13.88 O +ATOM 2999 CG2 THR A 401 -13.158 17.946 3.457 1.00 13.48 C +ATOM 3000 N THR A 402 -15.608 18.321 7.504 1.00 13.38 N +ATOM 3001 CA THR A 402 -15.908 18.858 8.830 1.00 13.58 C +ATOM 3002 C THR A 402 -16.300 17.764 9.832 1.00 13.36 C +ATOM 3003 O THR A 402 -16.711 18.065 10.955 1.00 13.67 O +ATOM 3004 CB THR A 402 -17.051 19.892 8.750 1.00 14.06 C +ATOM 3005 OG1 THR A 402 -18.230 19.260 8.240 1.00 14.63 O +ATOM 3006 CG2 THR A 402 -16.666 21.052 7.842 1.00 14.45 C +ATOM 3007 N SER A 403 -16.158 16.501 9.435 1.00 12.72 N +ATOM 3008 CA SER A 403 -16.581 15.371 10.256 1.00 12.50 C +ATOM 3009 C SER A 403 -15.505 14.947 11.253 1.00 12.30 C +ATOM 3010 O SER A 403 -14.332 15.278 11.102 1.00 12.36 O +ATOM 3011 CB SER A 403 -16.938 14.179 9.359 1.00 12.46 C +ATOM 3012 OG SER A 403 -15.770 13.584 8.819 1.00 12.13 O +ATOM 3013 N GLY A 404 -15.923 14.211 12.275 1.00 12.56 N +ATOM 3014 CA GLY A 404 -14.994 13.576 13.208 1.00 12.51 C +ATOM 3015 C GLY A 404 -14.308 14.447 14.249 1.00 12.77 C +ATOM 3016 O GLY A 404 -13.357 14.000 14.882 1.00 12.33 O +ATOM 3017 N VAL A 405 -14.779 15.675 14.459 1.00 13.07 N +ATOM 3018 CA VAL A 405 -14.220 16.509 15.526 1.00 13.52 C +ATOM 3019 C VAL A 405 -14.583 15.855 16.865 1.00 13.89 C +ATOM 3020 O VAL A 405 -15.759 15.591 17.105 1.00 14.13 O +ATOM 3021 CB VAL A 405 -14.770 17.951 15.478 1.00 13.64 C +ATOM 3022 CG1 VAL A 405 -14.265 18.763 16.664 1.00 13.79 C +ATOM 3023 CG2 VAL A 405 -14.394 18.626 14.164 1.00 13.75 C +ATOM 3024 N PRO A 406 -13.583 15.577 17.730 1.00 14.37 N +ATOM 3025 CA PRO A 406 -13.882 14.860 18.977 1.00 14.86 C +ATOM 3026 C PRO A 406 -15.046 15.425 19.793 1.00 15.58 C +ATOM 3027 O PRO A 406 -15.921 14.672 20.214 1.00 15.65 O +ATOM 3028 CB PRO A 406 -12.575 14.969 19.758 1.00 14.75 C +ATOM 3029 CG PRO A 406 -11.532 14.986 18.701 1.00 14.61 C +ATOM 3030 CD PRO A 406 -12.129 15.732 17.536 1.00 14.45 C +ATOM 3031 N SER A 407 -15.065 16.740 19.993 1.00 16.42 N +ATOM 3032 CA SER A 407 -16.124 17.370 20.785 1.00 17.47 C +ATOM 3033 C SER A 407 -17.506 17.174 20.161 1.00 17.75 C +ATOM 3034 O SER A 407 -18.508 17.106 20.878 1.00 18.50 O +ATOM 3035 CB SER A 407 -15.830 18.860 20.988 1.00 17.83 C +ATOM 3036 OG SER A 407 -15.766 19.546 19.753 1.00 18.46 O +ATOM 3037 N ASP A 408 -17.562 17.082 18.832 1.00 17.75 N +ATOM 3038 CA ASP A 408 -18.813 16.781 18.131 1.00 17.86 C +ATOM 3039 C ASP A 408 -19.196 15.310 18.313 1.00 17.32 C +ATOM 3040 O ASP A 408 -20.268 15.001 18.834 1.00 17.47 O +ATOM 3041 CB ASP A 408 -18.704 17.104 16.632 1.00 18.72 C +ATOM 3042 CG ASP A 408 -18.552 18.598 16.345 1.00 19.41 C +ATOM 3043 OD1 ASP A 408 -18.844 19.435 17.226 1.00 20.44 O +ATOM 3044 OD2 ASP A 408 -18.152 18.940 15.214 1.00 20.03 O +ATOM 3045 N ILE A 409 -18.313 14.403 17.897 1.00 16.74 N +ATOM 3046 CA ILE A 409 -18.664 12.979 17.845 1.00 16.28 C +ATOM 3047 C ILE A 409 -18.751 12.290 19.206 1.00 16.43 C +ATOM 3048 O ILE A 409 -19.477 11.312 19.344 1.00 16.15 O +ATOM 3049 CB ILE A 409 -17.758 12.165 16.886 1.00 16.01 C +ATOM 3050 CG1 ILE A 409 -16.291 12.189 17.328 1.00 15.80 C +ATOM 3051 CG2 ILE A 409 -17.916 12.671 15.455 1.00 16.22 C +ATOM 3052 CD1 ILE A 409 -15.422 11.205 16.574 1.00 15.62 C +ATOM 3053 N GLU A 410 -18.045 12.801 20.213 1.00 16.67 N +ATOM 3054 CA GLU A 410 -18.196 12.270 21.573 1.00 17.22 C +ATOM 3055 C GLU A 410 -19.604 12.499 22.142 1.00 18.24 C +ATOM 3056 O GLU A 410 -20.019 11.800 23.065 1.00 18.54 O +ATOM 3057 CB GLU A 410 -17.122 12.822 22.505 1.00 16.85 C +ATOM 3058 CG GLU A 410 -15.758 12.201 22.244 1.00 16.60 C +ATOM 3059 CD GLU A 410 -14.617 12.939 22.909 1.00 16.52 C +ATOM 3060 OE1 GLU A 410 -14.870 13.709 23.860 1.00 16.71 O +ATOM 3061 OE2 GLU A 410 -13.460 12.737 22.486 1.00 16.02 O +ATOM 3062 N ASER A 411 -20.319 13.479 21.592 0.50 18.73 N +ATOM 3063 CA ASER A 411 -21.728 13.681 21.906 0.50 19.46 C +ATOM 3064 C ASER A 411 -22.609 12.904 20.930 0.50 19.62 C +ATOM 3065 O ASER A 411 -23.368 12.018 21.334 0.50 20.32 O +ATOM 3066 CB ASER A 411 -22.071 15.168 21.849 0.50 19.64 C +ATOM 3067 OG ASER A 411 -23.443 15.376 22.126 0.50 19.97 O +ATOM 3068 N SER A 412 -22.484 13.225 19.644 1.00 19.37 N +ATOM 3069 CA SER A 412 -23.363 12.671 18.604 1.00 19.18 C +ATOM 3070 C SER A 412 -23.225 11.163 18.347 1.00 18.54 C +ATOM 3071 O SER A 412 -24.153 10.542 17.825 1.00 19.14 O +ATOM 3072 CB SER A 412 -23.173 13.432 17.284 1.00 19.33 C +ATOM 3073 OG SER A 412 -21.931 13.125 16.672 1.00 19.57 O +ATOM 3074 N ALA A 413 -22.078 10.584 18.699 1.00 17.32 N +ATOM 3075 CA ALA A 413 -21.830 9.153 18.496 1.00 16.80 C +ATOM 3076 C ALA A 413 -21.422 8.463 19.796 1.00 16.28 C +ATOM 3077 O ALA A 413 -20.651 7.498 19.785 1.00 15.84 O +ATOM 3078 CB ALA A 413 -20.761 8.953 17.432 1.00 16.92 C +ATOM 3079 N ALA A 414 -21.968 8.939 20.913 1.00 15.80 N +ATOM 3080 CA ALA A 414 -21.624 8.406 22.229 1.00 15.67 C +ATOM 3081 C ALA A 414 -21.908 6.910 22.371 1.00 15.50 C +ATOM 3082 O ALA A 414 -21.243 6.238 23.148 1.00 16.01 O +ATOM 3083 CB ALA A 414 -22.349 9.181 23.322 1.00 15.77 C +ATOM 3084 N SER A 415 -22.885 6.392 21.625 1.00 14.84 N +ATOM 3085 CA SER A 415 -23.230 4.965 21.686 1.00 14.51 C +ATOM 3086 C SER A 415 -22.365 4.080 20.785 1.00 13.17 C +ATOM 3087 O SER A 415 -22.584 2.873 20.716 1.00 13.08 O +ATOM 3088 CB SER A 415 -24.697 4.757 21.311 1.00 15.19 C +ATOM 3089 OG SER A 415 -25.539 5.538 22.133 1.00 16.54 O +ATOM 3090 N ALA A 416 -21.388 4.663 20.098 1.00 12.11 N +ATOM 3091 CA ALA A 416 -20.546 3.888 19.195 1.00 11.38 C +ATOM 3092 C ALA A 416 -19.761 2.812 19.948 1.00 10.70 C +ATOM 3093 O ALA A 416 -19.461 2.961 21.136 1.00 10.50 O +ATOM 3094 CB ALA A 416 -19.605 4.803 18.438 1.00 11.38 C +ATOM 3095 N TYR A 417 -19.465 1.723 19.247 1.00 10.01 N +ATOM 3096 CA TYR A 417 -18.771 0.573 19.814 1.00 9.79 C +ATOM 3097 C TYR A 417 -18.168 -0.249 18.677 1.00 9.09 C +ATOM 3098 O TYR A 417 -18.536 -0.075 17.516 1.00 8.68 O +ATOM 3099 CB TYR A 417 -19.754 -0.302 20.598 1.00 10.25 C +ATOM 3100 CG TYR A 417 -20.702 -1.033 19.680 1.00 10.85 C +ATOM 3101 CD1 TYR A 417 -21.811 -0.391 19.145 1.00 11.21 C +ATOM 3102 CD2 TYR A 417 -20.455 -2.350 19.296 1.00 11.22 C +ATOM 3103 CE1 TYR A 417 -22.664 -1.048 18.272 1.00 11.57 C +ATOM 3104 CE2 TYR A 417 -21.299 -3.013 18.420 1.00 11.69 C +ATOM 3105 CZ TYR A 417 -22.404 -2.358 17.918 1.00 11.87 C +ATOM 3106 OH TYR A 417 -23.239 -3.016 17.047 1.00 12.64 O +ATOM 3107 N VAL A 418 -17.255 -1.153 19.018 1.00 8.55 N +ATOM 3108 CA VAL A 418 -16.719 -2.124 18.063 1.00 8.36 C +ATOM 3109 C VAL A 418 -16.675 -3.476 18.771 1.00 8.28 C +ATOM 3110 O VAL A 418 -16.518 -3.533 19.990 1.00 8.28 O +ATOM 3111 CB VAL A 418 -15.312 -1.719 17.548 1.00 8.26 C +ATOM 3112 CG1 VAL A 418 -14.297 -1.672 18.688 1.00 8.17 C +ATOM 3113 CG2 VAL A 418 -14.833 -2.649 16.436 1.00 8.26 C +ATOM 3114 N ILE A 419 -16.854 -4.556 18.018 1.00 8.31 N +ATOM 3115 CA ILE A 419 -16.680 -5.905 18.562 1.00 8.41 C +ATOM 3116 C ILE A 419 -15.719 -6.673 17.676 1.00 8.32 C +ATOM 3117 O ILE A 419 -15.955 -6.805 16.474 1.00 8.39 O +ATOM 3118 CB ILE A 419 -18.007 -6.688 18.662 1.00 8.67 C +ATOM 3119 CG1 ILE A 419 -19.013 -5.918 19.523 1.00 8.85 C +ATOM 3120 CG2 ILE A 419 -17.753 -8.090 19.218 1.00 8.77 C +ATOM 3121 CD1 ILE A 419 -20.392 -6.549 19.582 1.00 8.97 C +ATOM 3122 N TYR A 420 -14.642 -7.164 18.281 1.00 8.18 N +ATOM 3123 CA TYR A 420 -13.696 -8.062 17.625 1.00 8.26 C +ATOM 3124 C TYR A 420 -13.981 -9.457 18.145 1.00 8.40 C +ATOM 3125 O TYR A 420 -14.169 -9.645 19.353 1.00 8.30 O +ATOM 3126 CB TYR A 420 -12.254 -7.695 17.963 1.00 8.23 C +ATOM 3127 CG TYR A 420 -11.894 -6.253 17.719 1.00 8.20 C +ATOM 3128 CD1 TYR A 420 -11.745 -5.769 16.426 1.00 8.34 C +ATOM 3129 CD2 TYR A 420 -11.695 -5.379 18.780 1.00 8.27 C +ATOM 3130 CE1 TYR A 420 -11.417 -4.446 16.194 1.00 8.20 C +ATOM 3131 CE2 TYR A 420 -11.367 -4.055 18.557 1.00 8.22 C +ATOM 3132 CZ TYR A 420 -11.226 -3.599 17.262 1.00 8.25 C +ATOM 3133 OH TYR A 420 -10.898 -2.285 17.036 1.00 8.45 O +ATOM 3134 N SER A 421 -14.016 -10.441 17.258 1.00 8.50 N +ATOM 3135 CA SER A 421 -14.272 -11.802 17.711 1.00 8.89 C +ATOM 3136 C SER A 421 -13.587 -12.852 16.860 1.00 9.15 C +ATOM 3137 O SER A 421 -13.108 -12.578 15.755 1.00 9.08 O +ATOM 3138 CB SER A 421 -15.781 -12.066 17.773 1.00 8.92 C +ATOM 3139 OG SER A 421 -16.388 -11.920 16.504 1.00 9.12 O +ATOM 3140 N ASN A 422 -13.511 -14.055 17.416 1.00 9.58 N +ATOM 3141 CA ASN A 422 -13.056 -15.226 16.681 1.00 10.08 C +ATOM 3142 C ASN A 422 -11.695 -15.030 16.023 1.00 9.64 C +ATOM 3143 O ASN A 422 -11.519 -15.262 14.823 1.00 9.40 O +ATOM 3144 CB ASN A 422 -14.116 -15.639 15.654 1.00 10.88 C +ATOM 3145 CG ASN A 422 -15.445 -15.985 16.302 1.00 11.99 C +ATOM 3146 OD1 ASN A 422 -15.483 -16.642 17.345 1.00 13.28 O +ATOM 3147 ND2 ASN A 422 -16.543 -15.543 15.691 1.00 12.81 N +ATOM 3148 N ILE A 423 -10.734 -14.594 16.830 1.00 9.52 N +ATOM 3149 CA ILE A 423 -9.365 -14.429 16.375 1.00 9.57 C +ATOM 3150 C ILE A 423 -8.766 -15.797 16.087 1.00 9.61 C +ATOM 3151 O ILE A 423 -8.862 -16.713 16.913 1.00 9.45 O +ATOM 3152 CB ILE A 423 -8.514 -13.694 17.429 1.00 9.50 C +ATOM 3153 CG1 ILE A 423 -8.988 -12.244 17.553 1.00 9.54 C +ATOM 3154 CG2 ILE A 423 -7.035 -13.733 17.066 1.00 9.54 C +ATOM 3155 CD1 ILE A 423 -8.561 -11.559 18.828 1.00 9.64 C +ATOM 3156 N LYS A 424 -8.167 -15.936 14.908 1.00 10.04 N +ATOM 3157 CA LYS A 424 -7.531 -17.188 14.499 1.00 10.49 C +ATOM 3158 C LYS A 424 -6.201 -16.889 13.838 1.00 10.30 C +ATOM 3159 O LYS A 424 -6.095 -15.932 13.067 1.00 10.25 O +ATOM 3160 CB LYS A 424 -8.416 -17.952 13.511 1.00 11.28 C +ATOM 3161 CG LYS A 424 -9.806 -18.275 14.034 1.00 11.96 C +ATOM 3162 CD LYS A 424 -10.707 -18.848 12.955 1.00 12.94 C +ATOM 3163 CE LYS A 424 -10.311 -20.257 12.566 1.00 13.71 C +ATOM 3164 NZ LYS A 424 -11.315 -20.874 11.654 1.00 14.53 N +ATOM 3165 N AVAL A 425 -5.200 -17.714 14.137 0.50 10.14 N +ATOM 3166 CA AVAL A 425 -3.871 -17.584 13.554 0.50 10.18 C +ATOM 3167 C AVAL A 425 -3.390 -18.951 13.080 0.50 10.35 C +ATOM 3168 O AVAL A 425 -3.659 -19.964 13.726 0.50 10.49 O +ATOM 3169 CB AVAL A 425 -2.866 -17.018 14.572 0.50 10.19 C +ATOM 3170 CG1AVAL A 425 -1.512 -16.799 13.912 0.50 10.13 C +ATOM 3171 CG2AVAL A 425 -3.392 -15.721 15.169 0.50 10.21 C +ATOM 3172 N GLY A 426 -2.695 -18.983 11.948 1.00 10.31 N +ATOM 3173 CA GLY A 426 -2.180 -20.240 11.414 1.00 10.56 C +ATOM 3174 C GLY A 426 -1.549 -20.083 10.049 1.00 10.72 C +ATOM 3175 O GLY A 426 -1.412 -18.967 9.546 1.00 10.29 O +ATOM 3176 N PRO A 427 -1.154 -21.204 9.431 1.00 10.96 N +ATOM 3177 CA PRO A 427 -0.601 -21.158 8.079 1.00 11.27 C +ATOM 3178 C PRO A 427 -1.561 -20.548 7.061 1.00 11.58 C +ATOM 3179 O PRO A 427 -2.757 -20.406 7.333 1.00 11.27 O +ATOM 3180 CB PRO A 427 -0.341 -22.634 7.747 1.00 11.19 C +ATOM 3181 CG PRO A 427 -0.262 -23.327 9.060 1.00 11.24 C +ATOM 3182 CD PRO A 427 -1.161 -22.570 9.988 1.00 11.09 C +ATOM 3183 N ILE A 428 -1.034 -20.215 5.888 1.00 12.52 N +ATOM 3184 CA ILE A 428 -1.834 -19.618 4.830 1.00 13.59 C +ATOM 3185 C ILE A 428 -3.010 -20.537 4.485 1.00 14.40 C +ATOM 3186 O ILE A 428 -2.828 -21.740 4.288 1.00 14.60 O +ATOM 3187 CB ILE A 428 -0.995 -19.334 3.562 1.00 13.90 C +ATOM 3188 CG1 ILE A 428 0.193 -18.410 3.874 1.00 14.21 C +ATOM 3189 CG2 ILE A 428 -1.866 -18.740 2.463 1.00 14.11 C +ATOM 3190 CD1 ILE A 428 -0.143 -17.208 4.726 1.00 13.97 C +ATOM 3191 N NLN A 429 -4.197 -19.941 4.417 1.00 15.43 N +ATOM 3192 CA NLN A 429 -5.471 -20.620 4.146 1.00 16.21 C +ATOM 3193 C NLN A 429 -5.963 -21.623 5.201 1.00 15.68 C +ATOM 3194 O NLN A 429 -6.834 -22.445 4.916 1.00 16.85 O +ATOM 3195 CB NLN A 429 -5.455 -21.240 2.736 1.00 17.80 C +ATOM 3196 CG NLN A 429 -5.337 -20.187 1.646 1.00 19.67 C +ATOM 3197 OD1 NLN A 429 -5.509 -18.992 1.901 1.00 19.41 O +ATOM 3198 ND2 NLN A 429 -5.046 -20.622 0.427 1.00 22.87 N +ATOM 3199 N SER A 430 -5.453 -21.514 6.424 1.00 14.65 N +ATOM 3200 CA SER A 430 -5.849 -22.400 7.522 1.00 13.97 C +ATOM 3201 C SER A 430 -7.028 -21.877 8.343 1.00 13.73 C +ATOM 3202 O SER A 430 -7.664 -22.640 9.062 1.00 13.40 O +ATOM 3203 CB SER A 430 -4.677 -22.607 8.477 1.00 13.69 C +ATOM 3204 OG SER A 430 -4.329 -21.402 9.140 1.00 13.49 O +ATOM 3205 N THR A 431 -7.291 -20.576 8.263 1.00 13.39 N +ATOM 3206 CA THR A 431 -8.189 -19.921 9.208 1.00 13.33 C +ATOM 3207 C THR A 431 -9.555 -19.589 8.629 1.00 13.84 C +ATOM 3208 O THR A 431 -10.432 -19.122 9.356 1.00 14.13 O +ATOM 3209 CB THR A 431 -7.576 -18.605 9.707 1.00 13.10 C +ATOM 3210 OG1 THR A 431 -7.471 -17.689 8.610 1.00 12.67 O +ATOM 3211 CG2 THR A 431 -6.200 -18.848 10.312 1.00 13.18 C +ATOM 3212 N PHE A 432 -9.736 -19.815 7.333 1.00 14.50 N +ATOM 3213 CA PHE A 432 -10.978 -19.444 6.676 1.00 15.42 C +ATOM 3214 C PHE A 432 -11.284 -20.339 5.489 1.00 16.57 C +ATOM 3215 O PHE A 432 -10.420 -21.048 4.973 1.00 16.27 O +ATOM 3216 CB PHE A 432 -10.918 -17.982 6.217 1.00 15.30 C +ATOM 3217 CG PHE A 432 -10.037 -17.756 5.017 1.00 14.79 C +ATOM 3218 CD1 PHE A 432 -8.657 -17.792 5.139 1.00 14.65 C +ATOM 3219 CD2 PHE A 432 -10.587 -17.504 3.766 1.00 14.90 C +ATOM 3220 CE1 PHE A 432 -7.841 -17.588 4.042 1.00 14.50 C +ATOM 3221 CE2 PHE A 432 -9.774 -17.293 2.663 1.00 14.84 C +ATOM 3222 CZ PHE A 432 -8.397 -17.335 2.803 1.00 14.68 C +ATOM 3223 N SER A 433 -12.541 -20.287 5.074 1.00 18.60 N +ATOM 3224 CA SER A 433 -12.988 -20.931 3.854 1.00 20.03 C +ATOM 3225 C SER A 433 -14.364 -20.389 3.515 1.00 20.98 C +ATOM 3226 O SER A 433 -14.953 -19.632 4.294 1.00 21.25 O +ATOM 3227 CB SER A 433 -13.042 -22.453 4.015 1.00 20.41 C +ATOM 3228 OG SER A 433 -13.953 -22.822 5.031 1.00 20.88 O +ATOM 3229 N GLY A 434 -14.862 -20.771 2.346 1.00 22.28 N +ATOM 3230 CA GLY A 434 -16.181 -20.349 1.888 1.00 23.45 C +ATOM 3231 C GLY A 434 -16.290 -20.495 0.386 1.00 24.45 C +ATOM 3232 O GLY A 434 -15.400 -21.054 -0.258 1.00 25.07 O +ATOM 3233 N THR A 435 -17.382 -19.983 -0.171 1.00 25.86 N +ATOM 3234 CA THR A 435 -17.604 -20.006 -1.612 1.00 27.14 C +ATOM 3235 C THR A 435 -16.784 -18.899 -2.275 1.00 27.15 C +ATOM 3236 O THR A 435 -16.779 -17.762 -1.813 1.00 25.92 O +ATOM 3237 CB THR A 435 -19.099 -19.812 -1.940 1.00 28.17 C +ATOM 3238 OG1 THR A 435 -19.878 -20.764 -1.202 1.00 29.08 O +ATOM 3239 CG2 THR A 435 -19.362 -19.984 -3.439 1.00 28.73 C +TER 3240 THR A 435 +ATOM 3240 C1 4YB B 436 13.052 13.559 27.887 0.50 16.64 C +ATOM 3241 C2 4YB B 436 14.555 13.364 27.986 0.50 17.70 C +ATOM 3242 C3 4YB B 436 15.191 14.294 29.017 0.50 17.97 C +ATOM 3243 C4 4YB B 436 14.634 15.712 28.956 0.50 18.38 C +ATOM 3244 C5 4YB B 436 13.122 15.684 28.852 0.50 17.87 C +ATOM 3245 C6 4YB B 436 12.577 17.084 28.644 0.50 17.99 C +ATOM 3246 C2N 4YB B 436 15.415 11.169 27.425 0.50 18.17 C +ATOM 3247 CME 4YB B 436 15.717 9.777 27.899 0.50 18.22 C +ATOM 3248 N2 4YB B 436 14.880 11.992 28.323 0.50 17.85 N +ATOM 3249 O3 4YB B 436 16.574 14.342 28.768 0.50 18.02 O +ATOM 3250 O4 4YB B 436 14.981 16.434 30.117 0.50 19.18 O +ATOM 3251 O5 4YB B 436 12.792 14.927 27.724 0.50 17.44 O +ATOM 3252 O6 4YB B 436 12.870 17.478 27.323 0.50 18.01 O +ATOM 3253 O2N 4YB B 436 15.653 11.504 26.263 0.50 18.40 O +TER 3254 4YB B 436 +ATOM 3254 C1 0YB B 437 15.950 17.446 29.788 0.50 20.23 C +ATOM 3255 C2 0YB B 437 15.613 18.731 30.539 0.50 20.37 C +ATOM 3256 C3 0YB B 437 16.681 19.799 30.344 0.50 20.77 C +ATOM 3257 C4 0YB B 437 18.063 19.227 30.617 0.50 20.97 C +ATOM 3258 C5 0YB B 437 18.255 17.956 29.800 0.50 21.07 C +ATOM 3259 C6 0YB B 437 19.617 17.329 30.069 0.50 21.38 C +ATOM 3260 C2N 0YB B 437 13.308 19.363 30.943 0.50 20.32 C +ATOM 3261 CME 0YB B 437 12.048 19.953 30.384 0.50 20.36 C +ATOM 3262 N2 0YB B 437 14.341 19.278 30.112 0.50 20.45 N +ATOM 3263 O3 0YB B 437 16.418 20.873 31.218 0.50 20.96 O +ATOM 3264 O4 0YB B 437 19.047 20.181 30.277 0.50 21.11 O +ATOM 3265 O5 0YB B 437 17.248 17.021 30.128 0.50 20.72 O +ATOM 3266 O6 0YB B 437 19.511 15.924 30.005 0.50 21.86 O +ATOM 3267 O2N 0YB B 437 13.355 18.980 32.111 0.50 20.27 O +TER 3268 0YB B 437 +ATOM 3268 C2 4GB C 438 -0.988 11.799 4.885 1.00 22.09 C +ATOM 3269 C3 4GB C 438 -0.624 11.000 6.131 1.00 21.69 C +ATOM 3270 C4 4GB C 438 -1.351 9.658 6.164 1.00 21.49 C +ATOM 3271 C5 4GB C 438 -1.320 8.938 4.816 1.00 21.37 C +ATOM 3272 C6 4GB C 438 -2.179 7.676 4.810 1.00 21.00 C +ATOM 3273 C1 4GB C 438 -0.865 10.926 3.642 1.00 22.20 C +ATOM 3274 O2 4GB C 438 -0.112 12.923 4.781 1.00 22.73 O +ATOM 3275 O3 4GB C 438 -0.945 11.758 7.307 1.00 21.58 O +ATOM 3276 O4 4GB C 438 -0.702 8.820 7.117 1.00 20.90 O +ATOM 3277 O5 4GB C 438 -1.757 9.822 3.784 1.00 22.02 O +ATOM 3278 O6 4GB C 438 -3.516 7.974 5.227 1.00 20.59 O +TER 3279 4GB C 438 +ATOM 3279 O1 ROH C 439 -1.201 11.661 2.466 1.00 22.63 O +TER 3280 ROH C 439 +ATOM 3280 C2 0GB C 440 -1.018 7.252 8.892 1.00 20.34 C +ATOM 3281 C3 0GB C 440 -1.771 7.003 10.191 1.00 20.51 C +ATOM 3282 C4 0GB C 440 -1.789 8.250 11.068 1.00 20.75 C +ATOM 3283 C5 0GB C 440 -2.258 9.474 10.284 1.00 20.94 C +ATOM 3284 C6 0GB C 440 -2.250 10.763 11.105 1.00 21.49 C +ATOM 3285 C1 0GB C 440 -1.509 8.539 8.247 1.00 20.34 C +ATOM 3286 O2 0GB C 440 -1.200 6.149 7.993 1.00 19.11 O +ATOM 3287 O3 0GB C 440 -1.133 5.943 10.905 1.00 20.54 O +ATOM 3288 O4 0GB C 440 -2.653 8.022 12.185 1.00 21.10 O +ATOM 3289 O5 0GB C 440 -1.410 9.642 9.151 1.00 20.74 O +ATOM 3290 O6 0GB C 440 -0.931 11.038 11.590 1.00 21.82 O +TER 3291 0GB C 440 +ATOM 3291 C1 0YB A 441 0.532 16.662 45.456 1.00 17.73 C +ATOM 3292 C2 0YB A 441 -0.756 17.162 46.089 1.00 19.12 C +ATOM 3293 C3 0YB A 441 -0.578 17.533 47.556 1.00 19.46 C +ATOM 3294 C4 0YB A 441 0.205 16.460 48.307 1.00 19.53 C +ATOM 3295 C5 0YB A 441 1.451 16.046 47.530 1.00 19.16 C +ATOM 3296 C6 0YB A 441 2.203 14.908 48.215 1.00 19.48 C +ATOM 3297 C2N 0YB A 441 -2.427 18.356 44.771 1.00 21.41 C +ATOM 3298 CME 0YB A 441 -2.762 19.604 44.010 1.00 21.88 C +ATOM 3299 N2 0YB A 441 -1.220 18.305 45.326 1.00 20.06 N +ATOM 3300 O3 0YB A 441 -1.857 17.681 48.131 1.00 19.67 O +ATOM 3301 O4 0YB A 441 0.605 16.977 49.554 1.00 19.99 O +ATOM 3302 O5 0YB A 441 1.078 15.624 46.235 1.00 18.06 O +ATOM 3303 O6 0YB A 441 1.329 13.816 48.402 1.00 20.39 O +ATOM 3304 O2N 0YB A 441 -3.255 17.454 44.867 1.00 22.86 O +TER 3305 0YB A 441 +ATOM 3305 C1 0YB A 442 -4.914 -19.708 -0.683 1.00 26.98 C +ATOM 3306 C2 0YB A 442 -4.036 -20.286 -1.787 1.00 29.31 C +ATOM 3307 C3 0YB A 442 -3.919 -19.309 -2.952 1.00 29.94 C +ATOM 3308 C4 0YB A 442 -5.288 -18.783 -3.374 1.00 30.11 C +ATOM 3309 C5 0YB A 442 -6.092 -18.304 -2.166 1.00 29.61 C +ATOM 3310 C6 0YB A 442 -7.501 -17.871 -2.558 1.00 29.90 C +ATOM 3311 C2N 0YB A 442 -2.399 -21.801 -0.784 1.00 30.94 C +ATOM 3312 CME 0YB A 442 -1.007 -21.976 -0.250 1.00 31.45 C +ATOM 3313 N2 0YB A 442 -2.720 -20.591 -1.250 1.00 30.06 N +ATOM 3314 O3 0YB A 442 -3.301 -19.949 -4.048 1.00 30.68 O +ATOM 3315 O4 0YB A 442 -5.107 -17.712 -4.274 1.00 30.88 O +ATOM 3316 O5 0YB A 442 -6.175 -19.340 -1.206 1.00 28.02 O +ATOM 3317 O6 0YB A 442 -8.184 -18.945 -3.167 1.00 30.57 O +ATOM 3318 O2N 0YB A 442 -3.186 -22.747 -0.775 1.00 31.70 O +TER 3319 0YB A 442 +ATOM 3319 C1 0MA A 443 -6.554 22.953 20.422 1.00 39.48 C +ATOM 3320 C2 0MA A 443 -7.940 22.646 19.858 1.00 41.34 C +ATOM 3321 C3 0MA A 443 -7.852 21.874 18.545 1.00 41.90 C +ATOM 3322 C4 0MA A 443 -6.826 22.483 17.590 1.00 41.82 C +ATOM 3323 C5 0MA A 443 -5.522 22.846 18.297 1.00 41.85 C +ATOM 3324 C6 0MA A 443 -4.600 23.629 17.365 1.00 42.37 C +ATOM 3325 O2 0MA A 443 -8.654 23.851 19.670 1.00 43.49 O +ATOM 3326 O3 0MA A 443 -9.125 21.860 17.935 1.00 42.13 O +ATOM 3327 O4 0MA A 443 -6.546 21.567 16.552 1.00 42.03 O +ATOM 3328 O5 0MA A 443 -5.795 23.630 19.439 1.00 40.66 O +ATOM 3329 O6 0MA A 443 -3.414 23.983 18.042 1.00 42.95 O +TER 3330 0MA A 443 +ATOM 3330 C1 GOL A 444 -9.641 7.653 -5.382 1.00 19.62 C +ATOM 3331 O1 GOL A 444 -10.910 7.589 -4.706 1.00 19.93 O +ATOM 3332 C2 GOL A 444 -8.730 8.716 -4.773 1.00 19.52 C +ATOM 3333 O2 GOL A 444 -7.359 8.295 -4.842 1.00 19.16 O +ATOM 3334 C3 GOL A 444 -8.874 10.040 -5.520 1.00 19.49 C +ATOM 3335 O3 GOL A 444 -8.435 11.135 -4.700 1.00 18.80 O +ATOM 3336 C1 GOL A 445 -5.307 3.809 19.932 1.00 32.29 C +ATOM 3337 O1 GOL A 445 -4.970 2.737 19.047 1.00 31.73 O +ATOM 3338 C2 GOL A 445 -4.502 5.046 19.557 1.00 32.75 C +ATOM 3339 O2 GOL A 445 -3.101 4.744 19.598 1.00 32.94 O +ATOM 3340 C3 GOL A 445 -4.825 6.174 20.528 1.00 33.32 C +ATOM 3341 O3 GOL A 445 -3.933 7.269 20.303 1.00 34.37 O +ATOM 3342 C1 GOL A 446 1.436 -5.418 -6.869 1.00 30.82 C +ATOM 3343 O1 GOL A 446 2.747 -5.339 -7.441 1.00 31.23 O +ATOM 3344 C2 GOL A 446 0.738 -6.726 -7.248 1.00 30.53 C +ATOM 3345 O2 GOL A 446 1.671 -7.623 -7.863 1.00 31.41 O +ATOM 3346 C3 GOL A 446 0.128 -7.393 -6.017 1.00 30.33 C +ATOM 3347 O3 GOL A 446 -1.235 -7.783 -6.251 1.00 29.04 O +ATOM 3348 C1 PEG A 447 -21.449 7.124 9.005 1.00 27.68 C +ATOM 3349 O1 PEG A 447 -21.169 8.393 9.598 1.00 26.47 O +ATOM 3350 C2 PEG A 447 -22.776 6.574 9.501 1.00 28.68 C +ATOM 3351 O2 PEG A 447 -22.725 5.148 9.406 1.00 29.98 O +ATOM 3352 C3 PEG A 447 -23.984 4.538 9.106 1.00 30.43 C +ATOM 3353 C4 PEG A 447 -24.039 4.136 7.634 1.00 30.71 C +ATOM 3354 O4 PEG A 447 -23.847 5.282 6.797 1.00 31.40 O +ATOM 3355 C1 PEG A 448 -5.831 8.763 26.464 1.00 34.26 C +ATOM 3356 O1 PEG A 448 -4.437 8.474 26.270 1.00 33.91 O +ATOM 3357 C2 PEG A 448 -6.104 9.131 27.921 1.00 34.39 C +ATOM 3358 O2 PEG A 448 -7.323 8.528 28.362 1.00 34.51 O +ATOM 3359 C3 PEG A 448 -8.471 9.364 28.187 1.00 33.92 C +ATOM 3360 C4 PEG A 448 -9.738 8.566 28.483 1.00 33.68 C +ATOM 3361 O4 PEG A 448 -10.890 9.421 28.484 1.00 33.21 O +ATOM 3362 MG MG A 449 11.994 12.179 30.064 0.50 8.16 MG +ATOM 3363 MG MG A 450 -24.564 1.214 8.861 0.50 9.59 MG +TER 3364 MG A 450 +END diff --git a/test/Test_PrepareForLeap/4zzw.pdb b/test/Test_PrepareForLeap/4zzw.pdb new file mode 100644 index 0000000000..15720e88c2 --- /dev/null +++ b/test/Test_PrepareForLeap/4zzw.pdb @@ -0,0 +1,4651 @@ +HEADER HYDROLASE 14-APR-15 4ZZW +TITLE GEOTRICHUM CANDIDUM CEL7A STRUCTURE COMPLEX WITH CELLOBIOSE AT 1.5A +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: CELLOBIOHYDROLASE I; +COMPND 3 CHAIN: A; +COMPND 4 FRAGMENT: CATALYTIC DOMAIN, RESIDUES 18-455; +COMPND 5 SYNONYM: CELLOBIOHYDROLASE CEL7A; +COMPND 6 EC: 3.2.1.176 +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: GALACTOMYCES GEOTRICHUM; +SOURCE 3 ORGANISM_TAXID: 1173061; +SOURCE 4 STRAIN: 3C +KEYWDS CELLOBIOHYDROLASE, CELLOBIOSE, HYDROLASE +EXPDTA X-RAY DIFFRACTION +AUTHOR A.S.BORISOVA,J.STAHLBERG +REVDAT 5 29-JUL-20 4ZZW 1 COMPND REMARK HET HETNAM +REVDAT 5 2 1 FORMUL LINK SITE ATOM +REVDAT 4 11-MAR-20 4ZZW 1 SEQRES LINK +REVDAT 3 17-JAN-18 4ZZW 1 REMARK +REVDAT 2 27-JAN-16 4ZZW 1 JRNL +REVDAT 1 23-SEP-15 4ZZW 0 +JRNL AUTH A.S.BORISOVA,E.V.ENEYSKAYA,K.S.BOBROV,S.JANA,A.LOGACHEV, +JRNL AUTH 2 D.E.POLEV,A.L.LAPIDUS,F.M.IBATULLIN,U.SALEEM,M.SANDGREN, +JRNL AUTH 3 C.M.PAYNE,A.A.KULMINSKAYA,J.STAHLBERG +JRNL TITL SEQUENCING, BIOCHEMICAL CHARACTERIZATION, CRYSTAL STRUCTURE +JRNL TITL 2 AND MOLECULAR DYNAMICS OF CELLOBIOHYDROLASE CEL7A FROM +JRNL TITL 3 GEOTRICHUM CANDIDUM 3C. +JRNL REF FEBS J. V. 282 4515 2015 +JRNL REFN ISSN 1742-464X +JRNL PMID 26367132 +JRNL DOI 10.1111/FEBS.13509 +REMARK 2 +REMARK 2 RESOLUTION. 1.50 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : REFMAC 5.8.0073 +REMARK 3 AUTHORS : MURSHUDOV,SKUBAK,LEBEDEV,PANNU,STEINER, +REMARK 3 : NICHOLLS,WINN,LONG,VAGIN +REMARK 3 +REMARK 3 REFINEMENT TARGET : MAXIMUM LIKELIHOOD +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 1.50 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 51.83 +REMARK 3 DATA CUTOFF (SIGMA(F)) : NULL +REMARK 3 COMPLETENESS FOR RANGE (%) : 95.1 +REMARK 3 NUMBER OF REFLECTIONS : 51378 +REMARK 3 +REMARK 3 FIT TO DATA USED IN REFINEMENT. +REMARK 3 CROSS-VALIDATION METHOD : THROUGHOUT +REMARK 3 FREE R VALUE TEST SET SELECTION : RANDOM +REMARK 3 R VALUE (WORKING + TEST SET) : 0.163 +REMARK 3 R VALUE (WORKING SET) : 0.161 +REMARK 3 FREE R VALUE : 0.185 +REMARK 3 FREE R VALUE TEST SET SIZE (%) : 5.000 +REMARK 3 FREE R VALUE TEST SET COUNT : 2710 +REMARK 3 +REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN. +REMARK 3 TOTAL NUMBER OF BINS USED : 20 +REMARK 3 BIN RESOLUTION RANGE HIGH (A) : 1.50 +REMARK 3 BIN RESOLUTION RANGE LOW (A) : 1.54 +REMARK 3 REFLECTION IN BIN (WORKING SET) : 3593 +REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : 88.76 +REMARK 3 BIN R VALUE (WORKING SET) : 0.2380 +REMARK 3 BIN FREE R VALUE SET COUNT : 183 +REMARK 3 BIN FREE R VALUE : 0.2720 +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 3239 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 124 +REMARK 3 SOLVENT ATOMS : 376 +REMARK 3 +REMARK 3 B VALUES. +REMARK 3 FROM WILSON PLOT (A**2) : NULL +REMARK 3 MEAN B VALUE (OVERALL, A**2) : 12.15 +REMARK 3 OVERALL ANISOTROPIC B VALUE. +REMARK 3 B11 (A**2) : 0.11000 +REMARK 3 B22 (A**2) : 1.11000 +REMARK 3 B33 (A**2) : -0.82000 +REMARK 3 B12 (A**2) : 0.00000 +REMARK 3 B13 (A**2) : -0.26000 +REMARK 3 B23 (A**2) : 0.00000 +REMARK 3 +REMARK 3 ESTIMATED OVERALL COORDINATE ERROR. +REMARK 3 ESU BASED ON R VALUE (A): 0.084 +REMARK 3 ESU BASED ON FREE R VALUE (A): 0.080 +REMARK 3 ESU BASED ON MAXIMUM LIKELIHOOD (A): 0.051 +REMARK 3 ESU FOR B VALUES BASED ON MAXIMUM LIKELIHOOD (A**2): 1.374 +REMARK 3 +REMARK 3 CORRELATION COEFFICIENTS. +REMARK 3 CORRELATION COEFFICIENT FO-FC : 0.964 +REMARK 3 CORRELATION COEFFICIENT FO-FC FREE : 0.955 +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES COUNT RMS WEIGHT +REMARK 3 BOND LENGTHS REFINED ATOMS (A): 3718 ; 0.005 ; 0.020 +REMARK 3 BOND LENGTHS OTHERS (A): 3183 ; 0.001 ; 0.020 +REMARK 3 BOND ANGLES REFINED ATOMS (DEGREES): 5126 ; 1.108 ; 1.961 +REMARK 3 BOND ANGLES OTHERS (DEGREES): 7376 ; 0.717 ; 3.000 +REMARK 3 TORSION ANGLES, PERIOD 1 (DEGREES): 496 ; 6.080 ; 5.000 +REMARK 3 TORSION ANGLES, PERIOD 2 (DEGREES): 158 ;33.093 ;25.949 +REMARK 3 TORSION ANGLES, PERIOD 3 (DEGREES): 520 ;10.561 ;15.000 +REMARK 3 TORSION ANGLES, PERIOD 4 (DEGREES): 8 ;21.412 ;15.000 +REMARK 3 CHIRAL-CENTER RESTRAINTS (A**3): 580 ; 0.067 ; 0.200 +REMARK 3 GENERAL PLANES REFINED ATOMS (A): 4463 ; 0.004 ; 0.020 +REMARK 3 GENERAL PLANES OTHERS (A): 844 ; 0.001 ; 0.020 +REMARK 3 NON-BONDED CONTACTS REFINED ATOMS (A): NULL ; NULL ; NULL +REMARK 3 NON-BONDED CONTACTS OTHERS (A): NULL ; NULL ; NULL +REMARK 3 NON-BONDED TORSION REFINED ATOMS (A): NULL ; NULL ; NULL +REMARK 3 NON-BONDED TORSION OTHERS (A): NULL ; NULL ; NULL +REMARK 3 H-BOND (X...Y) REFINED ATOMS (A): NULL ; NULL ; NULL +REMARK 3 H-BOND (X...Y) OTHERS (A): NULL ; NULL ; NULL +REMARK 3 POTENTIAL METAL-ION REFINED ATOMS (A): NULL ; NULL ; NULL +REMARK 3 POTENTIAL METAL-ION OTHERS (A): NULL ; NULL ; NULL +REMARK 3 SYMMETRY VDW REFINED ATOMS (A): NULL ; NULL ; NULL +REMARK 3 SYMMETRY VDW OTHERS (A): NULL ; NULL ; NULL +REMARK 3 SYMMETRY H-BOND REFINED ATOMS (A): NULL ; NULL ; NULL +REMARK 3 SYMMETRY H-BOND OTHERS (A): NULL ; NULL ; NULL +REMARK 3 SYMMETRY METAL-ION REFINED ATOMS (A): NULL ; NULL ; NULL +REMARK 3 SYMMETRY METAL-ION OTHERS (A): NULL ; NULL ; NULL +REMARK 3 +REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. COUNT RMS WEIGHT +REMARK 3 MAIN-CHAIN BOND REFINED ATOMS (A**2): 1897 ; 0.482 ; 1.124 +REMARK 3 MAIN-CHAIN BOND OTHER ATOMS (A**2): 1896 ; 0.481 ; 1.124 +REMARK 3 MAIN-CHAIN ANGLE REFINED ATOMS (A**2): 2422 ; 0.872 ; 1.685 +REMARK 3 MAIN-CHAIN ANGLE OTHER ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 SIDE-CHAIN BOND REFINED ATOMS (A**2): 1821 ; 0.536 ; 1.239 +REMARK 3 SIDE-CHAIN BOND OTHER ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 SIDE-CHAIN ANGLE REFINED ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 SIDE-CHAIN ANGLE OTHER ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 LONG RANGE B REFINED ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 LONG RANGE B OTHER ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 +REMARK 3 ANISOTROPIC THERMAL FACTOR RESTRAINTS. COUNT RMS WEIGHT +REMARK 3 RIGID-BOND RESTRAINTS (A**2): NULL ; NULL ; NULL +REMARK 3 SPHERICITY; FREE ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 SPHERICITY; BONDED ATOMS (A**2): NULL ; NULL ; NULL +REMARK 3 +REMARK 3 NCS RESTRAINTS STATISTICS +REMARK 3 NUMBER OF DIFFERENT NCS GROUPS : NULL +REMARK 3 +REMARK 3 TLS DETAILS +REMARK 3 NUMBER OF TLS GROUPS : NULL +REMARK 3 +REMARK 3 BULK SOLVENT MODELLING. +REMARK 3 METHOD USED : MASK +REMARK 3 PARAMETERS FOR MASK CALCULATION +REMARK 3 VDW PROBE RADIUS : 1.20 +REMARK 3 ION PROBE RADIUS : 0.80 +REMARK 3 SHRINKAGE RADIUS : 0.80 +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: HYDROGENS HAVE BEEN ADDED IN THE RIDING +REMARK 3 POSITIONS. +REMARK 4 +REMARK 4 4ZZW COMPLIES WITH FORMAT V. 3.30, 13-JUL-11 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY PDBE ON 14-APR-15. +REMARK 100 THE DEPOSITION ID IS D_1290062841. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : 22-NOV-13 +REMARK 200 TEMPERATURE (KELVIN) : 100 +REMARK 200 PH : 5.9 +REMARK 200 NUMBER OF CRYSTALS USED : 2 +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : Y +REMARK 200 RADIATION SOURCE : MAX II +REMARK 200 BEAMLINE : I911-3 +REMARK 200 X-RAY GENERATOR MODEL : NULL +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M +REMARK 200 WAVELENGTH OR RANGE (A) : 1.0001 +REMARK 200 MONOCHROMATOR : NULL +REMARK 200 OPTICS : MIRRORS +REMARK 200 +REMARK 200 DETECTOR TYPE : CCD +REMARK 200 DETECTOR MANUFACTURER : MARMOSAIC 225 MM CCD +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : MOSFLM +REMARK 200 DATA SCALING SOFTWARE : SCALA +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 55157 +REMARK 200 RESOLUTION RANGE HIGH (A) : 1.500 +REMARK 200 RESOLUTION RANGE LOW (A) : 51.830 +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : 7.100 +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : 97.2 +REMARK 200 DATA REDUNDANCY : 2.600 +REMARK 200 R MERGE (I) : 0.06000 +REMARK 200 R SYM (I) : NULL +REMARK 200 FOR THE DATA SET : 7.1000 +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : 1.50 +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : 1.53 +REMARK 200 COMPLETENESS FOR SHELL (%) : 95.7 +REMARK 200 DATA REDUNDANCY IN SHELL : 2.60 +REMARK 200 R MERGE FOR SHELL (I) : 0.36000 +REMARK 200 R SYM FOR SHELL (I) : NULL +REMARK 200 FOR SHELL : 1.800 +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: SINGLE WAVELENGTH +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT +REMARK 200 SOFTWARE USED: CCP4 +REMARK 200 STARTING MODEL: PDB ENTRY 1GPI +REMARK 200 +REMARK 200 REMARK: NONE +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 32.02 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 1.81 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: 0.2M MAGNESIUM CHLORIDE HEXAHYDRATE, +REMARK 280 20% PEG 3350, PH 5.9 +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 1 21 1 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -X,Y+1/2,-Z +REMARK 290 +REMARK 290 WHERE NNN -> OPERATOR NUMBER +REMARK 290 MMM -> TRANSLATION VECTOR +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS +REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM +REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY +REMARK 290 RELATED MOLECULES. +REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 2 0.000000 1.000000 0.000000 40.91000 +REMARK 290 SMTRY3 2 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1 +REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM +REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN +REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON +REMARK 300 BURIED SURFACE AREA. +REMARK 350 +REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN +REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE +REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS +REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND +REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN. +REMARK 350 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: MONOMERIC +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: MONOMERIC +REMARK 350 SOFTWARE USED: PISA +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B, C +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 465 +REMARK 465 MISSING RESIDUES +REMARK 465 THE FOLLOWING RESIDUES WERE NOT LOCATED IN THE +REMARK 465 EXPERIMENT. (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 465 IDENTIFIER; SSSEQ=SEQUENCE NUMBER; I=INSERTION CODE.) +REMARK 465 +REMARK 465 M RES C SSSEQI +REMARK 465 ALA A 199 +REMARK 465 ASN A 200 +REMARK 465 SER A 201 +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: TORSION ANGLES +REMARK 500 +REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS: +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2) +REMARK 500 +REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI- +REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400 +REMARK 500 +REMARK 500 M RES CSSEQI PSI PHI +REMARK 500 TYR A 247 70.54 -108.77 +REMARK 500 TYR A 247 61.08 -102.24 +REMARK 500 SER A 414 -60.10 -90.96 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: MAIN CHAIN PLANARITY +REMARK 500 +REMARK 500 THE FOLLOWING RESIDUES HAVE A PSEUDO PLANARITY +REMARK 500 TORSION ANGLE, C(I) - CA(I) - N(I+1) - O(I), GREATER +REMARK 500 10.0 DEGREES. (M=MODEL NUMBER; RES=RESIDUE NAME; +REMARK 500 C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; +REMARK 500 I=INSERTION CODE). +REMARK 500 +REMARK 500 M RES CSSEQI ANGLE +REMARK 500 TYR A 247 -10.39 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 610 +REMARK 610 MISSING HETEROATOM +REMARK 610 THE FOLLOWING RESIDUES HAVE MISSING ATOMS (M=MODEL NUMBER; +REMARK 610 RES=RESIDUE NAME; C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; +REMARK 610 I=INSERTION CODE): +REMARK 610 M RES C SSEQI +REMARK 610 NAG B 1 +REMARK 620 +REMARK 620 METAL COORDINATION +REMARK 620 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 620 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE): +REMARK 620 +REMARK 620 COORDINATION ANGLES FOR: M RES CSSEQI METAL +REMARK 620 MG A1439 MG +REMARK 620 N RES CSSEQI ATOM +REMARK 620 1 ASP A 64 OD2 +REMARK 620 2 HOH A2089 O 80.3 +REMARK 620 3 HOH A2090 O 89.2 92.0 +REMARK 620 4 HOH A2091 O 85.5 162.3 77.2 +REMARK 620 N 1 2 3 +REMARK 620 +REMARK 620 COORDINATION ANGLES FOR: M RES CSSEQI METAL +REMARK 620 MG A1440 MG +REMARK 620 N RES CSSEQI ATOM +REMARK 620 1 HOH A2163 O +REMARK 620 2 HOH A2270 O 100.1 +REMARK 620 3 HOH A2272 O 103.1 153.8 +REMARK 620 N 1 2 +REMARK 900 +REMARK 900 RELATED ENTRIES +REMARK 900 RELATED ID: 4ZZT RELATED DB: PDB +REMARK 900 GEOTRICHUM CANDIDUM CEL7A STRUCTURE COMPLEX WITH THIO- LINKED +REMARK 900 CELLOTRIOSE AT 1.56A +REMARK 900 RELATED ID: 4ZZU RELATED DB: PDB +REMARK 900 GEOTRICHUM CANDIDUM CEL7A STRUCTURE COMPLEX WITH THIO- LINKED +REMARK 900 CELLOTETRAOSE AT 1.4A +REMARK 900 RELATED ID: 4ZZV RELATED DB: PDB +REMARK 900 GEOTRICHUM CANDIDUM CEL7A APO STRUCTURE AT 1.4A +DBREF1 4ZZW A 1 438 UNP A0A088T0J9_GEOCN +DBREF2 4ZZW A A0A088T0J9 18 455 +SEQRES 1 A 438 PCA GLN ILE GLY THR LEU THR THR GLU THR HIS PRO PRO +SEQRES 2 A 438 LEU THR TRP GLN THR CYS THR SER GLY GLY SER CYS THR +SEQRES 3 A 438 THR ASN ASN GLY LYS VAL VAL LEU ASP ALA ASN TRP ARG +SEQRES 4 A 438 TRP LEU HIS SER THR SER GLY SER THR ASN CYS TYR THR +SEQRES 5 A 438 GLY ASN THR TRP ASN THR THR LEU CYS PRO ASP ASP THR +SEQRES 6 A 438 THR CYS ALA GLN ASN CYS ALA LEU ASP GLY ALA ASP TYR +SEQRES 7 A 438 GLU GLY THR TYR GLY ILE THR ALA SER GLY ASN SER LEU +SEQRES 8 A 438 ARG LEU ASN PHE VAL THR ASN GLY SER GLN LYS ASN VAL +SEQRES 9 A 438 GLY SER ARG THR TYR LEU MET LYS ASP ASP THR HIS TYR +SEQRES 10 A 438 GLN THR PHE ASN LEU LEU ASN GLN GLU PHE THR PHE ASP +SEQRES 11 A 438 VAL ASP VAL SER GLY LEU PRO CYS GLY LEU ASN GLY ALA +SEQRES 12 A 438 LEU TYR MET VAL PRO MET ALA ALA ASP GLY GLY VAL SER +SEQRES 13 A 438 ASN GLU PRO ASN ASN LYS ALA GLY ALA GLN TYR GLY VAL +SEQRES 14 A 438 GLY TYR CYS ASP SER GLN CYS PRO ARG ASP LEU LYS PHE +SEQRES 15 A 438 ILE ALA GLY SER ALA ASN VAL GLN GLY TRP GLU PRO ALA +SEQRES 16 A 438 SER ASN SER ALA ASN SER GLY LEU GLY GLY ASN GLY SER +SEQRES 17 A 438 CYS CYS ALA GLU LEU ASP ILE TRP GLU ALA ASN SER ILE +SEQRES 18 A 438 SER ALA ALA LEU THR PRO HIS SER ALA ASP THR VAL THR +SEQRES 19 A 438 GLN THR VAL CYS ASN GLY ASP ASP CYS GLY GLY THR TYR +SEQRES 20 A 438 SER ASN ASP ARG TYR SER GLY THR THR ASP PRO ASP GLY +SEQRES 21 A 438 CYS ASP PHE ASN SER TYR ARG GLN GLY ASP THR SER PHE +SEQRES 22 A 438 TYR GLY PRO GLY LYS THR VAL ASP THR ASN SER LYS PHE +SEQRES 23 A 438 THR VAL VAL THR GLN PHE LEU THR ASP SER SER GLY ASN +SEQRES 24 A 438 LEU ASN GLU ILE LYS ARG PHE TYR VAL GLN ASN GLY VAL +SEQRES 25 A 438 VAL ILE PRO ASN SER GLN SER THR ILE ALA GLY ILE SER +SEQRES 26 A 438 GLY ASN SER ILE THR GLN ASP TYR CYS THR ALA GLN LYS +SEQRES 27 A 438 GLN VAL PHE GLY ASP THR ASN THR TRP GLU ASP HIS GLY +SEQRES 28 A 438 GLY PHE GLN SER MET THR ASN ALA PHE LYS ALA GLY MET +SEQRES 29 A 438 VAL LEU VAL MET SER LEU TRP ASP ASP TYR TYR ALA ASP +SEQRES 30 A 438 MET LEU TRP LEU ASP SER VAL ALA TYR PRO THR ASP ALA +SEQRES 31 A 438 ASP PRO SER THR PRO GLY VAL ALA ARG GLY THR CYS SER +SEQRES 32 A 438 THR THR SER GLY VAL PRO SER ASP ILE GLU SER SER ALA +SEQRES 33 A 438 ALA SER ALA TYR VAL ILE TYR SER ASN ILE LYS VAL GLY +SEQRES 34 A 438 PRO ILE ASN SER THR PHE SER GLY THR +MODRES 4ZZW ASN A 57 ASN GLYCOSYLATION SITE +MODRES 4ZZW SER A 196 SER GLYCOSYLATION SITE +MODRES 4ZZW ASN A 432 ASN GLYCOSYLATION SITE +MODRES 4ZZW PCA A 1 GLU PYROGLUTAMIC ACID +HET PCA A 1 8 +HET NAG B 1 14 +HET NAG B 2 14 +HET BGC C 1 12 +HET BGC C 2 11 +HET NAG A 704 14 +HET NAG A 705 14 +HET MAN A 706 11 +HET GOL A 901 6 +HET GOL A 902 6 +HET GOL A 903 6 +HET PEG A 911 7 +HET PEG A 912 7 +HET MG A1439 1 +HET MG A1440 1 +HETNAM PCA PYROGLUTAMIC ACID +HETNAM NAG 2-ACETAMIDO-2-DEOXY-BETA-D-GLUCOPYRANOSE +HETNAM BGC BETA-D-GLUCOPYRANOSE +HETNAM MAN ALPHA-D-MANNOPYRANOSE +HETNAM GOL GLYCEROL +HETNAM PEG DI(HYDROXYETHYL)ETHER +HETNAM MG MAGNESIUM ION +HETSYN GOL GLYCERIN; PROPANE-1,2,3-TRIOL +FORMUL 1 PCA C5 H7 N O3 +FORMUL 2 NAG 4(C8 H15 N O6) +FORMUL 3 BGC 2(C6 H12 O6) +FORMUL 6 MAN C6 H12 O6 +FORMUL 7 GOL 3(C3 H8 O3) +FORMUL 10 PEG 2(C4 H10 O3) +FORMUL 12 MG 2(MG 2+) +FORMUL 14 HOH *376(H2 O) +HELIX 1 1 ALA A 36 ARG A 39 5 4 +HELIX 2 2 ASP A 63 ASN A 70 1 8 +HELIX 3 3 ASP A 77 GLY A 83 1 7 +HELIX 4 4 GLY A 154 GLU A 158 5 5 +HELIX 5 5 ALA A 163 GLY A 168 5 6 +HELIX 6 6 ASP A 241 GLY A 244 5 4 +HELIX 7 7 GLN A 331 GLY A 342 1 12 +HELIX 8 8 ASN A 345 HIS A 350 1 6 +HELIX 9 9 GLY A 351 GLY A 363 1 13 +HELIX 10 10 MET A 378 SER A 383 1 6 +HELIX 11 11 VAL A 408 ALA A 416 1 9 +SHEET 1 AA 3 GLN A 2 ILE A 3 0 +SHEET 2 AA 3 CYS A 71 LEU A 73 1 O CYS A 71 N GLN A 2 +SHEET 3 AA 3 LEU A 41 SER A 43 -1 O HIS A 42 N ALA A 72 +SHEET 1 AB 7 ILE A 84 SER A 87 0 +SHEET 2 AB 7 SER A 90 ASN A 94 -1 O SER A 90 N SER A 87 +SHEET 3 AB 7 TYR A 420 PRO A 430 -1 O VAL A 421 N LEU A 93 +SHEET 4 AB 7 GLN A 125 ASP A 132 -1 O GLU A 126 N GLY A 429 +SHEET 5 AB 7 PHE A 286 THR A 294 -1 O PHE A 286 N VAL A 131 +SHEET 6 AB 7 LEU A 300 GLN A 309 -1 N ASN A 301 O LEU A 293 +SHEET 7 AB 7 VAL A 312 PRO A 315 -1 O VAL A 312 N GLN A 309 +SHEET 1 AC 7 ILE A 84 SER A 87 0 +SHEET 2 AC 7 SER A 90 ASN A 94 -1 O SER A 90 N SER A 87 +SHEET 3 AC 7 TYR A 420 PRO A 430 -1 O VAL A 421 N LEU A 93 +SHEET 4 AC 7 PRO A 13 CYS A 19 1 O GLN A 17 N VAL A 428 +SHEET 5 AC 7 CYS A 25 LEU A 34 -1 O THR A 26 N THR A 18 +SHEET 6 AC 7 SER A 106 ASP A 113 -1 O TYR A 109 N VAL A 33 +SHEET 7 AC 7 HIS A 116 TYR A 117 -1 O HIS A 116 N LYS A 112 +SHEET 1 AD 7 ILE A 84 SER A 87 0 +SHEET 2 AD 7 SER A 90 ASN A 94 -1 O SER A 90 N SER A 87 +SHEET 3 AD 7 TYR A 420 PRO A 430 -1 O VAL A 421 N LEU A 93 +SHEET 4 AD 7 GLN A 125 ASP A 132 -1 O GLU A 126 N GLY A 429 +SHEET 5 AD 7 PHE A 286 THR A 294 -1 O PHE A 286 N VAL A 131 +SHEET 6 AD 7 LEU A 300 GLN A 309 -1 N ASN A 301 O LEU A 293 +SHEET 7 AD 7 ILE A 329 THR A 330 -1 O ILE A 329 N ILE A 303 +SHEET 1 AE 2 HIS A 116 TYR A 117 0 +SHEET 2 AE 2 SER A 106 ASP A 113 -1 N LYS A 112 O HIS A 116 +SHEET 1 AF10 ILE A 84 SER A 87 0 +SHEET 2 AF10 SER A 90 ASN A 94 -1 O SER A 90 N SER A 87 +SHEET 3 AF10 TYR A 420 PRO A 430 -1 O VAL A 421 N LEU A 93 +SHEET 4 AF10 PRO A 13 CYS A 19 1 O GLN A 17 N VAL A 428 +SHEET 5 AF10 CYS A 25 LEU A 34 -1 O THR A 26 N THR A 18 +SHEET 6 AF10 SER A 106 ASP A 113 -1 O TYR A 109 N VAL A 33 +SHEET 7 AF10 MET A 364 ASP A 372 -1 O LEU A 366 N LEU A 110 +SHEET 8 AF10 LEU A 140 VAL A 147 -1 O ASN A 141 N TRP A 371 +SHEET 9 AF10 GLU A 212 ALA A 218 -1 O LEU A 213 N MET A 146 +SHEET 10 AF10 ALA A 223 HIS A 228 -1 O ALA A 224 N GLU A 217 +SHEET 1 AG 8 ILE A 84 SER A 87 0 +SHEET 2 AG 8 SER A 90 ASN A 94 -1 O SER A 90 N SER A 87 +SHEET 3 AG 8 TYR A 420 PRO A 430 -1 O VAL A 421 N LEU A 93 +SHEET 4 AG 8 PRO A 13 CYS A 19 1 O GLN A 17 N VAL A 428 +SHEET 5 AG 8 CYS A 25 LEU A 34 -1 O THR A 26 N THR A 18 +SHEET 6 AG 8 SER A 106 ASP A 113 -1 O TYR A 109 N VAL A 33 +SHEET 7 AG 8 MET A 364 ASP A 372 -1 O LEU A 366 N LEU A 110 +SHEET 8 AG 8 THR A 119 PHE A 120 -1 O PHE A 120 N MET A 364 +SHEET 1 AH 2 VAL A 312 PRO A 315 0 +SHEET 2 AH 2 LEU A 300 GLN A 309 -1 O TYR A 307 N ILE A 314 +SHEET 1 AI 2 TYR A 51 THR A 52 0 +SHEET 2 AI 2 THR A 55 TRP A 56 -1 O THR A 55 N THR A 52 +SHEET 1 AJ 2 VAL A 96 ASN A 98 0 +SHEET 2 AJ 2 LYS A 102 VAL A 104 -1 O ASN A 103 N THR A 97 +SHEET 1 AK 2 PHE A 182 ILE A 183 0 +SHEET 2 AK 2 SER A 186 ALA A 187 -1 O SER A 186 N ILE A 183 +SHEET 1 AL 2 ASN A 206 CYS A 209 0 +SHEET 2 AL 2 THR A 236 ASN A 239 -1 O THR A 236 N CYS A 209 +SHEET 1 AM 2 TYR A 274 GLY A 275 0 +SHEET 2 AM 2 VAL A 280 ASP A 281 1 O VAL A 280 N GLY A 275 +SSBOND 1 CYS A 19 CYS A 25 1555 1555 2.05 +SSBOND 2 CYS A 50 CYS A 71 1555 1555 2.02 +SSBOND 3 CYS A 61 CYS A 67 1555 1555 2.04 +SSBOND 4 CYS A 138 CYS A 402 1555 1555 2.03 +SSBOND 5 CYS A 172 CYS A 210 1555 1555 2.06 +SSBOND 6 CYS A 176 CYS A 209 1555 1555 2.06 +SSBOND 7 CYS A 238 CYS A 243 1555 1555 2.03 +SSBOND 8 CYS A 261 CYS A 334 1555 1555 2.03 +LINK C PCA A 1 N GLN A 2 1555 1555 1.33 +LINK ND2 ASN A 57 C1 NAG A 704 1555 1555 1.45 +LINK OG SER A 196 C1 MAN A 706 1555 1555 1.44 +LINK ND2 ASN A 432 C1 NAG A 705 1555 1555 1.44 +LINK O4 NAG B 1 C1 NAG B 2 1555 1555 1.44 +LINK O4 BGC C 1 C1 BGC C 2 1555 1555 1.42 +LINK OD2 ASP A 64 MG MG A1439 1555 1555 1.90 +LINK MG MG A1439 O HOH A2089 1555 1555 2.41 +LINK MG MG A1439 O HOH A2090 1555 1555 2.55 +LINK MG MG A1439 O HOH A2091 1555 1555 2.48 +LINK MG MG A1440 O HOH A2163 1555 1555 1.92 +LINK MG MG A1440 O HOH A2270 1555 1555 2.06 +LINK MG MG A1440 O HOH A2272 1555 1555 1.98 +CISPEP 1 TYR A 386 PRO A 387 0 -3.87 +CRYST1 42.640 81.820 55.030 90.00 109.63 90.00 P 1 21 1 2 +ORIGX1 1.000000 0.000000 0.000000 0.00000 +ORIGX2 0.000000 1.000000 0.000000 0.00000 +ORIGX3 0.000000 0.000000 1.000000 0.00000 +SCALE1 0.023452 0.000000 0.008365 0.00000 +SCALE2 0.000000 0.012222 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.019293 0.00000 +HETATM 1 N PCA A 1 6.798 2.766 36.524 1.00 8.18 N +HETATM 2 CA PCA A 1 5.632 2.866 37.385 1.00 8.34 C +HETATM 3 CB PCA A 1 4.454 2.891 36.415 1.00 8.28 C +HETATM 4 CG PCA A 1 5.000 2.434 35.067 1.00 8.30 C +HETATM 5 CD PCA A 1 6.489 2.450 35.268 1.00 8.36 C +HETATM 6 OE PCA A 1 7.280 2.212 34.375 1.00 8.52 O +HETATM 7 C PCA A 1 5.492 1.724 38.348 1.00 8.46 C +HETATM 8 O PCA A 1 5.877 0.587 38.044 1.00 8.28 O +ATOM 9 N GLN A 2 4.930 2.023 39.512 1.00 8.81 N +ATOM 10 CA GLN A 2 4.736 1.037 40.565 1.00 9.23 C +ATOM 11 C GLN A 2 3.396 0.328 40.418 1.00 9.17 C +ATOM 12 O GLN A 2 2.553 0.727 39.615 1.00 8.98 O +ATOM 13 CB GLN A 2 4.832 1.711 41.938 1.00 9.68 C +ATOM 14 CG GLN A 2 6.119 2.503 42.126 1.00 10.27 C +ATOM 15 CD GLN A 2 7.343 1.667 41.838 1.00 10.92 C +ATOM 16 OE1 GLN A 2 7.546 0.628 42.467 1.00 12.23 O +ATOM 17 NE2 GLN A 2 8.167 2.113 40.890 1.00 11.19 N +ATOM 18 N ILE A 3 3.226 -0.737 41.195 1.00 9.25 N +ATOM 19 CA ILE A 3 1.984 -1.501 41.233 1.00 9.53 C +ATOM 20 C ILE A 3 1.105 -0.912 42.319 1.00 9.93 C +ATOM 21 O ILE A 3 1.481 -0.905 43.487 1.00 9.95 O +ATOM 22 CB ILE A 3 2.253 -2.997 41.517 1.00 9.39 C +ATOM 23 CG1 ILE A 3 2.977 -3.634 40.324 1.00 9.41 C +ATOM 24 CG2 ILE A 3 0.958 -3.751 41.805 1.00 9.35 C +ATOM 25 CD1 ILE A 3 3.534 -5.020 40.597 1.00 9.46 C +ATOM 26 N GLY A 4 -0.059 -0.402 41.928 1.00 10.43 N +ATOM 27 CA GLY A 4 -1.038 0.096 42.887 1.00 11.06 C +ATOM 28 C GLY A 4 -1.757 -1.069 43.532 1.00 11.76 C +ATOM 29 O GLY A 4 -1.959 -2.101 42.897 1.00 11.91 O +ATOM 30 N THR A 5 -2.133 -0.919 44.798 1.00 12.16 N +ATOM 31 CA THR A 5 -2.761 -2.017 45.529 1.00 12.98 C +ATOM 32 C THR A 5 -4.152 -1.656 46.054 1.00 12.60 C +ATOM 33 O THR A 5 -4.742 -2.420 46.821 1.00 12.93 O +ATOM 34 CB THR A 5 -1.857 -2.473 46.686 1.00 13.56 C +ATOM 35 OG1 THR A 5 -1.605 -1.365 47.552 1.00 14.84 O +ATOM 36 CG2 THR A 5 -0.524 -2.999 46.143 1.00 14.05 C +ATOM 37 N LEU A 6 -4.692 -0.520 45.619 1.00 12.18 N +ATOM 38 CA LEU A 6 -6.012 -0.081 46.085 1.00 11.92 C +ATOM 39 C LEU A 6 -7.170 -0.773 45.368 1.00 11.53 C +ATOM 40 O LEU A 6 -8.262 -0.890 45.934 1.00 11.18 O +ATOM 41 CB LEU A 6 -6.153 1.438 45.960 1.00 12.03 C +ATOM 42 CG LEU A 6 -5.058 2.259 46.645 1.00 12.22 C +ATOM 43 CD1 LEU A 6 -5.330 3.745 46.460 1.00 12.27 C +ATOM 44 CD2 LEU A 6 -4.964 1.901 48.119 1.00 12.49 C +ATOM 45 N THR A 7 -6.932 -1.230 44.135 1.00 11.34 N +ATOM 46 CA THR A 7 -7.954 -1.886 43.314 1.00 11.24 C +ATOM 47 C THR A 7 -7.337 -3.097 42.623 1.00 10.85 C +ATOM 48 O THR A 7 -6.313 -2.965 41.955 1.00 11.11 O +ATOM 49 CB THR A 7 -8.499 -0.941 42.218 1.00 11.66 C +ATOM 50 OG1 THR A 7 -9.066 0.234 42.819 1.00 11.85 O +ATOM 51 CG2 THR A 7 -9.562 -1.650 41.353 1.00 11.98 C +ATOM 52 N ATHR A 8 -7.970 -4.259 42.775 0.50 10.65 N +ATOM 53 N BTHR A 8 -7.944 -4.270 42.777 0.50 10.43 N +ATOM 54 CA ATHR A 8 -7.542 -5.492 42.110 0.50 10.48 C +ATOM 55 CA BTHR A 8 -7.419 -5.471 42.134 0.50 10.10 C +ATOM 56 C ATHR A 8 -7.477 -5.316 40.595 0.50 10.21 C +ATOM 57 C BTHR A 8 -7.469 -5.339 40.618 0.50 10.01 C +ATOM 58 O ATHR A 8 -8.334 -4.647 40.013 0.50 10.08 O +ATOM 59 O BTHR A 8 -8.387 -4.733 40.063 0.50 9.90 O +ATOM 60 CB ATHR A 8 -8.534 -6.637 42.400 0.50 10.66 C +ATOM 61 CB BTHR A 8 -8.195 -6.734 42.540 0.50 10.04 C +ATOM 62 OG1ATHR A 8 -8.754 -6.742 43.811 0.50 10.96 O +ATOM 63 OG1BTHR A 8 -9.570 -6.599 42.153 0.50 10.01 O +ATOM 64 CG2ATHR A 8 -8.012 -7.959 41.869 0.50 10.81 C +ATOM 65 CG2BTHR A 8 -8.083 -6.964 44.044 0.50 10.02 C +ATOM 66 N GLU A 9 -6.461 -5.906 39.964 1.00 9.86 N +ATOM 67 CA GLU A 9 -6.366 -5.917 38.506 1.00 9.85 C +ATOM 68 C GLU A 9 -6.692 -7.325 38.048 1.00 10.00 C +ATOM 69 O GLU A 9 -5.909 -8.253 38.248 1.00 10.18 O +ATOM 70 CB GLU A 9 -4.971 -5.490 38.043 1.00 9.63 C +ATOM 71 CG GLU A 9 -4.712 -5.627 36.540 1.00 9.37 C +ATOM 72 CD GLU A 9 -5.593 -4.751 35.659 1.00 9.35 C +ATOM 73 OE1 GLU A 9 -6.356 -3.914 36.175 1.00 9.12 O +ATOM 74 OE2 GLU A 9 -5.494 -4.870 34.416 1.00 9.02 O +ATOM 75 N THR A 10 -7.871 -7.478 37.459 1.00 10.22 N +ATOM 76 CA THR A 10 -8.318 -8.752 36.924 1.00 10.61 C +ATOM 77 C THR A 10 -8.513 -8.593 35.426 1.00 10.45 C +ATOM 78 O THR A 10 -9.354 -7.816 34.986 1.00 10.54 O +ATOM 79 CB THR A 10 -9.634 -9.209 37.581 1.00 11.07 C +ATOM 80 OG1 THR A 10 -9.434 -9.349 38.992 1.00 11.75 O +ATOM 81 CG2 THR A 10 -10.092 -10.539 37.006 1.00 11.41 C +ATOM 82 N HIS A 11 -7.730 -9.330 34.651 1.00 10.12 N +ATOM 83 CA HIS A 11 -7.763 -9.221 33.191 1.00 10.03 C +ATOM 84 C HIS A 11 -8.928 -10.024 32.622 1.00 10.07 C +ATOM 85 O HIS A 11 -8.997 -11.233 32.845 1.00 10.57 O +ATOM 86 CB HIS A 11 -6.461 -9.744 32.608 1.00 9.83 C +ATOM 87 CG HIS A 11 -5.252 -9.021 33.099 1.00 9.72 C +ATOM 88 ND1 HIS A 11 -4.176 -9.669 33.663 1.00 9.91 N +ATOM 89 CD2 HIS A 11 -4.960 -7.700 33.140 1.00 9.62 C +ATOM 90 CE1 HIS A 11 -3.262 -8.781 34.009 1.00 9.77 C +ATOM 91 NE2 HIS A 11 -3.716 -7.578 33.708 1.00 9.69 N +ATOM 92 N PRO A 12 -9.839 -9.369 31.877 1.00 10.20 N +ATOM 93 CA PRO A 12 -10.950 -10.134 31.301 1.00 10.41 C +ATOM 94 C PRO A 12 -10.457 -11.215 30.339 1.00 10.60 C +ATOM 95 O PRO A 12 -9.476 -10.998 29.622 1.00 10.24 O +ATOM 96 CB PRO A 12 -11.757 -9.083 30.533 1.00 10.29 C +ATOM 97 CG PRO A 12 -11.349 -7.764 31.089 1.00 10.31 C +ATOM 98 CD PRO A 12 -9.951 -7.926 31.594 1.00 10.14 C +ATOM 99 N PRO A 13 -11.138 -12.372 30.311 1.00 10.94 N +ATOM 100 CA PRO A 13 -10.694 -13.468 29.467 1.00 11.23 C +ATOM 101 C PRO A 13 -11.031 -13.253 27.990 1.00 11.19 C +ATOM 102 O PRO A 13 -12.095 -12.722 27.658 1.00 11.62 O +ATOM 103 CB PRO A 13 -11.479 -14.655 30.023 1.00 11.29 C +ATOM 104 CG PRO A 13 -12.755 -14.052 30.485 1.00 11.33 C +ATOM 105 CD PRO A 13 -12.373 -12.712 31.047 1.00 11.29 C +ATOM 106 N LEU A 14 -10.126 -13.672 27.116 1.00 11.13 N +ATOM 107 CA LEU A 14 -10.401 -13.699 25.688 1.00 11.44 C +ATOM 108 C LEU A 14 -9.694 -14.900 25.080 1.00 11.65 C +ATOM 109 O LEU A 14 -8.473 -15.005 25.142 1.00 11.90 O +ATOM 110 CB LEU A 14 -9.925 -12.407 25.025 1.00 11.39 C +ATOM 111 CG LEU A 14 -10.204 -12.272 23.527 1.00 11.40 C +ATOM 112 CD1 LEU A 14 -11.701 -12.255 23.250 1.00 11.52 C +ATOM 113 CD2 LEU A 14 -9.533 -11.023 22.967 1.00 11.48 C +ATOM 114 N ATHR A 15 -10.457 -15.833 24.523 0.50 11.97 N +ATOM 115 N BTHR A 15 -10.491 -15.783 24.483 0.50 11.54 N +ATOM 116 CA ATHR A 15 -9.849 -16.993 23.888 0.50 12.34 C +ATOM 117 CA BTHR A 15 -10.012 -16.995 23.835 0.50 11.60 C +ATOM 118 C ATHR A 15 -9.721 -16.750 22.396 0.50 12.30 C +ATOM 119 C BTHR A 15 -9.716 -16.696 22.370 0.50 11.86 C +ATOM 120 O ATHR A 15 -10.566 -16.100 21.780 0.50 12.32 O +ATOM 121 O BTHR A 15 -10.444 -15.930 21.741 0.50 11.89 O +ATOM 122 CB ATHR A 15 -10.632 -18.291 24.158 0.50 12.76 C +ATOM 123 CB BTHR A 15 -11.087 -18.099 23.938 0.50 11.50 C +ATOM 124 OG1ATHR A 15 -10.275 -19.287 23.188 0.50 13.28 O +ATOM 125 OG1BTHR A 15 -11.236 -18.491 25.309 0.50 11.17 O +ATOM 126 CG2ATHR A 15 -12.089 -18.032 24.078 0.50 12.94 C +ATOM 127 CG2BTHR A 15 -10.724 -19.316 23.099 0.50 11.58 C +ATOM 128 N TRP A 16 -8.641 -17.280 21.840 1.00 12.11 N +ATOM 129 CA TRP A 16 -8.306 -17.151 20.421 1.00 12.21 C +ATOM 130 C TRP A 16 -7.742 -18.490 19.961 1.00 12.57 C +ATOM 131 O TRP A 16 -7.405 -19.342 20.786 1.00 12.70 O +ATOM 132 CB TRP A 16 -7.302 -16.018 20.200 1.00 12.23 C +ATOM 133 CG TRP A 16 -6.045 -16.173 20.978 1.00 12.34 C +ATOM 134 CD1 TRP A 16 -5.861 -15.910 22.307 1.00 12.41 C +ATOM 135 CD2 TRP A 16 -4.786 -16.634 20.483 1.00 12.35 C +ATOM 136 NE1 TRP A 16 -4.566 -16.177 22.666 1.00 12.45 N +ATOM 137 CE2 TRP A 16 -3.884 -16.625 21.567 1.00 12.41 C +ATOM 138 CE3 TRP A 16 -4.332 -17.057 19.229 1.00 12.39 C +ATOM 139 CZ2 TRP A 16 -2.557 -17.024 21.435 1.00 12.48 C +ATOM 140 CZ3 TRP A 16 -3.015 -17.452 19.103 1.00 12.49 C +ATOM 141 CH2 TRP A 16 -2.142 -17.432 20.198 1.00 12.59 C +ATOM 142 N GLN A 17 -7.643 -18.682 18.654 1.00 12.36 N +ATOM 143 CA GLN A 17 -7.361 -20.006 18.122 1.00 12.74 C +ATOM 144 C GLN A 17 -6.089 -20.058 17.310 1.00 12.46 C +ATOM 145 O GLN A 17 -5.743 -19.100 16.619 1.00 11.82 O +ATOM 146 CB GLN A 17 -8.532 -20.474 17.263 1.00 13.55 C +ATOM 147 CG GLN A 17 -9.802 -20.671 18.068 1.00 14.45 C +ATOM 148 CD GLN A 17 -11.033 -20.725 17.197 1.00 15.47 C +ATOM 149 OE1 GLN A 17 -11.957 -19.921 17.355 1.00 17.42 O +ATOM 150 NE2 GLN A 17 -11.048 -21.654 16.258 1.00 15.85 N +ATOM 151 N ATHR A 18 -5.400 -21.193 17.406 0.50 12.35 N +ATOM 152 N BTHR A 18 -5.381 -21.180 17.417 0.50 12.36 N +ATOM 153 CA ATHR A 18 -4.259 -21.507 16.564 0.50 12.53 C +ATOM 154 CA BTHR A 18 -4.259 -21.484 16.543 0.50 12.53 C +ATOM 155 C ATHR A 18 -4.695 -22.649 15.656 0.50 12.60 C +ATOM 156 C BTHR A 18 -4.690 -22.643 15.656 0.50 12.61 C +ATOM 157 O ATHR A 18 -5.234 -23.645 16.137 0.50 12.44 O +ATOM 158 O BTHR A 18 -5.217 -23.640 16.149 0.50 12.45 O +ATOM 159 CB ATHR A 18 -3.056 -21.960 17.411 0.50 12.65 C +ATOM 160 CB BTHR A 18 -2.999 -21.875 17.338 0.50 12.64 C +ATOM 161 OG1ATHR A 18 -2.751 -20.958 18.391 0.50 12.83 O +ATOM 162 OG1BTHR A 18 -3.359 -22.730 18.431 0.50 12.86 O +ATOM 163 CG2ATHR A 18 -1.836 -22.208 16.535 0.50 12.73 C +ATOM 164 CG2BTHR A 18 -2.306 -20.636 17.882 0.50 12.74 C +ATOM 165 N CYS A 19 -4.485 -22.498 14.352 1.00 12.74 N +ATOM 166 CA CYS A 19 -4.953 -23.485 13.376 1.00 13.18 C +ATOM 167 C CYS A 19 -3.812 -24.188 12.655 1.00 13.76 C +ATOM 168 O CYS A 19 -2.726 -23.626 12.500 1.00 13.56 O +ATOM 169 CB CYS A 19 -5.889 -22.826 12.365 1.00 13.37 C +ATOM 170 SG CYS A 19 -7.287 -21.975 13.135 1.00 13.54 S +ATOM 171 N THR A 20 -4.078 -25.424 12.231 1.00 14.41 N +ATOM 172 CA THR A 20 -3.137 -26.216 11.438 1.00 15.41 C +ATOM 173 C THR A 20 -3.381 -25.966 9.960 1.00 15.04 C +ATOM 174 O THR A 20 -4.403 -25.399 9.586 1.00 14.77 O +ATOM 175 CB THR A 20 -3.311 -27.731 11.672 1.00 16.33 C +ATOM 176 OG1 THR A 20 -4.536 -28.178 11.069 1.00 17.99 O +ATOM 177 CG2 THR A 20 -3.316 -28.065 13.147 1.00 16.94 C +ATOM 178 N SER A 21 -2.461 -26.425 9.116 1.00 15.19 N +ATOM 179 CA SER A 21 -2.579 -26.247 7.667 1.00 15.28 C +ATOM 180 C SER A 21 -3.917 -26.747 7.113 1.00 15.23 C +ATOM 181 O SER A 21 -4.460 -26.163 6.177 1.00 15.54 O +ATOM 182 CB SER A 21 -1.428 -26.955 6.951 1.00 15.59 C +ATOM 183 OG SER A 21 -0.184 -26.361 7.279 1.00 15.69 O +ATOM 184 N GLY A 22 -4.444 -27.821 7.699 1.00 14.98 N +ATOM 185 CA GLY A 22 -5.700 -28.419 7.255 1.00 15.07 C +ATOM 186 C GLY A 22 -6.969 -27.769 7.768 1.00 15.02 C +ATOM 187 O GLY A 22 -8.064 -28.242 7.482 1.00 15.31 O +ATOM 188 N GLY A 23 -6.839 -26.688 8.529 1.00 14.94 N +ATOM 189 CA GLY A 23 -8.012 -25.978 9.026 1.00 14.96 C +ATOM 190 C GLY A 23 -8.575 -26.414 10.369 1.00 14.91 C +ATOM 191 O GLY A 23 -9.637 -25.926 10.773 1.00 15.31 O +ATOM 192 N ASER A 24 -7.882 -27.318 11.054 0.50 14.86 N +ATOM 193 N BSER A 24 -7.888 -27.332 11.047 0.25 14.76 N +ATOM 194 N CSER A 24 -7.888 -27.330 11.047 0.25 14.75 N +ATOM 195 CA ASER A 24 -8.268 -27.722 12.397 0.50 14.90 C +ATOM 196 CA BSER A 24 -8.256 -27.732 12.401 0.25 14.67 C +ATOM 197 CA CSER A 24 -8.259 -27.731 12.399 0.25 14.64 C +ATOM 198 C ASER A 24 -7.619 -26.761 13.383 0.50 14.69 C +ATOM 199 C BSER A 24 -7.627 -26.738 13.365 0.25 14.55 C +ATOM 200 C CSER A 24 -7.622 -26.750 13.373 0.25 14.53 C +ATOM 201 O ASER A 24 -6.433 -26.450 13.262 0.50 14.85 O +ATOM 202 O BSER A 24 -6.458 -26.383 13.211 0.25 14.61 O +ATOM 203 O CSER A 24 -6.444 -26.419 13.236 0.25 14.61 O +ATOM 204 CB ASER A 24 -7.823 -29.156 12.669 0.50 15.18 C +ATOM 205 CB BSER A 24 -7.750 -29.139 12.711 0.25 14.74 C +ATOM 206 CB CSER A 24 -7.778 -29.150 12.691 0.25 14.70 C +ATOM 207 OG ASER A 24 -8.267 -30.019 11.635 0.50 15.48 O +ATOM 208 OG BSER A 24 -6.374 -29.121 13.049 0.25 14.74 O +ATOM 209 OG CSER A 24 -8.172 -29.561 13.988 0.25 14.64 O +ATOM 210 N CYS A 25 -8.396 -26.292 14.354 1.00 14.38 N +ATOM 211 CA CYS A 25 -7.923 -25.280 15.298 1.00 14.11 C +ATOM 212 C CYS A 25 -8.094 -25.717 16.743 1.00 13.75 C +ATOM 213 O CYS A 25 -9.003 -26.483 17.073 1.00 13.67 O +ATOM 214 CB CYS A 25 -8.650 -23.957 15.065 1.00 14.19 C +ATOM 215 SG CYS A 25 -8.726 -23.424 13.337 1.00 14.23 S +ATOM 216 N THR A 26 -7.189 -25.228 17.586 1.00 13.50 N +ATOM 217 CA THR A 26 -7.275 -25.408 19.027 1.00 13.70 C +ATOM 218 C THR A 26 -7.319 -24.042 19.692 1.00 13.29 C +ATOM 219 O THR A 26 -6.869 -23.042 19.125 1.00 12.77 O +ATOM 220 CB THR A 26 -6.080 -26.199 19.585 1.00 14.27 C +ATOM 221 OG1 THR A 26 -4.857 -25.602 19.141 1.00 14.93 O +ATOM 222 CG2 THR A 26 -6.145 -27.647 19.133 1.00 14.63 C +ATOM 223 N THR A 27 -7.854 -24.016 20.904 1.00 13.01 N +ATOM 224 CA THR A 27 -8.085 -22.772 21.619 1.00 13.42 C +ATOM 225 C THR A 27 -6.945 -22.421 22.563 1.00 13.94 C +ATOM 226 O THR A 27 -6.272 -23.293 23.116 1.00 14.20 O +ATOM 227 CB THR A 27 -9.369 -22.858 22.450 1.00 13.53 C +ATOM 228 OG1 THR A 27 -9.257 -23.961 23.356 1.00 13.81 O +ATOM 229 CG2 THR A 27 -10.581 -23.055 21.552 1.00 13.70 C +ATOM 230 N ASN A 28 -6.743 -21.119 22.723 1.00 13.99 N +ATOM 231 CA ASN A 28 -5.795 -20.558 23.666 1.00 14.34 C +ATOM 232 C ASN A 28 -6.570 -19.619 24.569 1.00 14.20 C +ATOM 233 O ASN A 28 -7.245 -18.723 24.086 1.00 14.16 O +ATOM 234 CB ASN A 28 -4.724 -19.766 22.918 1.00 14.93 C +ATOM 235 CG ASN A 28 -4.034 -20.584 21.847 1.00 15.52 C +ATOM 236 OD1 ASN A 28 -4.260 -20.384 20.651 1.00 16.94 O +ATOM 237 ND2 ASN A 28 -3.203 -21.522 22.268 1.00 16.00 N +ATOM 238 N ASN A 29 -6.492 -19.822 25.876 1.00 14.18 N +ATOM 239 CA ASN A 29 -7.198 -18.955 26.806 1.00 14.22 C +ATOM 240 C ASN A 29 -6.317 -17.789 27.225 1.00 13.66 C +ATOM 241 O ASN A 29 -5.530 -17.889 28.167 1.00 14.66 O +ATOM 242 CB ASN A 29 -7.695 -19.758 28.007 1.00 15.01 C +ATOM 243 CG ASN A 29 -8.769 -20.762 27.622 1.00 15.76 C +ATOM 244 OD1 ASN A 29 -9.685 -20.450 26.860 1.00 16.72 O +ATOM 245 ND2 ASN A 29 -8.656 -21.974 28.138 1.00 16.31 N +ATOM 246 N GLY A 30 -6.443 -16.691 26.488 1.00 12.44 N +ATOM 247 CA GLY A 30 -5.703 -15.474 26.769 1.00 11.56 C +ATOM 248 C GLY A 30 -6.519 -14.537 27.625 1.00 10.87 C +ATOM 249 O GLY A 30 -7.609 -14.886 28.096 1.00 10.79 O +ATOM 250 N ALYS A 31 -5.996 -13.338 27.847 0.50 10.47 N +ATOM 251 N BLYS A 31 -5.973 -13.339 27.826 0.50 10.49 N +ATOM 252 CA ALYS A 31 -6.727 -12.308 28.569 0.50 10.23 C +ATOM 253 CA BLYS A 31 -6.602 -12.308 28.635 0.50 10.25 C +ATOM 254 C ALYS A 31 -6.352 -10.971 27.980 0.50 9.72 C +ATOM 255 C BLYS A 31 -6.383 -10.954 27.983 0.50 9.69 C +ATOM 256 O ALYS A 31 -5.355 -10.861 27.269 0.50 9.60 O +ATOM 257 O BLYS A 31 -5.587 -10.824 27.054 0.50 9.60 O +ATOM 258 CB ALYS A 31 -6.384 -12.321 30.060 0.50 10.47 C +ATOM 259 CB BLYS A 31 -6.013 -12.297 30.047 0.50 10.56 C +ATOM 260 CG ALYS A 31 -6.701 -13.624 30.776 0.50 10.78 C +ATOM 261 CG BLYS A 31 -5.894 -13.672 30.685 0.50 10.89 C +ATOM 262 CD ALYS A 31 -6.311 -13.545 32.237 0.50 11.03 C +ATOM 263 CD BLYS A 31 -5.323 -13.584 32.087 0.50 11.17 C +ATOM 264 CE ALYS A 31 -6.492 -14.877 32.940 0.50 11.25 C +ATOM 265 CE BLYS A 31 -5.393 -14.919 32.812 0.50 11.34 C +ATOM 266 NZ ALYS A 31 -5.639 -15.949 32.356 0.50 11.28 N +ATOM 267 NZ BLYS A 31 -6.757 -15.526 32.773 0.50 11.52 N +ATOM 268 N AVAL A 32 -7.151 -9.954 28.269 0.50 9.18 N +ATOM 269 N BVAL A 32 -7.087 -9.949 28.488 0.50 9.07 N +ATOM 270 CA AVAL A 32 -6.836 -8.624 27.790 0.50 8.82 C +ATOM 271 CA BVAL A 32 -7.043 -8.607 27.927 0.50 8.68 C +ATOM 272 C AVAL A 32 -6.502 -7.703 28.955 0.50 8.42 C +ATOM 273 C BVAL A 32 -6.566 -7.642 29.008 0.50 8.34 C +ATOM 274 O AVAL A 32 -6.956 -7.902 30.079 0.50 8.38 O +ATOM 275 O BVAL A 32 -6.995 -7.751 30.155 0.50 8.29 O +ATOM 276 CB AVAL A 32 -7.979 -8.021 26.949 0.50 8.87 C +ATOM 277 CB BVAL A 32 -8.448 -8.195 27.434 0.50 8.61 C +ATOM 278 CG1AVAL A 32 -8.276 -8.903 25.742 0.50 8.91 C +ATOM 279 CG1BVAL A 32 -8.475 -6.745 26.983 0.50 8.59 C +ATOM 280 CG2AVAL A 32 -9.218 -7.812 27.798 0.50 8.93 C +ATOM 281 CG2BVAL A 32 -8.908 -9.116 26.311 0.50 8.69 C +ATOM 282 N VAL A 33 -5.684 -6.701 28.664 1.00 8.01 N +ATOM 283 CA VAL A 33 -5.239 -5.710 29.653 1.00 7.53 C +ATOM 284 C VAL A 33 -5.333 -4.295 29.088 1.00 7.21 C +ATOM 285 O VAL A 33 -5.004 -4.058 27.928 1.00 7.08 O +ATOM 286 CB VAL A 33 -3.816 -6.010 30.179 1.00 7.49 C +ATOM 287 CG1 VAL A 33 -2.781 -5.970 29.058 1.00 7.47 C +ATOM 288 CG2 VAL A 33 -3.435 -5.048 31.296 1.00 7.45 C +ATOM 289 N LEU A 34 -5.779 -3.369 29.931 1.00 6.91 N +ATOM 290 CA LEU A 34 -5.930 -1.971 29.563 1.00 6.78 C +ATOM 291 C LEU A 34 -4.586 -1.260 29.596 1.00 6.75 C +ATOM 292 O LEU A 34 -3.790 -1.439 30.527 1.00 6.64 O +ATOM 293 CB LEU A 34 -6.908 -1.279 30.519 1.00 6.76 C +ATOM 294 CG LEU A 34 -7.138 0.226 30.357 1.00 6.82 C +ATOM 295 CD1 LEU A 34 -7.909 0.515 29.082 1.00 6.85 C +ATOM 296 CD2 LEU A 34 -7.884 0.749 31.571 1.00 6.81 C +ATOM 297 N ASP A 35 -4.342 -0.451 28.567 1.00 6.59 N +ATOM 298 CA ASP A 35 -3.148 0.384 28.499 1.00 6.64 C +ATOM 299 C ASP A 35 -3.022 1.305 29.719 1.00 6.76 C +ATOM 300 O ASP A 35 -4.004 1.868 30.204 1.00 6.70 O +ATOM 301 CB ASP A 35 -3.146 1.206 27.204 1.00 6.67 C +ATOM 302 CG ASP A 35 -1.971 2.159 27.120 1.00 6.66 C +ATOM 303 OD1 ASP A 35 -2.089 3.294 27.635 1.00 6.53 O +ATOM 304 OD2 ASP A 35 -0.921 1.781 26.557 1.00 6.75 O +ATOM 305 N ALA A 36 -1.787 1.456 30.185 1.00 6.88 N +ATOM 306 CA ALA A 36 -1.486 2.204 31.408 1.00 7.14 C +ATOM 307 C ALA A 36 -1.966 3.657 31.431 1.00 7.41 C +ATOM 308 O ALA A 36 -2.299 4.175 32.496 1.00 7.58 O +ATOM 309 CB ALA A 36 0.009 2.162 31.668 1.00 7.14 C +ATOM 310 N AASN A 37 -1.988 4.313 30.271 0.50 7.57 N +ATOM 311 N BASN A 37 -2.016 4.305 30.271 0.50 7.61 N +ATOM 312 CA AASN A 37 -2.398 5.722 30.193 0.50 7.71 C +ATOM 313 CA BASN A 37 -2.396 5.719 30.197 0.50 7.78 C +ATOM 314 C AASN A 37 -3.833 5.991 30.634 0.50 7.86 C +ATOM 315 C BASN A 37 -3.859 6.017 30.519 0.50 7.88 C +ATOM 316 O AASN A 37 -4.145 7.094 31.087 0.50 8.04 O +ATOM 317 O BASN A 37 -4.223 7.171 30.736 0.50 8.00 O +ATOM 318 CB AASN A 37 -2.197 6.277 28.781 0.50 7.73 C +ATOM 319 CB BASN A 37 -2.055 6.272 28.818 0.50 7.88 C +ATOM 320 CG AASN A 37 -1.116 7.333 28.723 0.50 7.73 C +ATOM 321 CG BASN A 37 -0.568 6.306 28.572 0.50 7.99 C +ATOM 322 OD1AASN A 37 -0.135 7.274 29.458 0.50 7.81 O +ATOM 323 OD1BASN A 37 0.123 7.204 29.043 0.50 8.17 O +ATOM 324 ND2AASN A 37 -1.297 8.314 27.846 0.50 7.80 N +ATOM 325 ND2BASN A 37 -0.063 5.318 27.843 0.50 8.09 N +ATOM 326 N TRP A 38 -4.697 4.984 30.521 1.00 7.93 N +ATOM 327 CA TRP A 38 -6.093 5.119 30.920 1.00 8.14 C +ATOM 328 C TRP A 38 -6.300 4.943 32.430 1.00 8.32 C +ATOM 329 O TRP A 38 -7.380 5.225 32.930 1.00 8.64 O +ATOM 330 CB TRP A 38 -6.955 4.099 30.168 1.00 8.23 C +ATOM 331 CG TRP A 38 -7.446 4.578 28.835 1.00 8.33 C +ATOM 332 CD1 TRP A 38 -8.693 5.050 28.554 1.00 8.43 C +ATOM 333 CD2 TRP A 38 -6.715 4.621 27.601 1.00 8.44 C +ATOM 334 NE1 TRP A 38 -8.787 5.392 27.231 1.00 8.59 N +ATOM 335 CE2 TRP A 38 -7.586 5.142 26.620 1.00 8.50 C +ATOM 336 CE3 TRP A 38 -5.408 4.282 27.231 1.00 8.48 C +ATOM 337 CZ2 TRP A 38 -7.200 5.313 25.288 1.00 8.61 C +ATOM 338 CZ3 TRP A 38 -5.018 4.461 25.902 1.00 8.58 C +ATOM 339 CH2 TRP A 38 -5.912 4.974 24.950 1.00 8.62 C +ATOM 340 N ARG A 39 -5.277 4.485 33.151 1.00 8.40 N +ATOM 341 CA ARG A 39 -5.430 4.103 34.554 1.00 8.65 C +ATOM 342 C ARG A 39 -5.293 5.256 35.532 1.00 9.21 C +ATOM 343 O ARG A 39 -4.724 6.301 35.221 1.00 9.42 O +ATOM 344 CB ARG A 39 -4.384 3.049 34.931 1.00 8.43 C +ATOM 345 CG ARG A 39 -4.540 1.726 34.212 1.00 8.16 C +ATOM 346 CD ARG A 39 -3.418 0.760 34.556 1.00 7.97 C +ATOM 347 NE ARG A 39 -3.560 -0.458 33.776 1.00 7.74 N +ATOM 348 CZ ARG A 39 -4.374 -1.469 34.071 1.00 7.60 C +ATOM 349 NH1 ARG A 39 -5.113 -1.459 35.177 1.00 7.46 N +ATOM 350 NH2 ARG A 39 -4.442 -2.510 33.253 1.00 7.49 N +ATOM 351 N TRP A 40 -5.798 5.023 36.735 1.00 9.89 N +ATOM 352 CA TRP A 40 -5.533 5.880 37.879 1.00 10.36 C +ATOM 353 C TRP A 40 -4.045 5.787 38.233 1.00 10.23 C +ATOM 354 O TRP A 40 -3.508 4.688 38.349 1.00 10.39 O +ATOM 355 CB TRP A 40 -6.395 5.410 39.047 1.00 11.09 C +ATOM 356 CG TRP A 40 -6.385 6.279 40.249 1.00 11.73 C +ATOM 357 CD1 TRP A 40 -6.054 7.601 40.318 1.00 12.05 C +ATOM 358 CD2 TRP A 40 -6.783 5.896 41.565 1.00 12.30 C +ATOM 359 NE1 TRP A 40 -6.186 8.050 41.606 1.00 12.46 N +ATOM 360 CE2 TRP A 40 -6.640 7.023 42.390 1.00 12.49 C +ATOM 361 CE3 TRP A 40 -7.229 4.698 42.128 1.00 12.41 C +ATOM 362 CZ2 TRP A 40 -6.938 6.991 43.755 1.00 12.80 C +ATOM 363 CZ3 TRP A 40 -7.529 4.666 43.477 1.00 12.60 C +ATOM 364 CH2 TRP A 40 -7.374 5.802 44.276 1.00 12.73 C +ATOM 365 N LEU A 41 -3.390 6.938 38.367 1.00 9.93 N +ATOM 366 CA LEU A 41 -1.976 7.008 38.743 1.00 9.73 C +ATOM 367 C LEU A 41 -1.868 7.800 40.037 1.00 9.53 C +ATOM 368 O LEU A 41 -2.132 9.007 40.054 1.00 9.32 O +ATOM 369 CB LEU A 41 -1.153 7.678 37.643 1.00 9.74 C +ATOM 370 CG LEU A 41 0.359 7.731 37.873 1.00 9.77 C +ATOM 371 CD1 LEU A 41 0.982 6.357 37.688 1.00 9.75 C +ATOM 372 CD2 LEU A 41 0.998 8.753 36.941 1.00 9.78 C +ATOM 373 N HIS A 42 -1.484 7.127 41.119 1.00 9.34 N +ATOM 374 CA HIS A 42 -1.477 7.748 42.438 1.00 9.46 C +ATOM 375 C HIS A 42 -0.219 7.407 43.222 1.00 9.47 C +ATOM 376 O HIS A 42 0.540 6.507 42.856 1.00 9.24 O +ATOM 377 CB HIS A 42 -2.719 7.326 43.233 1.00 9.53 C +ATOM 378 CG HIS A 42 -2.807 5.853 43.481 1.00 9.47 C +ATOM 379 ND1 HIS A 42 -2.055 5.218 44.443 1.00 9.45 N +ATOM 380 CD2 HIS A 42 -3.554 4.889 42.891 1.00 9.49 C +ATOM 381 CE1 HIS A 42 -2.333 3.928 44.437 1.00 9.50 C +ATOM 382 NE2 HIS A 42 -3.238 3.702 43.503 1.00 9.42 N +ATOM 383 N SER A 43 -0.027 8.132 44.320 1.00 9.74 N +ATOM 384 CA SER A 43 1.103 7.918 45.208 1.00 10.15 C +ATOM 385 C SER A 43 1.127 6.488 45.724 1.00 10.33 C +ATOM 386 O SER A 43 0.078 5.880 45.953 1.00 10.06 O +ATOM 387 CB SER A 43 1.008 8.866 46.406 1.00 10.30 C +ATOM 388 OG SER A 43 2.027 8.595 47.353 1.00 10.79 O +ATOM 389 N THR A 44 2.327 5.958 45.929 1.00 10.78 N +ATOM 390 CA THR A 44 2.484 4.652 46.570 1.00 11.47 C +ATOM 391 C THR A 44 2.068 4.621 48.057 1.00 12.50 C +ATOM 392 O THR A 44 1.910 3.540 48.615 1.00 12.59 O +ATOM 393 CB THR A 44 3.940 4.170 46.462 1.00 11.28 C +ATOM 394 OG1 THR A 44 4.812 5.225 46.877 1.00 10.96 O +ATOM 395 CG2 THR A 44 4.269 3.780 45.034 1.00 11.23 C +ATOM 396 N ASER A 45 1.918 5.783 48.692 0.50 13.22 N +ATOM 397 N BSER A 45 1.901 5.793 48.672 0.50 13.26 N +ATOM 398 CA ASER A 45 1.523 5.836 50.105 0.50 13.98 C +ATOM 399 CA BSER A 45 1.526 5.902 50.087 0.50 14.06 C +ATOM 400 C ASER A 45 0.064 6.238 50.327 0.50 14.57 C +ATOM 401 C BSER A 45 0.022 6.019 50.320 0.50 14.63 C +ATOM 402 O ASER A 45 -0.322 6.536 51.461 0.50 14.83 O +ATOM 403 O BSER A 45 -0.447 5.866 51.447 0.50 15.11 O +ATOM 404 CB ASER A 45 2.432 6.790 50.888 0.50 14.24 C +ATOM 405 CB BSER A 45 2.193 7.127 50.706 0.50 14.32 C +ATOM 406 OG ASER A 45 2.666 7.992 50.174 0.50 14.51 O +ATOM 407 OG BSER A 45 3.585 7.114 50.476 0.50 14.70 O +ATOM 408 N GLY A 46 -0.737 6.280 49.264 1.00 14.94 N +ATOM 409 CA GLY A 46 -2.163 6.560 49.408 1.00 15.51 C +ATOM 410 C GLY A 46 -2.843 6.888 48.101 1.00 15.58 C +ATOM 411 O GLY A 46 -2.393 6.469 47.035 1.00 15.84 O +ATOM 412 N ASER A 47 -3.930 7.650 48.184 0.50 15.59 N +ATOM 413 N BSER A 47 -3.918 7.665 48.185 0.50 15.51 N +ATOM 414 CA ASER A 47 -4.790 7.915 47.031 0.50 15.41 C +ATOM 415 CA BSER A 47 -4.786 7.919 47.040 0.50 15.29 C +ATOM 416 C ASER A 47 -4.503 9.235 46.311 0.50 15.12 C +ATOM 417 C BSER A 47 -4.512 9.242 46.322 0.50 15.05 C +ATOM 418 O ASER A 47 -5.193 9.565 45.345 0.50 15.20 O +ATOM 419 O BSER A 47 -5.218 9.580 45.371 0.50 15.14 O +ATOM 420 CB ASER A 47 -6.255 7.885 47.469 0.50 15.61 C +ATOM 421 CB BSER A 47 -6.242 7.873 47.497 0.50 15.40 C +ATOM 422 OG ASER A 47 -6.465 8.732 48.582 0.50 15.88 O +ATOM 423 OG BSER A 47 -6.478 6.703 48.259 0.50 15.50 O +ATOM 424 N THR A 48 -3.497 9.985 46.763 1.00 14.73 N +ATOM 425 CA THR A 48 -3.141 11.262 46.125 1.00 14.42 C +ATOM 426 C THR A 48 -2.727 11.041 44.664 1.00 13.55 C +ATOM 427 O THR A 48 -1.888 10.188 44.386 1.00 13.34 O +ATOM 428 CB THR A 48 -2.001 11.971 46.881 1.00 14.79 C +ATOM 429 OG1 THR A 48 -2.393 12.169 48.247 1.00 15.66 O +ATOM 430 CG2 THR A 48 -1.676 13.319 46.249 1.00 14.96 C +ATOM 431 N AASN A 49 -3.328 11.797 43.747 0.50 13.20 N +ATOM 432 N BASN A 49 -3.324 11.803 43.748 0.50 13.25 N +ATOM 433 CA AASN A 49 -3.050 11.657 42.319 0.50 12.94 C +ATOM 434 CA BASN A 49 -3.044 11.662 42.320 0.50 13.02 C +ATOM 435 C AASN A 49 -1.660 12.162 41.953 0.50 12.63 C +ATOM 436 C BASN A 49 -1.645 12.150 41.974 0.50 12.68 C +ATOM 437 O AASN A 49 -1.235 13.219 42.418 0.50 12.84 O +ATOM 438 O BASN A 49 -1.197 13.179 42.480 0.50 12.90 O +ATOM 439 CB AASN A 49 -4.074 12.442 41.494 0.50 13.07 C +ATOM 440 CB BASN A 49 -4.039 12.472 41.484 0.50 13.18 C +ATOM 441 CG AASN A 49 -5.417 11.746 41.401 0.50 13.10 C +ATOM 442 CG BASN A 49 -5.469 12.324 41.959 0.50 13.32 C +ATOM 443 OD1AASN A 49 -5.528 10.551 41.643 0.50 13.27 O +ATOM 444 OD1BASN A 49 -6.298 13.215 41.757 0.50 13.36 O +ATOM 445 ND2AASN A 49 -6.446 12.499 41.033 0.50 13.36 N +ATOM 446 ND2BASN A 49 -5.767 11.204 42.595 0.50 13.44 N +ATOM 447 N CYS A 50 -0.958 11.411 41.110 1.00 12.19 N +ATOM 448 CA CYS A 50 0.289 11.889 40.520 1.00 11.82 C +ATOM 449 C CYS A 50 -0.034 12.720 39.291 1.00 11.83 C +ATOM 450 O CYS A 50 0.745 13.583 38.884 1.00 11.76 O +ATOM 451 CB CYS A 50 1.170 10.729 40.109 1.00 11.46 C +ATOM 452 SG CYS A 50 1.923 9.901 41.514 1.00 11.00 S +ATOM 453 N TYR A 51 -1.189 12.435 38.702 1.00 12.03 N +ATOM 454 CA TYR A 51 -1.632 13.076 37.479 1.00 12.21 C +ATOM 455 C TYR A 51 -3.145 13.023 37.458 1.00 12.60 C +ATOM 456 O TYR A 51 -3.733 12.018 37.831 1.00 13.11 O +ATOM 457 CB TYR A 51 -1.080 12.302 36.280 1.00 12.03 C +ATOM 458 CG TYR A 51 -1.498 12.811 34.915 1.00 11.96 C +ATOM 459 CD1 TYR A 51 -2.729 12.462 34.363 1.00 12.02 C +ATOM 460 CD2 TYR A 51 -0.646 13.610 34.163 1.00 11.87 C +ATOM 461 CE1 TYR A 51 -3.106 12.917 33.108 1.00 12.00 C +ATOM 462 CE2 TYR A 51 -1.011 14.068 32.908 1.00 12.04 C +ATOM 463 CZ TYR A 51 -2.243 13.715 32.385 1.00 12.17 C +ATOM 464 OH TYR A 51 -2.605 14.162 31.138 1.00 12.60 O +ATOM 465 N THR A 52 -3.778 14.108 37.033 1.00 13.18 N +ATOM 466 CA THR A 52 -5.182 14.045 36.644 1.00 13.41 C +ATOM 467 C THR A 52 -5.485 15.239 35.754 1.00 13.30 C +ATOM 468 O THR A 52 -4.718 16.206 35.724 1.00 13.39 O +ATOM 469 CB THR A 52 -6.143 13.984 37.854 1.00 13.90 C +ATOM 470 OG1 THR A 52 -7.430 13.518 37.419 1.00 14.09 O +ATOM 471 CG2 THR A 52 -6.289 15.348 38.526 1.00 13.91 C +ATOM 472 N GLY A 53 -6.595 15.154 35.027 1.00 13.35 N +ATOM 473 CA GLY A 53 -6.898 16.127 33.995 1.00 13.20 C +ATOM 474 C GLY A 53 -5.805 16.031 32.954 1.00 13.09 C +ATOM 475 O GLY A 53 -5.687 15.021 32.262 1.00 13.63 O +ATOM 476 N ASN A 54 -4.989 17.073 32.861 1.00 12.82 N +ATOM 477 CA ASN A 54 -3.830 17.059 31.979 1.00 12.67 C +ATOM 478 C ASN A 54 -2.553 17.606 32.619 1.00 12.41 C +ATOM 479 O ASN A 54 -1.657 18.048 31.906 1.00 12.73 O +ATOM 480 CB ASN A 54 -4.139 17.814 30.679 1.00 12.72 C +ATOM 481 CG ASN A 54 -4.463 19.282 30.905 1.00 12.89 C +ATOM 482 OD1 ASN A 54 -4.396 19.791 32.025 1.00 12.74 O +ATOM 483 ND2 ASN A 54 -4.830 19.968 29.833 1.00 13.06 N +ATOM 484 N ATHR A 55 -2.469 17.585 33.948 0.50 12.25 N +ATOM 485 N BTHR A 55 -2.476 17.550 33.951 0.50 12.55 N +ATOM 486 CA ATHR A 55 -1.272 18.072 34.632 0.50 12.05 C +ATOM 487 CA BTHR A 55 -1.355 18.121 34.706 0.50 12.57 C +ATOM 488 C ATHR A 55 -0.806 17.120 35.718 0.50 12.02 C +ATOM 489 C BTHR A 55 -0.817 17.125 35.738 0.50 12.31 C +ATOM 490 O ATHR A 55 -1.598 16.377 36.304 0.50 12.06 O +ATOM 491 O BTHR A 55 -1.582 16.346 36.311 0.50 12.33 O +ATOM 492 CB ATHR A 55 -1.485 19.460 35.262 0.50 11.93 C +ATOM 493 CB BTHR A 55 -1.786 19.405 35.442 0.50 12.84 C +ATOM 494 OG1ATHR A 55 -2.579 19.408 36.186 0.50 11.73 O +ATOM 495 OG1BTHR A 55 -2.531 20.249 34.551 0.50 13.17 O +ATOM 496 CG2ATHR A 55 -1.757 20.506 34.181 0.50 11.89 C +ATOM 497 CG2BTHR A 55 -0.573 20.163 35.964 0.50 13.01 C +ATOM 498 N TRP A 56 0.496 17.164 35.971 1.00 12.01 N +ATOM 499 CA TRP A 56 1.137 16.334 36.978 1.00 12.04 C +ATOM 500 C TRP A 56 1.200 17.054 38.319 1.00 12.46 C +ATOM 501 O TRP A 56 1.310 18.284 38.378 1.00 12.95 O +ATOM 502 CB TRP A 56 2.568 16.019 36.557 1.00 11.73 C +ATOM 503 CG TRP A 56 2.694 15.193 35.323 1.00 11.41 C +ATOM 504 CD1 TRP A 56 2.700 15.637 34.033 1.00 11.38 C +ATOM 505 CD2 TRP A 56 2.884 13.777 35.263 1.00 11.29 C +ATOM 506 NE1 TRP A 56 2.868 14.577 33.173 1.00 11.27 N +ATOM 507 CE2 TRP A 56 2.981 13.425 33.903 1.00 11.12 C +ATOM 508 CE3 TRP A 56 2.968 12.768 36.229 1.00 11.12 C +ATOM 509 CZ2 TRP A 56 3.164 12.107 33.483 1.00 11.26 C +ATOM 510 CZ3 TRP A 56 3.144 11.457 35.809 1.00 11.18 C +ATOM 511 CH2 TRP A 56 3.242 11.141 34.453 1.00 11.20 C +ATOM 512 N ASN A 57 1.161 16.277 39.393 1.00 12.75 N +ATOM 513 CA ASN A 57 1.526 16.769 40.712 1.00 13.28 C +ATOM 514 C ASN A 57 3.046 16.835 40.775 1.00 13.61 C +ATOM 515 O ASN A 57 3.712 15.799 40.789 1.00 13.19 O +ATOM 516 CB ASN A 57 0.978 15.836 41.788 1.00 13.71 C +ATOM 517 CG ASN A 57 1.313 16.297 43.192 1.00 14.33 C +ATOM 518 OD1 ASN A 57 2.447 16.681 43.479 1.00 14.29 O +ATOM 519 ND2 ASN A 57 0.319 16.254 44.083 1.00 15.36 N +ATOM 520 N THR A 58 3.598 18.045 40.806 1.00 14.27 N +ATOM 521 CA THR A 58 5.052 18.217 40.707 1.00 15.03 C +ATOM 522 C THR A 58 5.799 17.951 42.016 1.00 14.95 C +ATOM 523 O THR A 58 7.027 17.895 42.015 1.00 14.96 O +ATOM 524 CB THR A 58 5.436 19.623 40.204 1.00 15.78 C +ATOM 525 OG1 THR A 58 4.836 20.612 41.046 1.00 16.86 O +ATOM 526 CG2 THR A 58 4.983 19.820 38.763 1.00 16.18 C +ATOM 527 N THR A 59 5.076 17.800 43.122 1.00 14.72 N +ATOM 528 CA THR A 59 5.699 17.389 44.381 1.00 14.76 C +ATOM 529 C THR A 59 6.043 15.898 44.322 1.00 14.10 C +ATOM 530 O THR A 59 7.149 15.492 44.681 1.00 14.38 O +ATOM 531 CB THR A 59 4.787 17.696 45.584 1.00 15.30 C +ATOM 532 OG1 THR A 59 4.568 19.110 45.657 1.00 16.15 O +ATOM 533 CG2 THR A 59 5.407 17.204 46.895 1.00 15.48 C +ATOM 534 N LEU A 60 5.087 15.091 43.867 1.00 13.32 N +ATOM 535 CA LEU A 60 5.302 13.657 43.669 1.00 12.81 C +ATOM 536 C LEU A 60 6.179 13.377 42.447 1.00 12.37 C +ATOM 537 O LEU A 60 6.916 12.389 42.413 1.00 11.98 O +ATOM 538 CB LEU A 60 3.957 12.937 43.507 1.00 13.02 C +ATOM 539 CG LEU A 60 3.055 12.931 44.745 1.00 13.10 C +ATOM 540 CD1 LEU A 60 1.664 12.411 44.420 1.00 13.42 C +ATOM 541 CD2 LEU A 60 3.684 12.121 45.873 1.00 13.44 C +ATOM 542 N CYS A 61 6.099 14.256 41.450 1.00 11.83 N +ATOM 543 CA CYS A 61 6.777 14.052 40.172 1.00 11.69 C +ATOM 544 C CYS A 61 7.632 15.255 39.777 1.00 11.92 C +ATOM 545 O CYS A 61 7.325 15.945 38.807 1.00 11.79 O +ATOM 546 CB CYS A 61 5.738 13.762 39.092 1.00 11.45 C +ATOM 547 SG CYS A 61 4.927 12.166 39.326 1.00 11.08 S +ATOM 548 N PRO A 62 8.712 15.510 40.536 1.00 12.14 N +ATOM 549 CA PRO A 62 9.579 16.657 40.246 1.00 12.50 C +ATOM 550 C PRO A 62 10.533 16.395 39.081 1.00 12.57 C +ATOM 551 O PRO A 62 11.098 17.335 38.512 1.00 12.87 O +ATOM 552 CB PRO A 62 10.351 16.833 41.550 1.00 12.40 C +ATOM 553 CG PRO A 62 10.435 15.456 42.110 1.00 12.47 C +ATOM 554 CD PRO A 62 9.132 14.805 41.761 1.00 12.32 C +ATOM 555 N ASP A 63 10.717 15.123 38.747 1.00 12.55 N +ATOM 556 CA ASP A 63 11.467 14.716 37.568 1.00 12.69 C +ATOM 557 C ASP A 63 10.955 13.338 37.148 1.00 12.18 C +ATOM 558 O ASP A 63 10.151 12.731 37.851 1.00 11.52 O +ATOM 559 CB ASP A 63 12.964 14.676 37.876 1.00 13.44 C +ATOM 560 CG ASP A 63 13.302 13.705 38.990 1.00 14.05 C +ATOM 561 OD1 ASP A 63 13.520 12.514 38.703 1.00 14.62 O +ATOM 562 OD2 ASP A 63 13.350 14.129 40.165 1.00 15.76 O +ATOM 563 N ASP A 64 11.434 12.849 36.012 1.00 11.93 N +ATOM 564 CA ASP A 64 10.944 11.596 35.443 1.00 11.70 C +ATOM 565 C ASP A 64 11.212 10.370 36.315 1.00 11.60 C +ATOM 566 O ASP A 64 10.379 9.467 36.395 1.00 11.31 O +ATOM 567 CB ASP A 64 11.551 11.380 34.057 1.00 11.70 C +ATOM 568 CG ASP A 64 10.992 12.340 33.011 1.00 11.86 C +ATOM 569 OD1 ASP A 64 9.981 13.023 33.279 1.00 11.75 O +ATOM 570 OD2 ASP A 64 11.561 12.376 31.898 1.00 12.28 O +ATOM 571 N THR A 65 12.375 10.336 36.956 1.00 11.47 N +ATOM 572 CA THR A 65 12.780 9.180 37.751 1.00 11.48 C +ATOM 573 C THR A 65 12.037 9.136 39.082 1.00 11.25 C +ATOM 574 O THR A 65 11.455 8.115 39.434 1.00 10.80 O +ATOM 575 CB THR A 65 14.300 9.185 37.996 1.00 11.87 C +ATOM 576 OG1 THR A 65 14.976 9.103 36.737 1.00 12.41 O +ATOM 577 CG2 THR A 65 14.717 8.008 38.861 1.00 12.08 C +ATOM 578 N THR A 66 12.059 10.248 39.810 1.00 10.97 N +ATOM 579 CA THR A 66 11.361 10.345 41.092 1.00 10.87 C +ATOM 580 C THR A 66 9.876 10.054 40.930 1.00 10.50 C +ATOM 581 O THR A 66 9.269 9.391 41.773 1.00 10.40 O +ATOM 582 CB THR A 66 11.551 11.740 41.711 1.00 11.14 C +ATOM 583 OG1 THR A 66 12.955 12.037 41.752 1.00 11.68 O +ATOM 584 CG2 THR A 66 10.983 11.790 43.114 1.00 11.34 C +ATOM 585 N CYS A 67 9.299 10.549 39.840 1.00 10.15 N +ATOM 586 CA CYS A 67 7.892 10.302 39.532 1.00 10.01 C +ATOM 587 C CYS A 67 7.623 8.801 39.404 1.00 9.93 C +ATOM 588 O CYS A 67 6.691 8.283 40.004 1.00 9.76 O +ATOM 589 CB CYS A 67 7.510 11.027 38.240 1.00 10.14 C +ATOM 590 SG CYS A 67 5.748 11.033 37.839 1.00 10.31 S +ATOM 591 N ALA A 68 8.455 8.101 38.640 1.00 9.77 N +ATOM 592 CA ALA A 68 8.323 6.649 38.503 1.00 9.74 C +ATOM 593 C ALA A 68 8.477 5.908 39.834 1.00 9.83 C +ATOM 594 O ALA A 68 7.818 4.901 40.056 1.00 9.68 O +ATOM 595 CB ALA A 68 9.330 6.122 37.495 1.00 9.80 C +ATOM 596 N GLN A 69 9.351 6.401 40.709 1.00 10.03 N +ATOM 597 CA GLN A 69 9.527 5.805 42.038 1.00 10.27 C +ATOM 598 C GLN A 69 8.307 6.017 42.924 1.00 9.98 C +ATOM 599 O GLN A 69 7.969 5.156 43.739 1.00 9.64 O +ATOM 600 CB GLN A 69 10.742 6.405 42.745 1.00 10.92 C +ATOM 601 CG GLN A 69 12.074 6.080 42.093 1.00 11.68 C +ATOM 602 CD GLN A 69 13.208 6.938 42.622 1.00 12.52 C +ATOM 603 OE1 GLN A 69 12.995 7.859 43.416 1.00 14.13 O +ATOM 604 NE2 GLN A 69 14.418 6.644 42.184 1.00 13.36 N +ATOM 605 N ASN A 70 7.662 7.173 42.772 1.00 9.85 N +ATOM 606 CA ASN A 70 6.588 7.582 43.672 1.00 9.86 C +ATOM 607 C ASN A 70 5.181 7.211 43.234 1.00 9.67 C +ATOM 608 O ASN A 70 4.259 7.308 44.035 1.00 9.78 O +ATOM 609 CB ASN A 70 6.618 9.100 43.879 1.00 10.03 C +ATOM 610 CG ASN A 70 7.792 9.561 44.717 1.00 10.30 C +ATOM 611 OD1 ASN A 70 8.461 8.761 45.375 1.00 10.69 O +ATOM 612 ND2 ASN A 70 8.047 10.866 44.700 1.00 10.31 N +ATOM 613 N CYS A 71 5.004 6.807 41.978 1.00 9.47 N +ATOM 614 CA CYS A 71 3.659 6.710 41.408 1.00 9.55 C +ATOM 615 C CYS A 71 3.283 5.308 40.953 1.00 9.17 C +ATOM 616 O CYS A 71 4.066 4.615 40.296 1.00 9.20 O +ATOM 617 CB CYS A 71 3.532 7.694 40.260 1.00 9.77 C +ATOM 618 SG CYS A 71 3.751 9.399 40.804 1.00 10.33 S +ATOM 619 N ALA A 72 2.058 4.917 41.298 1.00 8.75 N +ATOM 620 CA ALA A 72 1.565 3.567 41.090 1.00 8.46 C +ATOM 621 C ALA A 72 0.350 3.572 40.175 1.00 8.49 C +ATOM 622 O ALA A 72 -0.547 4.402 40.334 1.00 8.30 O +ATOM 623 CB ALA A 72 1.202 2.941 42.431 1.00 8.41 C +ATOM 624 N LEU A 73 0.341 2.636 39.225 1.00 8.43 N +ATOM 625 CA LEU A 73 -0.812 2.374 38.369 1.00 8.50 C +ATOM 626 C LEU A 73 -1.722 1.381 39.070 1.00 8.77 C +ATOM 627 O LEU A 73 -1.256 0.355 39.556 1.00 8.93 O +ATOM 628 CB LEU A 73 -0.360 1.768 37.042 1.00 8.47 C +ATOM 629 CG LEU A 73 0.483 2.684 36.163 1.00 8.50 C +ATOM 630 CD1 LEU A 73 1.231 1.883 35.112 1.00 8.56 C +ATOM 631 CD2 LEU A 73 -0.393 3.752 35.516 1.00 8.49 C +ATOM 632 N ASP A 74 -3.018 1.658 39.128 1.00 8.90 N +ATOM 633 CA ASP A 74 -3.893 0.743 39.850 1.00 9.01 C +ATOM 634 C ASP A 74 -4.836 -0.041 38.935 1.00 8.94 C +ATOM 635 O ASP A 74 -4.824 0.116 37.710 1.00 8.73 O +ATOM 636 CB ASP A 74 -4.629 1.472 40.979 1.00 9.24 C +ATOM 637 CG ASP A 74 -4.599 0.690 42.277 1.00 9.32 C +ATOM 638 OD1 ASP A 74 -4.903 -0.514 42.239 1.00 9.64 O +ATOM 639 OD2 ASP A 74 -4.237 1.248 43.329 1.00 9.18 O +ATOM 640 N GLY A 75 -5.618 -0.928 39.544 1.00 9.13 N +ATOM 641 CA GLY A 75 -6.501 -1.812 38.807 1.00 9.31 C +ATOM 642 C GLY A 75 -7.612 -1.062 38.113 1.00 9.61 C +ATOM 643 O GLY A 75 -7.937 0.065 38.486 1.00 9.79 O +ATOM 644 N ALA A 76 -8.185 -1.699 37.097 1.00 9.75 N +ATOM 645 CA ALA A 76 -9.215 -1.086 36.262 1.00 10.17 C +ATOM 646 C ALA A 76 -10.553 -1.807 36.377 1.00 10.57 C +ATOM 647 O ALA A 76 -10.610 -3.040 36.378 1.00 10.35 O +ATOM 648 CB ALA A 76 -8.764 -1.091 34.811 1.00 10.16 C +ATOM 649 N ASP A 77 -11.630 -1.029 36.470 1.00 11.37 N +ATOM 650 CA ASP A 77 -12.984 -1.565 36.366 1.00 11.98 C +ATOM 651 C ASP A 77 -13.324 -1.596 34.876 1.00 11.40 C +ATOM 652 O ASP A 77 -13.798 -0.605 34.311 1.00 11.13 O +ATOM 653 CB ASP A 77 -13.973 -0.690 37.141 1.00 13.29 C +ATOM 654 CG ASP A 77 -15.403 -1.206 37.078 1.00 14.40 C +ATOM 655 OD1 ASP A 77 -15.685 -2.195 36.365 1.00 15.48 O +ATOM 656 OD2 ASP A 77 -16.258 -0.602 37.758 1.00 16.78 O +ATOM 657 N TYR A 78 -13.068 -2.742 34.253 1.00 11.06 N +ATOM 658 CA TYR A 78 -13.088 -2.848 32.792 1.00 11.04 C +ATOM 659 C TYR A 78 -14.430 -2.437 32.188 1.00 11.60 C +ATOM 660 O TYR A 78 -14.481 -1.576 31.308 1.00 11.11 O +ATOM 661 CB TYR A 78 -12.652 -4.249 32.333 1.00 10.66 C +ATOM 662 CG TYR A 78 -11.147 -4.390 32.337 1.00 10.34 C +ATOM 663 CD1 TYR A 78 -10.445 -4.609 33.521 1.00 10.09 C +ATOM 664 CD2 TYR A 78 -10.419 -4.244 31.166 1.00 10.05 C +ATOM 665 CE1 TYR A 78 -9.062 -4.710 33.527 1.00 10.04 C +ATOM 666 CE2 TYR A 78 -9.037 -4.343 31.162 1.00 9.94 C +ATOM 667 CZ TYR A 78 -8.363 -4.575 32.346 1.00 9.86 C +ATOM 668 OH TYR A 78 -6.988 -4.667 32.352 1.00 9.69 O +ATOM 669 N GLU A 79 -15.514 -3.036 32.665 1.00 12.61 N +ATOM 670 CA GLU A 79 -16.834 -2.716 32.135 1.00 13.61 C +ATOM 671 C GLU A 79 -17.354 -1.375 32.658 1.00 13.45 C +ATOM 672 O GLU A 79 -17.795 -0.529 31.877 1.00 13.48 O +ATOM 673 CB GLU A 79 -17.825 -3.832 32.460 1.00 14.93 C +ATOM 674 CG GLU A 79 -19.223 -3.585 31.919 1.00 16.23 C +ATOM 675 CD GLU A 79 -20.172 -4.741 32.173 1.00 17.39 C +ATOM 676 OE1 GLU A 79 -19.767 -5.728 32.826 1.00 18.53 O +ATOM 677 OE2 GLU A 79 -21.331 -4.654 31.715 1.00 19.38 O +ATOM 678 N GLY A 80 -17.293 -1.183 33.972 1.00 13.18 N +ATOM 679 CA GLY A 80 -17.925 -0.034 34.619 1.00 13.23 C +ATOM 680 C GLY A 80 -17.317 1.319 34.307 1.00 13.25 C +ATOM 681 O GLY A 80 -18.032 2.321 34.208 1.00 13.79 O +ATOM 682 N THR A 81 -15.996 1.353 34.161 1.00 12.96 N +ATOM 683 CA THR A 81 -15.278 2.590 33.901 1.00 12.76 C +ATOM 684 C THR A 81 -14.916 2.765 32.421 1.00 12.00 C +ATOM 685 O THR A 81 -15.010 3.868 31.886 1.00 12.07 O +ATOM 686 CB THR A 81 -14.001 2.662 34.762 1.00 13.14 C +ATOM 687 OG1 THR A 81 -14.363 2.560 36.147 1.00 13.98 O +ATOM 688 CG2 THR A 81 -13.246 3.970 34.522 1.00 13.33 C +ATOM 689 N TYR A 82 -14.514 1.678 31.767 1.00 11.21 N +ATOM 690 CA TYR A 82 -13.928 1.768 30.428 1.00 10.80 C +ATOM 691 C TYR A 82 -14.790 1.192 29.309 1.00 10.58 C +ATOM 692 O TYR A 82 -14.439 1.324 28.136 1.00 10.40 O +ATOM 693 CB TYR A 82 -12.538 1.125 30.442 1.00 10.51 C +ATOM 694 CG TYR A 82 -11.629 1.802 31.437 1.00 10.52 C +ATOM 695 CD1 TYR A 82 -11.046 3.033 31.146 1.00 10.35 C +ATOM 696 CD2 TYR A 82 -11.383 1.237 32.687 1.00 10.39 C +ATOM 697 CE1 TYR A 82 -10.231 3.675 32.063 1.00 10.50 C +ATOM 698 CE2 TYR A 82 -10.572 1.871 33.609 1.00 10.49 C +ATOM 699 CZ TYR A 82 -9.990 3.083 33.294 1.00 10.52 C +ATOM 700 OH TYR A 82 -9.185 3.710 34.215 1.00 10.80 O +ATOM 701 N GLY A 83 -15.916 0.573 29.654 1.00 10.42 N +ATOM 702 CA GLY A 83 -16.823 0.021 28.653 1.00 10.37 C +ATOM 703 C GLY A 83 -16.200 -1.108 27.860 1.00 10.39 C +ATOM 704 O GLY A 83 -16.498 -1.280 26.675 1.00 10.33 O +ATOM 705 N ILE A 84 -15.340 -1.880 28.523 1.00 10.46 N +ATOM 706 CA ILE A 84 -14.658 -3.013 27.923 1.00 10.77 C +ATOM 707 C ILE A 84 -15.288 -4.295 28.459 1.00 11.31 C +ATOM 708 O ILE A 84 -15.323 -4.509 29.669 1.00 11.22 O +ATOM 709 CB ILE A 84 -13.157 -3.012 28.287 1.00 10.57 C +ATOM 710 CG1 ILE A 84 -12.485 -1.723 27.796 1.00 10.44 C +ATOM 711 CG2 ILE A 84 -12.469 -4.250 27.722 1.00 10.46 C +ATOM 712 CD1 ILE A 84 -11.069 -1.531 28.302 1.00 10.37 C +ATOM 713 N ATHR A 85 -15.796 -5.139 27.567 0.75 11.72 N +ATOM 714 N BTHR A 85 -15.775 -5.134 27.544 0.25 11.67 N +ATOM 715 CA ATHR A 85 -16.347 -6.425 27.976 0.75 12.35 C +ATOM 716 CA BTHR A 85 -16.401 -6.411 27.881 0.25 12.12 C +ATOM 717 C ATHR A 85 -15.794 -7.524 27.081 0.75 12.77 C +ATOM 718 C BTHR A 85 -15.762 -7.518 27.052 0.25 12.72 C +ATOM 719 O ATHR A 85 -15.868 -7.447 25.858 0.75 12.78 O +ATOM 720 O BTHR A 85 -15.756 -7.444 25.823 0.25 12.73 O +ATOM 721 CB ATHR A 85 -17.891 -6.423 27.975 0.75 12.56 C +ATOM 722 CB BTHR A 85 -17.911 -6.393 27.569 0.25 12.02 C +ATOM 723 OG1ATHR A 85 -18.376 -6.042 26.689 0.75 12.84 O +ATOM 724 OG1BTHR A 85 -18.512 -5.227 28.142 0.25 11.90 O +ATOM 725 CG2ATHR A 85 -18.432 -5.455 29.020 0.75 12.73 C +ATOM 726 CG2BTHR A 85 -18.593 -7.638 28.121 0.25 12.01 C +ATOM 727 N ALA A 86 -15.218 -8.534 27.719 1.00 13.52 N +ATOM 728 CA ALA A 86 -14.621 -9.675 27.027 1.00 14.59 C +ATOM 729 C ALA A 86 -15.301 -10.943 27.506 1.00 16.05 C +ATOM 730 O ALA A 86 -15.304 -11.242 28.704 1.00 17.32 O +ATOM 731 CB ALA A 86 -13.133 -9.737 27.298 1.00 14.84 C +ATOM 732 N SER A 87 -15.896 -11.675 26.571 1.00 16.87 N +ATOM 733 CA SER A 87 -16.579 -12.923 26.881 1.00 17.40 C +ATOM 734 C SER A 87 -16.314 -13.925 25.769 1.00 16.58 C +ATOM 735 O SER A 87 -16.473 -13.599 24.590 1.00 16.90 O +ATOM 736 CB SER A 87 -18.082 -12.680 27.014 1.00 18.30 C +ATOM 737 OG SER A 87 -18.744 -13.846 27.474 1.00 20.25 O +ATOM 738 N GLY A 88 -15.906 -15.136 26.139 1.00 15.30 N +ATOM 739 CA GLY A 88 -15.668 -16.187 25.159 1.00 14.39 C +ATOM 740 C GLY A 88 -14.613 -15.758 24.156 1.00 13.47 C +ATOM 741 O GLY A 88 -13.492 -15.442 24.545 1.00 13.35 O +ATOM 742 N ASN A 89 -14.988 -15.726 22.873 1.00 12.60 N +ATOM 743 CA ASN A 89 -14.099 -15.308 21.780 1.00 12.03 C +ATOM 744 C ASN A 89 -14.234 -13.833 21.393 1.00 11.19 C +ATOM 745 O ASN A 89 -13.649 -13.418 20.398 1.00 10.71 O +ATOM 746 CB ASN A 89 -14.393 -16.115 20.499 1.00 12.44 C +ATOM 747 CG ASN A 89 -14.120 -17.598 20.635 1.00 12.87 C +ATOM 748 OD1 ASN A 89 -13.444 -18.047 21.550 1.00 13.66 O +ATOM 749 ND2 ASN A 89 -14.629 -18.370 19.682 1.00 13.10 N +ATOM 750 N SER A 90 -15.007 -13.053 22.149 1.00 10.52 N +ATOM 751 CA SER A 90 -15.387 -11.703 21.730 1.00 10.19 C +ATOM 752 C SER A 90 -14.899 -10.625 22.687 1.00 9.80 C +ATOM 753 O SER A 90 -14.948 -10.797 23.904 1.00 9.73 O +ATOM 754 CB SER A 90 -16.906 -11.592 21.604 1.00 10.31 C +ATOM 755 OG SER A 90 -17.417 -12.581 20.724 1.00 10.92 O +ATOM 756 N LEU A 91 -14.444 -9.513 22.115 1.00 9.26 N +ATOM 757 CA LEU A 91 -14.060 -8.324 22.859 1.00 9.14 C +ATOM 758 C LEU A 91 -14.853 -7.137 22.332 1.00 9.08 C +ATOM 759 O LEU A 91 -14.752 -6.796 21.148 1.00 9.07 O +ATOM 760 CB LEU A 91 -12.566 -8.043 22.692 1.00 9.04 C +ATOM 761 CG LEU A 91 -12.060 -6.748 23.344 1.00 8.98 C +ATOM 762 CD1 LEU A 91 -12.248 -6.781 24.850 1.00 8.90 C +ATOM 763 CD2 LEU A 91 -10.599 -6.487 22.999 1.00 9.07 C +ATOM 764 N ARG A 92 -15.640 -6.518 23.208 1.00 8.92 N +ATOM 765 CA ARG A 92 -16.364 -5.305 22.874 1.00 9.11 C +ATOM 766 C ARG A 92 -15.744 -4.098 23.576 1.00 8.86 C +ATOM 767 O ARG A 92 -15.521 -4.123 24.786 1.00 8.64 O +ATOM 768 CB ARG A 92 -17.829 -5.429 23.276 1.00 9.36 C +ATOM 769 CG ARG A 92 -18.628 -4.166 23.006 1.00 9.89 C +ATOM 770 CD ARG A 92 -20.114 -4.360 23.228 1.00 10.50 C +ATOM 771 NE ARG A 92 -20.792 -3.068 23.211 1.00 11.22 N +ATOM 772 CZ ARG A 92 -22.058 -2.858 22.859 1.00 12.03 C +ATOM 773 NH1 ARG A 92 -22.848 -3.856 22.475 1.00 12.44 N +ATOM 774 NH2 ARG A 92 -22.533 -1.621 22.886 1.00 12.55 N +ATOM 775 N LEU A 93 -15.490 -3.047 22.801 1.00 8.65 N +ATOM 776 CA LEU A 93 -15.034 -1.759 23.317 1.00 8.55 C +ATOM 777 C LEU A 93 -16.098 -0.713 23.013 1.00 8.75 C +ATOM 778 O LEU A 93 -16.491 -0.551 21.861 1.00 8.49 O +ATOM 779 CB LEU A 93 -13.719 -1.345 22.655 1.00 8.48 C +ATOM 780 CG LEU A 93 -12.628 -2.415 22.600 1.00 8.42 C +ATOM 781 CD1 LEU A 93 -11.410 -1.874 21.862 1.00 8.38 C +ATOM 782 CD2 LEU A 93 -12.252 -2.890 23.992 1.00 8.45 C +ATOM 783 N ASN A 94 -16.568 -0.014 24.041 1.00 9.08 N +ATOM 784 CA ASN A 94 -17.490 1.104 23.851 1.00 9.51 C +ATOM 785 C ASN A 94 -16.738 2.418 23.764 1.00 9.71 C +ATOM 786 O ASN A 94 -15.699 2.601 24.401 1.00 9.77 O +ATOM 787 CB ASN A 94 -18.493 1.185 24.997 1.00 9.64 C +ATOM 788 CG ASN A 94 -19.449 0.010 25.023 1.00 9.89 C +ATOM 789 OD1 ASN A 94 -19.602 -0.718 24.036 1.00 10.18 O +ATOM 790 ND2 ASN A 94 -20.118 -0.172 26.154 1.00 10.08 N +ATOM 791 N PHE A 95 -17.283 3.345 22.984 1.00 10.18 N +ATOM 792 CA PHE A 95 -16.618 4.614 22.720 1.00 10.82 C +ATOM 793 C PHE A 95 -16.680 5.509 23.952 1.00 11.58 C +ATOM 794 O PHE A 95 -15.651 5.970 24.433 1.00 11.50 O +ATOM 795 CB PHE A 95 -17.267 5.294 21.510 1.00 10.66 C +ATOM 796 CG PHE A 95 -16.639 6.601 21.118 1.00 10.67 C +ATOM 797 CD1 PHE A 95 -15.259 6.777 21.140 1.00 10.64 C +ATOM 798 CD2 PHE A 95 -17.435 7.652 20.679 1.00 10.54 C +ATOM 799 CE1 PHE A 95 -14.692 7.986 20.761 1.00 10.61 C +ATOM 800 CE2 PHE A 95 -16.874 8.859 20.300 1.00 10.66 C +ATOM 801 CZ PHE A 95 -15.503 9.026 20.341 1.00 10.71 C +ATOM 802 N VAL A 96 -17.886 5.739 24.461 1.00 12.80 N +ATOM 803 CA VAL A 96 -18.076 6.595 25.632 1.00 13.64 C +ATOM 804 C VAL A 96 -18.694 5.800 26.775 1.00 14.43 C +ATOM 805 O VAL A 96 -19.687 5.091 26.589 1.00 14.57 O +ATOM 806 CB VAL A 96 -18.969 7.810 25.307 1.00 13.89 C +ATOM 807 CG1 VAL A 96 -19.166 8.679 26.544 1.00 14.16 C +ATOM 808 CG2 VAL A 96 -18.357 8.622 24.175 1.00 13.94 C +ATOM 809 N THR A 97 -18.084 5.908 27.951 1.00 15.23 N +ATOM 810 CA THR A 97 -18.617 5.308 29.165 1.00 16.42 C +ATOM 811 C THR A 97 -18.753 6.391 30.219 1.00 18.64 C +ATOM 812 O THR A 97 -17.777 7.065 30.557 1.00 18.98 O +ATOM 813 CB THR A 97 -17.704 4.189 29.689 1.00 16.04 C +ATOM 814 OG1 THR A 97 -17.569 3.189 28.674 1.00 15.27 O +ATOM 815 CG2 THR A 97 -18.285 3.554 30.962 1.00 15.84 C +ATOM 816 N ASN A 98 -19.973 6.561 30.715 1.00 21.46 N +ATOM 817 CA ASN A 98 -20.251 7.525 31.765 1.00 23.96 C +ATOM 818 C ASN A 98 -20.354 6.797 33.091 1.00 24.73 C +ATOM 819 O ASN A 98 -21.446 6.438 33.537 1.00 26.02 O +ATOM 820 CB ASN A 98 -21.535 8.293 31.460 1.00 25.15 C +ATOM 821 CG ASN A 98 -21.432 9.108 30.189 1.00 26.01 C +ATOM 822 OD1 ASN A 98 -20.456 9.832 29.978 1.00 27.61 O +ATOM 823 ND2 ASN A 98 -22.438 8.996 29.332 1.00 26.93 N +ATOM 824 N GLY A 99 -19.196 6.546 33.694 1.00 24.94 N +ATOM 825 CA GLY A 99 -19.133 6.030 35.051 1.00 25.09 C +ATOM 826 C GLY A 99 -19.207 7.211 35.997 1.00 25.10 C +ATOM 827 O GLY A 99 -20.019 8.123 35.812 1.00 25.31 O +ATOM 828 N SER A 100 -18.353 7.202 37.012 1.00 25.00 N +ATOM 829 CA SER A 100 -18.188 8.365 37.877 1.00 25.32 C +ATOM 830 C SER A 100 -17.610 9.525 37.070 1.00 24.82 C +ATOM 831 O SER A 100 -17.912 10.691 37.328 1.00 24.44 O +ATOM 832 CB SER A 100 -17.264 8.026 39.044 1.00 25.90 C +ATOM 833 OG SER A 100 -16.082 7.388 38.587 1.00 26.75 O +ATOM 834 N GLN A 101 -16.790 9.170 36.082 1.00 24.01 N +ATOM 835 CA GLN A 101 -16.156 10.107 35.174 1.00 24.05 C +ATOM 836 C GLN A 101 -16.511 9.708 33.740 1.00 22.47 C +ATOM 837 O GLN A 101 -16.948 8.585 33.494 1.00 21.75 O +ATOM 838 CB GLN A 101 -14.651 10.018 35.385 1.00 25.59 C +ATOM 839 CG GLN A 101 -13.860 11.180 34.841 1.00 26.74 C +ATOM 840 CD GLN A 101 -12.526 11.320 35.538 1.00 27.59 C +ATOM 841 OE1 GLN A 101 -11.725 10.384 35.572 1.00 28.30 O +ATOM 842 NE2 GLN A 101 -12.279 12.491 36.098 1.00 27.63 N +ATOM 843 N LYS A 102 -16.342 10.631 32.800 1.00 21.09 N +ATOM 844 CA LYS A 102 -16.515 10.317 31.386 1.00 20.51 C +ATOM 845 C LYS A 102 -15.219 9.714 30.859 1.00 18.15 C +ATOM 846 O LYS A 102 -14.159 10.327 30.981 1.00 18.27 O +ATOM 847 CB LYS A 102 -16.858 11.585 30.599 1.00 21.88 C +ATOM 848 CG LYS A 102 -17.142 11.365 29.117 1.00 23.27 C +ATOM 849 CD LYS A 102 -17.224 12.690 28.368 1.00 24.31 C +ATOM 850 CE LYS A 102 -17.111 12.503 26.860 1.00 24.79 C +ATOM 851 NZ LYS A 102 -16.656 13.738 26.153 1.00 25.11 N +ATOM 852 N ASN A 103 -15.306 8.507 30.302 1.00 15.71 N +ATOM 853 CA ASN A 103 -14.170 7.878 29.624 1.00 14.28 C +ATOM 854 C ASN A 103 -14.420 7.805 28.128 1.00 13.52 C +ATOM 855 O ASN A 103 -15.504 7.415 27.699 1.00 13.13 O +ATOM 856 CB ASN A 103 -13.926 6.463 30.138 1.00 13.97 C +ATOM 857 CG ASN A 103 -12.767 5.787 29.426 1.00 13.77 C +ATOM 858 OD1 ASN A 103 -11.606 6.054 29.728 1.00 13.40 O +ATOM 859 ND2 ASN A 103 -13.078 4.920 28.463 1.00 13.82 N +ATOM 860 N VAL A 104 -13.405 8.152 27.343 1.00 12.81 N +ATOM 861 CA VAL A 104 -13.485 8.064 25.888 1.00 12.40 C +ATOM 862 C VAL A 104 -12.451 7.077 25.374 1.00 11.64 C +ATOM 863 O VAL A 104 -11.248 7.260 25.571 1.00 11.81 O +ATOM 864 CB VAL A 104 -13.244 9.424 25.209 1.00 12.77 C +ATOM 865 CG1 VAL A 104 -13.296 9.285 23.690 1.00 12.79 C +ATOM 866 CG2 VAL A 104 -14.267 10.441 25.681 1.00 13.02 C +ATOM 867 N GLY A 105 -12.935 6.028 24.717 1.00 10.83 N +ATOM 868 CA GLY A 105 -12.072 5.084 24.024 1.00 10.17 C +ATOM 869 C GLY A 105 -11.278 4.195 24.955 1.00 9.50 C +ATOM 870 O GLY A 105 -11.403 4.258 26.182 1.00 9.26 O +ATOM 871 N SER A 106 -10.452 3.354 24.353 1.00 8.81 N +ATOM 872 CA SER A 106 -9.588 2.460 25.104 1.00 8.43 C +ATOM 873 C SER A 106 -8.549 1.858 24.177 1.00 7.99 C +ATOM 874 O SER A 106 -8.719 1.848 22.955 1.00 7.88 O +ATOM 875 CB SER A 106 -10.399 1.357 25.795 1.00 8.56 C +ATOM 876 OG SER A 106 -11.043 0.515 24.860 1.00 8.80 O +ATOM 877 N ARG A 107 -7.459 1.392 24.774 1.00 7.58 N +ATOM 878 CA ARG A 107 -6.459 0.598 24.080 1.00 7.43 C +ATOM 879 C ARG A 107 -6.146 -0.604 24.964 1.00 7.13 C +ATOM 880 O ARG A 107 -5.870 -0.443 26.150 1.00 7.06 O +ATOM 881 CB ARG A 107 -5.200 1.421 23.788 1.00 7.58 C +ATOM 882 CG ARG A 107 -4.106 0.617 23.106 1.00 7.80 C +ATOM 883 CD ARG A 107 -3.041 1.494 22.481 1.00 8.04 C +ATOM 884 NE ARG A 107 -2.231 2.204 23.479 1.00 8.17 N +ATOM 885 CZ ARG A 107 -2.123 3.528 23.595 1.00 8.44 C +ATOM 886 NH1 ARG A 107 -2.768 4.351 22.776 1.00 8.81 N +ATOM 887 NH2 ARG A 107 -1.337 4.044 24.536 1.00 8.51 N +ATOM 888 N THR A 108 -6.228 -1.802 24.389 1.00 6.90 N +ATOM 889 CA THR A 108 -5.991 -3.039 25.129 1.00 6.74 C +ATOM 890 C THR A 108 -4.985 -3.925 24.418 1.00 6.64 C +ATOM 891 O THR A 108 -4.760 -3.774 23.213 1.00 6.48 O +ATOM 892 CB THR A 108 -7.297 -3.835 25.335 1.00 6.77 C +ATOM 893 OG1 THR A 108 -7.774 -4.342 24.076 1.00 6.82 O +ATOM 894 CG2 THR A 108 -8.361 -2.952 25.966 1.00 6.78 C +ATOM 895 N TYR A 109 -4.404 -4.855 25.172 1.00 6.67 N +ATOM 896 CA TYR A 109 -3.419 -5.802 24.652 1.00 6.84 C +ATOM 897 C TYR A 109 -3.802 -7.221 25.022 1.00 7.16 C +ATOM 898 O TYR A 109 -4.345 -7.463 26.099 1.00 7.29 O +ATOM 899 CB TYR A 109 -2.036 -5.504 25.229 1.00 6.61 C +ATOM 900 CG TYR A 109 -1.672 -4.051 25.128 1.00 6.43 C +ATOM 901 CD1 TYR A 109 -1.455 -3.464 23.884 1.00 6.39 C +ATOM 902 CD2 TYR A 109 -1.575 -3.251 26.266 1.00 6.34 C +ATOM 903 CE1 TYR A 109 -1.147 -2.125 23.774 1.00 6.31 C +ATOM 904 CE2 TYR A 109 -1.256 -1.909 26.165 1.00 6.31 C +ATOM 905 CZ TYR A 109 -1.047 -1.351 24.915 1.00 6.31 C +ATOM 906 OH TYR A 109 -0.747 -0.014 24.802 1.00 6.30 O +ATOM 907 N LEU A 110 -3.499 -8.159 24.132 1.00 7.62 N +ATOM 908 CA LEU A 110 -3.726 -9.575 24.403 1.00 8.07 C +ATOM 909 C LEU A 110 -2.575 -10.151 25.230 1.00 8.49 C +ATOM 910 O LEU A 110 -1.405 -9.986 24.880 1.00 8.22 O +ATOM 911 CB LEU A 110 -3.869 -10.353 23.099 1.00 8.07 C +ATOM 912 CG LEU A 110 -4.062 -11.867 23.233 1.00 8.16 C +ATOM 913 CD1 LEU A 110 -5.418 -12.195 23.839 1.00 8.26 C +ATOM 914 CD2 LEU A 110 -3.895 -12.546 21.881 1.00 8.15 C +ATOM 915 N AMET A 111 -2.931 -10.851 26.307 0.25 9.01 N +ATOM 916 N BMET A 111 -2.914 -10.823 26.327 0.75 8.75 N +ATOM 917 CA AMET A 111 -1.964 -11.406 27.250 0.25 9.57 C +ATOM 918 CA BMET A 111 -1.916 -11.400 27.222 0.75 9.24 C +ATOM 919 C AMET A 111 -1.843 -12.922 27.129 0.25 10.08 C +ATOM 920 C BMET A 111 -1.832 -12.911 27.105 0.75 9.82 C +ATOM 921 O AMET A 111 -2.825 -13.610 26.845 0.25 10.14 O +ATOM 922 O BMET A 111 -2.827 -13.577 26.813 0.75 9.88 O +ATOM 923 CB AMET A 111 -2.392 -11.058 28.674 0.25 9.63 C +ATOM 924 CB BMET A 111 -2.248 -11.053 28.668 0.75 9.14 C +ATOM 925 CG AMET A 111 -2.464 -9.566 28.943 0.25 9.67 C +ATOM 926 CG BMET A 111 -2.414 -9.569 28.927 0.75 9.04 C +ATOM 927 SD AMET A 111 -0.835 -8.835 29.170 0.25 9.83 S +ATOM 928 SD BMET A 111 -2.288 -9.202 30.684 0.75 9.03 S +ATOM 929 CE AMET A 111 -0.471 -9.335 30.850 0.25 9.86 C +ATOM 930 CE BMET A 111 -0.508 -9.108 30.840 0.75 9.18 C +ATOM 931 N LYS A 112 -0.632 -13.426 27.359 1.00 10.60 N +ATOM 932 CA LYS A 112 -0.365 -14.867 27.459 1.00 11.96 C +ATOM 933 C LYS A 112 -0.632 -15.345 28.891 1.00 12.58 C +ATOM 934 O LYS A 112 -1.216 -16.413 29.109 1.00 12.94 O +ATOM 935 CB LYS A 112 1.103 -15.135 27.099 1.00 13.08 C +ATOM 936 CG LYS A 112 1.511 -16.598 27.091 1.00 14.38 C +ATOM 937 CD LYS A 112 2.921 -16.744 26.544 1.00 15.25 C +ATOM 938 CE LYS A 112 3.424 -18.178 26.608 1.00 16.23 C +ATOM 939 NZ LYS A 112 2.760 -19.075 25.620 1.00 16.92 N +ATOM 940 N ASP A 113 -0.156 -14.569 29.861 1.00 12.99 N +ATOM 941 CA ASP A 113 -0.454 -14.801 31.276 1.00 13.49 C +ATOM 942 C ASP A 113 -0.554 -13.426 31.940 1.00 13.57 C +ATOM 943 O ASP A 113 -0.428 -12.411 31.261 1.00 13.09 O +ATOM 944 CB ASP A 113 0.597 -15.714 31.932 1.00 13.90 C +ATOM 945 CG ASP A 113 2.020 -15.222 31.743 1.00 14.34 C +ATOM 946 OD1 ASP A 113 2.299 -14.046 32.040 1.00 14.26 O +ATOM 947 OD2 ASP A 113 2.882 -16.028 31.319 1.00 15.57 O +ATOM 948 N ASP A 114 -0.784 -13.373 33.248 1.00 13.67 N +ATOM 949 CA ASP A 114 -1.078 -12.090 33.896 1.00 13.86 C +ATOM 950 C ASP A 114 0.098 -11.092 33.923 1.00 13.06 C +ATOM 951 O ASP A 114 -0.107 -9.922 34.229 1.00 12.48 O +ATOM 952 CB ASP A 114 -1.657 -12.314 35.306 1.00 14.86 C +ATOM 953 CG ASP A 114 -3.097 -12.845 35.279 1.00 15.97 C +ATOM 954 OD1 ASP A 114 -3.917 -12.358 34.470 1.00 16.81 O +ATOM 955 OD2 ASP A 114 -3.421 -13.753 36.075 1.00 17.69 O +ATOM 956 N THR A 115 1.311 -11.541 33.595 1.00 12.26 N +ATOM 957 CA THR A 115 2.488 -10.663 33.577 1.00 12.11 C +ATOM 958 C THR A 115 3.223 -10.612 32.223 1.00 11.55 C +ATOM 959 O THR A 115 4.293 -10.009 32.122 1.00 11.45 O +ATOM 960 CB THR A 115 3.493 -11.069 34.677 1.00 12.51 C +ATOM 961 OG1 THR A 115 3.823 -12.453 34.529 1.00 12.85 O +ATOM 962 CG2 THR A 115 2.903 -10.824 36.059 1.00 12.70 C +ATOM 963 N HIS A 116 2.651 -11.223 31.184 1.00 10.88 N +ATOM 964 CA HIS A 116 3.273 -11.238 29.856 1.00 10.72 C +ATOM 965 C HIS A 116 2.268 -11.064 28.734 1.00 10.02 C +ATOM 966 O HIS A 116 1.224 -11.718 28.713 1.00 9.68 O +ATOM 967 CB HIS A 116 4.040 -12.543 29.633 1.00 11.35 C +ATOM 968 CG HIS A 116 5.153 -12.750 30.607 1.00 12.02 C +ATOM 969 ND1 HIS A 116 4.955 -13.299 31.855 1.00 12.55 N +ATOM 970 CD2 HIS A 116 6.470 -12.457 30.528 1.00 12.48 C +ATOM 971 CE1 HIS A 116 6.107 -13.346 32.499 1.00 12.69 C +ATOM 972 NE2 HIS A 116 7.043 -12.844 31.715 1.00 12.69 N +ATOM 973 N TYR A 117 2.597 -10.187 27.789 1.00 9.14 N +ATOM 974 CA TYR A 117 1.837 -10.086 26.552 1.00 8.77 C +ATOM 975 C TYR A 117 2.098 -11.328 25.710 1.00 8.92 C +ATOM 976 O TYR A 117 3.194 -11.888 25.735 1.00 8.98 O +ATOM 977 CB TYR A 117 2.250 -8.854 25.738 1.00 8.38 C +ATOM 978 CG TYR A 117 2.078 -7.535 26.457 1.00 8.03 C +ATOM 979 CD1 TYR A 117 0.822 -7.108 26.876 1.00 7.83 C +ATOM 980 CD2 TYR A 117 3.165 -6.703 26.691 1.00 7.79 C +ATOM 981 CE1 TYR A 117 0.652 -5.896 27.530 1.00 7.75 C +ATOM 982 CE2 TYR A 117 3.009 -5.487 27.342 1.00 7.65 C +ATOM 983 CZ TYR A 117 1.750 -5.092 27.761 1.00 7.67 C +ATOM 984 OH TYR A 117 1.591 -3.890 28.406 1.00 7.63 O +ATOM 985 N GLN A 118 1.085 -11.743 24.958 1.00 9.25 N +ATOM 986 CA GLN A 118 1.259 -12.743 23.914 1.00 9.74 C +ATOM 987 C GLN A 118 2.052 -12.101 22.784 1.00 9.74 C +ATOM 988 O GLN A 118 1.803 -10.957 22.426 1.00 9.36 O +ATOM 989 CB GLN A 118 -0.107 -13.192 23.398 1.00 10.24 C +ATOM 990 CG GLN A 118 -0.069 -14.186 22.250 1.00 10.82 C +ATOM 991 CD GLN A 118 0.464 -15.538 22.670 1.00 11.56 C +ATOM 992 OE1 GLN A 118 0.082 -16.074 23.716 1.00 12.65 O +ATOM 993 NE2 GLN A 118 1.346 -16.099 21.859 1.00 12.27 N +ATOM 994 N THR A 119 3.023 -12.818 22.234 1.00 10.02 N +ATOM 995 CA THR A 119 3.740 -12.318 21.058 1.00 10.45 C +ATOM 996 C THR A 119 3.459 -13.187 19.838 1.00 10.07 C +ATOM 997 O THR A 119 3.189 -14.379 19.960 1.00 10.05 O +ATOM 998 CB THR A 119 5.262 -12.209 21.287 1.00 11.00 C +ATOM 999 OG1 THR A 119 5.796 -13.495 21.604 1.00 12.08 O +ATOM 1000 CG2 THR A 119 5.563 -11.233 22.415 1.00 11.25 C +ATOM 1001 N PHE A 120 3.526 -12.563 18.666 1.00 9.76 N +ATOM 1002 CA PHE A 120 3.251 -13.206 17.392 1.00 9.75 C +ATOM 1003 C PHE A 120 4.368 -12.936 16.386 1.00 9.65 C +ATOM 1004 O PHE A 120 4.845 -11.802 16.255 1.00 9.83 O +ATOM 1005 CB PHE A 120 1.957 -12.653 16.796 1.00 9.71 C +ATOM 1006 CG PHE A 120 0.722 -12.972 17.592 1.00 9.83 C +ATOM 1007 CD1 PHE A 120 0.020 -14.150 17.369 1.00 10.02 C +ATOM 1008 CD2 PHE A 120 0.240 -12.082 18.541 1.00 9.90 C +ATOM 1009 CE1 PHE A 120 -1.124 -14.440 18.092 1.00 10.01 C +ATOM 1010 CE2 PHE A 120 -0.912 -12.364 19.259 1.00 10.00 C +ATOM 1011 CZ PHE A 120 -1.592 -13.545 19.040 1.00 10.00 C +ATOM 1012 N ASN A 121 4.775 -13.987 15.681 1.00 9.61 N +ATOM 1013 CA ASN A 121 5.586 -13.876 14.476 1.00 9.71 C +ATOM 1014 C ASN A 121 4.767 -14.530 13.372 1.00 9.67 C +ATOM 1015 O ASN A 121 4.684 -15.757 13.306 1.00 10.09 O +ATOM 1016 CB ASN A 121 6.919 -14.598 14.667 1.00 9.81 C +ATOM 1017 CG ASN A 121 7.751 -14.640 13.401 1.00 9.79 C +ATOM 1018 OD1 ASN A 121 7.267 -14.349 12.305 1.00 9.51 O +ATOM 1019 ND2 ASN A 121 9.022 -15.007 13.549 1.00 10.18 N +ATOM 1020 N ALEU A 122 4.185 -13.689 12.513 0.50 9.64 N +ATOM 1021 N BLEU A 122 4.150 -13.734 12.511 0.50 9.75 N +ATOM 1022 CA ALEU A 122 3.213 -14.105 11.497 0.50 9.56 C +ATOM 1023 CA BLEU A 122 3.234 -14.295 11.524 0.50 9.73 C +ATOM 1024 C ALEU A 122 3.810 -14.364 10.110 0.50 9.57 C +ATOM 1025 C BLEU A 122 3.808 -14.360 10.108 0.50 9.66 C +ATOM 1026 O ALEU A 122 3.065 -14.522 9.145 0.50 9.42 O +ATOM 1027 O BLEU A 122 3.059 -14.394 9.137 0.50 9.54 O +ATOM 1028 CB ALEU A 122 2.119 -13.039 11.350 0.50 9.56 C +ATOM 1029 CB BLEU A 122 1.900 -13.557 11.565 0.50 9.82 C +ATOM 1030 CG ALEU A 122 1.336 -12.627 12.601 0.50 9.49 C +ATOM 1031 CG BLEU A 122 1.196 -13.779 12.909 0.50 9.82 C +ATOM 1032 CD1ALEU A 122 0.301 -11.570 12.245 0.50 9.48 C +ATOM 1033 CD1BLEU A 122 -0.171 -13.119 12.948 0.50 9.79 C +ATOM 1034 CD2ALEU A 122 0.667 -13.830 13.250 0.50 9.50 C +ATOM 1035 CD2BLEU A 122 1.073 -15.263 13.218 0.50 9.84 C +ATOM 1036 N LEU A 123 5.135 -14.410 9.995 1.00 9.72 N +ATOM 1037 CA LEU A 123 5.768 -14.691 8.704 1.00 9.98 C +ATOM 1038 C LEU A 123 5.299 -16.060 8.204 1.00 10.46 C +ATOM 1039 O LEU A 123 5.326 -17.035 8.957 1.00 10.48 O +ATOM 1040 CB LEU A 123 7.291 -14.658 8.829 1.00 9.94 C +ATOM 1041 CG LEU A 123 7.858 -13.258 9.092 1.00 9.97 C +ATOM 1042 CD1 LEU A 123 9.307 -13.334 9.539 1.00 10.09 C +ATOM 1043 CD2 LEU A 123 7.724 -12.380 7.853 1.00 10.03 C +ATOM 1044 N ASN A 124 4.838 -16.113 6.955 1.00 11.08 N +ATOM 1045 CA ASN A 124 4.241 -17.328 6.368 1.00 11.61 C +ATOM 1046 C ASN A 124 2.968 -17.764 7.084 1.00 11.63 C +ATOM 1047 O ASN A 124 2.579 -18.927 7.023 1.00 11.90 O +ATOM 1048 CB ASN A 124 5.225 -18.505 6.368 1.00 12.04 C +ATOM 1049 CG ASN A 124 6.504 -18.201 5.638 1.00 12.67 C +ATOM 1050 OD1 ASN A 124 7.537 -17.944 6.259 1.00 14.01 O +ATOM 1051 ND2 ASN A 124 6.450 -18.234 4.313 1.00 12.89 N +ATOM 1052 N GLN A 125 2.316 -16.838 7.773 1.00 11.48 N +ATOM 1053 CA GLN A 125 1.076 -17.151 8.465 1.00 11.51 C +ATOM 1054 C GLN A 125 0.057 -16.086 8.140 1.00 10.72 C +ATOM 1055 O GLN A 125 0.369 -15.091 7.481 1.00 10.25 O +ATOM 1056 CB GLN A 125 1.300 -17.229 9.976 1.00 12.55 C +ATOM 1057 CG GLN A 125 2.291 -18.306 10.385 1.00 13.53 C +ATOM 1058 CD GLN A 125 2.097 -18.776 11.814 1.00 14.76 C +ATOM 1059 OE1 GLN A 125 1.050 -19.325 12.169 1.00 15.41 O +ATOM 1060 NE2 GLN A 125 3.109 -18.568 12.643 1.00 15.69 N +ATOM 1061 N GLU A 126 -1.167 -16.315 8.595 1.00 10.01 N +ATOM 1062 CA GLU A 126 -2.227 -15.340 8.448 1.00 9.66 C +ATOM 1063 C GLU A 126 -2.874 -15.090 9.794 1.00 9.05 C +ATOM 1064 O GLU A 126 -2.863 -15.956 10.671 1.00 8.90 O +ATOM 1065 CB GLU A 126 -3.262 -15.802 7.429 1.00 9.97 C +ATOM 1066 CG GLU A 126 -3.988 -17.089 7.782 1.00 10.20 C +ATOM 1067 CD GLU A 126 -4.751 -17.677 6.609 1.00 10.49 C +ATOM 1068 OE1 GLU A 126 -4.422 -17.360 5.441 1.00 10.89 O +ATOM 1069 OE2 GLU A 126 -5.688 -18.464 6.848 1.00 10.59 O +ATOM 1070 N PHE A 127 -3.400 -13.880 9.946 1.00 8.36 N +ATOM 1071 CA PHE A 127 -4.146 -13.471 11.125 1.00 7.93 C +ATOM 1072 C PHE A 127 -5.558 -13.159 10.665 1.00 7.65 C +ATOM 1073 O PHE A 127 -5.755 -12.404 9.713 1.00 7.64 O +ATOM 1074 CB PHE A 127 -3.512 -12.226 11.757 1.00 7.75 C +ATOM 1075 CG PHE A 127 -4.144 -11.811 13.061 1.00 7.67 C +ATOM 1076 CD1 PHE A 127 -5.287 -11.025 13.073 1.00 7.64 C +ATOM 1077 CD2 PHE A 127 -3.592 -12.202 14.276 1.00 7.65 C +ATOM 1078 CE1 PHE A 127 -5.879 -10.652 14.266 1.00 7.66 C +ATOM 1079 CE2 PHE A 127 -4.185 -11.827 15.473 1.00 7.62 C +ATOM 1080 CZ PHE A 127 -5.323 -11.046 15.466 1.00 7.64 C +ATOM 1081 N THR A 128 -6.540 -13.729 11.347 1.00 7.45 N +ATOM 1082 CA THR A 128 -7.927 -13.615 10.932 1.00 7.30 C +ATOM 1083 C THR A 128 -8.799 -13.287 12.128 1.00 7.05 C +ATOM 1084 O THR A 128 -8.574 -13.792 13.225 1.00 7.09 O +ATOM 1085 CB THR A 128 -8.384 -14.930 10.272 1.00 7.44 C +ATOM 1086 OG1 THR A 128 -7.657 -15.107 9.052 1.00 7.62 O +ATOM 1087 CG2 THR A 128 -9.868 -14.925 9.974 1.00 7.59 C +ATOM 1088 N PHE A 129 -9.786 -12.425 11.918 1.00 6.93 N +ATOM 1089 CA PHE A 129 -10.744 -12.108 12.968 1.00 6.92 C +ATOM 1090 C PHE A 129 -12.060 -11.684 12.350 1.00 7.07 C +ATOM 1091 O PHE A 129 -12.113 -11.326 11.177 1.00 6.99 O +ATOM 1092 CB PHE A 129 -10.215 -11.009 13.898 1.00 6.88 C +ATOM 1093 CG PHE A 129 -10.000 -9.687 13.218 1.00 6.77 C +ATOM 1094 CD1 PHE A 129 -8.887 -9.489 12.421 1.00 6.68 C +ATOM 1095 CD2 PHE A 129 -10.901 -8.644 13.369 1.00 6.71 C +ATOM 1096 CE1 PHE A 129 -8.671 -8.278 11.788 1.00 6.64 C +ATOM 1097 CE2 PHE A 129 -10.685 -7.431 12.741 1.00 6.73 C +ATOM 1098 CZ PHE A 129 -9.576 -7.252 11.945 1.00 6.68 C +ATOM 1099 N ASP A 130 -13.116 -11.751 13.151 1.00 7.35 N +ATOM 1100 CA ASP A 130 -14.415 -11.211 12.780 1.00 7.71 C +ATOM 1101 C ASP A 130 -14.566 -9.836 13.411 1.00 7.55 C +ATOM 1102 O ASP A 130 -14.088 -9.593 14.521 1.00 7.25 O +ATOM 1103 CB ASP A 130 -15.544 -12.115 13.276 1.00 8.14 C +ATOM 1104 CG ASP A 130 -15.590 -13.462 12.567 1.00 8.66 C +ATOM 1105 OD1 ASP A 130 -14.798 -13.703 11.632 1.00 9.03 O +ATOM 1106 OD2 ASP A 130 -16.432 -14.295 12.972 1.00 9.66 O +ATOM 1107 N VAL A 131 -15.250 -8.934 12.722 1.00 7.61 N +ATOM 1108 CA VAL A 131 -15.467 -7.613 13.280 1.00 7.82 C +ATOM 1109 C VAL A 131 -16.864 -7.097 12.971 1.00 7.99 C +ATOM 1110 O VAL A 131 -17.425 -7.376 11.903 1.00 8.10 O +ATOM 1111 CB VAL A 131 -14.376 -6.609 12.817 1.00 7.75 C +ATOM 1112 CG1 VAL A 131 -14.485 -6.321 11.322 1.00 7.80 C +ATOM 1113 CG2 VAL A 131 -14.438 -5.316 13.627 1.00 7.75 C +ATOM 1114 N AASP A 132 -17.433 -6.376 13.934 0.80 8.21 N +ATOM 1115 N BASP A 132 -17.416 -6.351 13.923 0.20 8.03 N +ATOM 1116 CA AASP A 132 -18.661 -5.622 13.738 0.80 8.32 C +ATOM 1117 CA BASP A 132 -18.655 -5.616 13.733 0.20 8.05 C +ATOM 1118 C AASP A 132 -18.286 -4.146 13.833 0.80 8.23 C +ATOM 1119 C BASP A 132 -18.323 -4.132 13.839 0.20 8.08 C +ATOM 1120 O AASP A 132 -17.930 -3.672 14.914 0.80 8.22 O +ATOM 1121 O BASP A 132 -18.037 -3.636 14.929 0.20 8.10 O +ATOM 1122 CB AASP A 132 -19.684 -6.001 14.812 0.80 8.62 C +ATOM 1123 CB BASP A 132 -19.674 -6.019 14.796 0.20 8.07 C +ATOM 1124 CG AASP A 132 -20.943 -5.163 14.750 0.80 8.85 C +ATOM 1125 CG BASP A 132 -21.007 -5.326 14.619 0.20 8.08 C +ATOM 1126 OD1AASP A 132 -21.161 -4.488 13.722 0.80 8.87 O +ATOM 1127 OD1BASP A 132 -21.012 -4.114 14.311 0.20 8.03 O +ATOM 1128 OD2AASP A 132 -21.721 -5.182 15.740 0.80 9.26 O +ATOM 1129 OD2BASP A 132 -22.050 -5.990 14.804 0.20 8.10 O +ATOM 1130 N VAL A 133 -18.341 -3.443 12.698 1.00 8.11 N +ATOM 1131 CA VAL A 133 -18.047 -1.997 12.622 1.00 8.09 C +ATOM 1132 C VAL A 133 -19.299 -1.176 12.319 1.00 8.11 C +ATOM 1133 O VAL A 133 -19.208 0.027 12.061 1.00 8.07 O +ATOM 1134 CB VAL A 133 -16.982 -1.676 11.546 1.00 8.10 C +ATOM 1135 CG1 VAL A 133 -15.675 -2.394 11.854 1.00 8.15 C +ATOM 1136 CG2 VAL A 133 -17.481 -2.015 10.144 1.00 8.12 C +ATOM 1137 N SER A 134 -20.461 -1.827 12.352 1.00 8.24 N +ATOM 1138 CA SER A 134 -21.729 -1.180 12.020 1.00 8.46 C +ATOM 1139 C SER A 134 -22.048 -0.003 12.936 1.00 8.45 C +ATOM 1140 O SER A 134 -22.745 0.926 12.531 1.00 8.66 O +ATOM 1141 CB SER A 134 -22.876 -2.204 12.038 1.00 8.59 C +ATOM 1142 OG SER A 134 -23.143 -2.670 13.347 1.00 9.03 O +ATOM 1143 N GLY A 135 -21.532 -0.044 14.163 1.00 8.39 N +ATOM 1144 CA GLY A 135 -21.721 1.028 15.128 1.00 8.38 C +ATOM 1145 C GLY A 135 -20.614 2.065 15.149 1.00 8.35 C +ATOM 1146 O GLY A 135 -20.522 2.822 16.104 1.00 8.72 O +ATOM 1147 N LEU A 136 -19.792 2.119 14.098 1.00 8.12 N +ATOM 1148 CA LEU A 136 -18.696 3.091 14.004 1.00 8.07 C +ATOM 1149 C LEU A 136 -18.926 4.084 12.864 1.00 8.25 C +ATOM 1150 O LEU A 136 -18.675 3.773 11.699 1.00 7.97 O +ATOM 1151 CB LEU A 136 -17.362 2.380 13.775 1.00 7.97 C +ATOM 1152 CG LEU A 136 -16.915 1.431 14.884 1.00 7.90 C +ATOM 1153 CD1 LEU A 136 -15.592 0.785 14.520 1.00 7.87 C +ATOM 1154 CD2 LEU A 136 -16.813 2.164 16.215 1.00 8.01 C +ATOM 1155 N PRO A 137 -19.385 5.296 13.195 1.00 8.54 N +ATOM 1156 CA PRO A 137 -19.593 6.297 12.155 1.00 8.90 C +ATOM 1157 C PRO A 137 -18.307 7.044 11.788 1.00 9.13 C +ATOM 1158 O PRO A 137 -17.216 6.686 12.258 1.00 8.98 O +ATOM 1159 CB PRO A 137 -20.611 7.237 12.797 1.00 8.94 C +ATOM 1160 CG PRO A 137 -20.297 7.173 14.250 1.00 8.97 C +ATOM 1161 CD PRO A 137 -19.805 5.781 14.522 1.00 8.78 C +ATOM 1162 N CYS A 138 -18.440 8.064 10.942 1.00 9.47 N +ATOM 1163 CA CYS A 138 -17.332 8.946 10.576 1.00 9.77 C +ATOM 1164 C CYS A 138 -16.601 9.437 11.814 1.00 9.41 C +ATOM 1165 O CYS A 138 -17.225 9.783 12.816 1.00 9.44 O +ATOM 1166 CB CYS A 138 -17.844 10.159 9.791 1.00 10.25 C +ATOM 1167 SG CYS A 138 -18.459 9.787 8.136 1.00 11.43 S +ATOM 1168 N GLY A 139 -15.273 9.445 11.749 1.00 9.04 N +ATOM 1169 CA GLY A 139 -14.458 9.970 12.837 1.00 8.90 C +ATOM 1170 C GLY A 139 -13.996 8.966 13.877 1.00 8.74 C +ATOM 1171 O GLY A 139 -13.133 9.290 14.694 1.00 8.79 O +ATOM 1172 N ALEU A 140 -14.564 7.765 13.872 0.50 8.68 N +ATOM 1173 N BLEU A 140 -14.587 7.769 13.858 0.50 8.49 N +ATOM 1174 CA ALEU A 140 -14.122 6.726 14.796 0.50 8.67 C +ATOM 1175 CA BLEU A 140 -14.209 6.671 14.753 0.50 8.37 C +ATOM 1176 C ALEU A 140 -13.203 5.738 14.107 0.50 8.40 C +ATOM 1177 C BLEU A 140 -13.182 5.756 14.096 0.50 8.23 C +ATOM 1178 O ALEU A 140 -13.195 5.622 12.886 0.50 8.23 O +ATOM 1179 O BLEU A 140 -13.085 5.704 12.873 0.50 8.10 O +ATOM 1180 CB ALEU A 140 -15.313 6.003 15.406 0.50 8.95 C +ATOM 1181 CB BLEU A 140 -15.441 5.841 15.117 0.50 8.43 C +ATOM 1182 CG ALEU A 140 -16.100 6.885 16.370 0.50 9.15 C +ATOM 1183 CG BLEU A 140 -16.217 6.244 16.373 0.50 8.40 C +ATOM 1184 CD1ALEU A 140 -16.997 7.831 15.596 0.50 9.22 C +ATOM 1185 CD1BLEU A 140 -15.356 6.046 17.607 0.50 8.35 C +ATOM 1186 CD2ALEU A 140 -16.901 6.039 17.338 0.50 9.23 C +ATOM 1187 CD2BLEU A 140 -16.697 7.683 16.295 0.50 8.41 C +ATOM 1188 N ASN A 141 -12.429 5.028 14.917 1.00 8.25 N +ATOM 1189 CA ASN A 141 -11.466 4.052 14.424 1.00 8.08 C +ATOM 1190 C ASN A 141 -11.408 2.918 15.424 1.00 7.75 C +ATOM 1191 O ASN A 141 -10.969 3.104 16.559 1.00 7.72 O +ATOM 1192 CB ASN A 141 -10.094 4.710 14.251 1.00 8.18 C +ATOM 1193 CG ASN A 141 -9.058 3.801 13.600 1.00 8.37 C +ATOM 1194 OD1 ASN A 141 -9.194 2.578 13.570 1.00 8.46 O +ATOM 1195 ND2 ASN A 141 -7.998 4.411 13.088 1.00 8.55 N +ATOM 1196 N GLY A 142 -11.909 1.761 15.007 1.00 7.34 N +ATOM 1197 CA GLY A 142 -11.678 0.512 15.706 1.00 7.12 C +ATOM 1198 C GLY A 142 -10.427 -0.071 15.100 1.00 6.95 C +ATOM 1199 O GLY A 142 -10.432 -0.504 13.945 1.00 7.16 O +ATOM 1200 N ALA A 143 -9.337 -0.033 15.853 1.00 6.74 N +ATOM 1201 CA ALA A 143 -8.059 -0.470 15.332 1.00 6.63 C +ATOM 1202 C ALA A 143 -7.641 -1.789 15.969 1.00 6.65 C +ATOM 1203 O ALA A 143 -7.750 -1.975 17.182 1.00 6.93 O +ATOM 1204 CB ALA A 143 -7.003 0.605 15.546 1.00 6.58 C +ATOM 1205 N LEU A 144 -7.192 -2.712 15.132 1.00 6.41 N +ATOM 1206 CA LEU A 144 -6.561 -3.936 15.586 1.00 6.31 C +ATOM 1207 C LEU A 144 -5.211 -3.957 14.903 1.00 6.16 C +ATOM 1208 O LEU A 144 -5.125 -3.866 13.683 1.00 5.99 O +ATOM 1209 CB LEU A 144 -7.413 -5.147 15.215 1.00 6.35 C +ATOM 1210 CG LEU A 144 -6.907 -6.519 15.669 1.00 6.46 C +ATOM 1211 CD1 LEU A 144 -8.067 -7.494 15.801 1.00 6.44 C +ATOM 1212 CD2 LEU A 144 -5.860 -7.070 14.709 1.00 6.51 C +ATOM 1213 N TYR A 145 -4.148 -4.035 15.691 1.00 6.12 N +ATOM 1214 CA TYR A 145 -2.817 -3.875 15.135 1.00 6.20 C +ATOM 1215 C TYR A 145 -1.750 -4.491 16.007 1.00 6.34 C +ATOM 1216 O TYR A 145 -2.035 -5.032 17.069 1.00 6.28 O +ATOM 1217 CB TYR A 145 -2.523 -2.395 14.844 1.00 6.21 C +ATOM 1218 CG TYR A 145 -2.518 -1.431 16.021 1.00 6.18 C +ATOM 1219 CD1 TYR A 145 -3.704 -0.985 16.598 1.00 6.19 C +ATOM 1220 CD2 TYR A 145 -1.327 -0.914 16.514 1.00 6.15 C +ATOM 1221 CE1 TYR A 145 -3.700 -0.073 17.642 1.00 6.21 C +ATOM 1222 CE2 TYR A 145 -1.315 0.007 17.553 1.00 6.17 C +ATOM 1223 CZ TYR A 145 -2.502 0.423 18.115 1.00 6.18 C +ATOM 1224 OH TYR A 145 -2.504 1.333 19.148 1.00 6.22 O +ATOM 1225 N MET A 146 -0.514 -4.429 15.530 1.00 6.65 N +ATOM 1226 CA MET A 146 0.584 -5.062 16.220 1.00 6.94 C +ATOM 1227 C MET A 146 1.778 -4.141 16.317 1.00 6.88 C +ATOM 1228 O MET A 146 2.093 -3.428 15.367 1.00 6.67 O +ATOM 1229 CB MET A 146 0.978 -6.335 15.494 1.00 7.35 C +ATOM 1230 CG MET A 146 -0.038 -7.441 15.664 1.00 7.69 C +ATOM 1231 SD MET A 146 0.512 -8.974 14.905 1.00 8.47 S +ATOM 1232 CE MET A 146 -0.764 -10.075 15.505 1.00 8.34 C +ATOM 1233 N VAL A 147 2.435 -4.186 17.475 1.00 6.83 N +ATOM 1234 CA VAL A 147 3.670 -3.443 17.716 1.00 6.98 C +ATOM 1235 C VAL A 147 4.603 -4.329 18.530 1.00 7.10 C +ATOM 1236 O VAL A 147 4.129 -5.101 19.366 1.00 6.88 O +ATOM 1237 CB VAL A 147 3.440 -2.111 18.476 1.00 6.96 C +ATOM 1238 CG1 VAL A 147 2.855 -1.056 17.554 1.00 6.95 C +ATOM 1239 CG2 VAL A 147 2.551 -2.297 19.700 1.00 6.97 C +ATOM 1240 N PRO A 148 5.926 -4.235 18.288 1.00 7.36 N +ATOM 1241 CA PRO A 148 6.873 -5.082 19.016 1.00 7.61 C +ATOM 1242 C PRO A 148 7.205 -4.543 20.402 1.00 7.87 C +ATOM 1243 O PRO A 148 8.354 -4.192 20.685 1.00 8.27 O +ATOM 1244 CB PRO A 148 8.121 -5.095 18.111 1.00 7.67 C +ATOM 1245 CG PRO A 148 7.769 -4.327 16.892 1.00 7.72 C +ATOM 1246 CD PRO A 148 6.602 -3.466 17.230 1.00 7.54 C +ATOM 1247 N MET A 149 6.194 -4.493 21.259 1.00 8.01 N +ATOM 1248 CA MET A 149 6.380 -4.168 22.670 1.00 8.17 C +ATOM 1249 C MET A 149 7.097 -5.316 23.374 1.00 8.28 C +ATOM 1250 O MET A 149 6.947 -6.476 22.993 1.00 8.47 O +ATOM 1251 CB MET A 149 5.023 -3.932 23.330 1.00 8.18 C +ATOM 1252 CG MET A 149 4.344 -2.646 22.887 1.00 8.22 C +ATOM 1253 SD MET A 149 2.566 -2.626 23.183 1.00 8.53 S +ATOM 1254 CE MET A 149 2.514 -2.739 24.964 1.00 8.41 C +ATOM 1255 N ALA A 150 7.882 -4.989 24.397 1.00 8.48 N +ATOM 1256 CA ALA A 150 8.534 -6.015 25.214 1.00 8.58 C +ATOM 1257 C ALA A 150 7.452 -6.878 25.861 1.00 8.71 C +ATOM 1258 O ALA A 150 6.476 -6.352 26.401 1.00 8.78 O +ATOM 1259 CB ALA A 150 9.409 -5.371 26.278 1.00 8.76 C +ATOM 1260 N ALA A 151 7.615 -8.197 25.809 1.00 8.83 N +ATOM 1261 CA ALA A 151 6.568 -9.108 26.275 1.00 8.89 C +ATOM 1262 C ALA A 151 6.256 -8.922 27.763 1.00 8.94 C +ATOM 1263 O ALA A 151 5.119 -9.097 28.191 1.00 8.69 O +ATOM 1264 CB ALA A 151 6.944 -10.553 25.979 1.00 9.06 C +ATOM 1265 N ASP A 152 7.266 -8.552 28.547 1.00 9.18 N +ATOM 1266 CA ASP A 152 7.075 -8.318 29.987 1.00 9.54 C +ATOM 1267 C ASP A 152 6.688 -6.876 30.351 1.00 9.64 C +ATOM 1268 O ASP A 152 6.599 -6.530 31.530 1.00 9.69 O +ATOM 1269 CB ASP A 152 8.327 -8.749 30.766 1.00 9.88 C +ATOM 1270 CG ASP A 152 9.544 -7.896 30.463 1.00 10.24 C +ATOM 1271 OD1 ASP A 152 9.502 -7.042 29.548 1.00 10.16 O +ATOM 1272 OD2 ASP A 152 10.567 -8.089 31.155 1.00 10.97 O +ATOM 1273 N GLY A 153 6.450 -6.036 29.348 1.00 9.69 N +ATOM 1274 CA GLY A 153 6.152 -4.627 29.573 1.00 9.85 C +ATOM 1275 C GLY A 153 7.347 -3.778 29.968 1.00 10.11 C +ATOM 1276 O GLY A 153 7.168 -2.628 30.365 1.00 10.45 O +ATOM 1277 N GLY A 154 8.556 -4.336 29.853 1.00 10.29 N +ATOM 1278 CA GLY A 154 9.802 -3.603 30.103 1.00 10.57 C +ATOM 1279 C GLY A 154 10.465 -3.876 31.441 1.00 10.85 C +ATOM 1280 O GLY A 154 11.541 -3.343 31.719 1.00 10.95 O +ATOM 1281 N VAL A 155 9.851 -4.709 32.277 1.00 11.37 N +ATOM 1282 CA VAL A 155 10.311 -4.843 33.666 1.00 11.91 C +ATOM 1283 C VAL A 155 11.756 -5.349 33.783 1.00 12.18 C +ATOM 1284 O VAL A 155 12.490 -4.904 34.663 1.00 12.13 O +ATOM 1285 CB VAL A 155 9.372 -5.721 34.539 1.00 12.18 C +ATOM 1286 CG1 VAL A 155 7.965 -5.141 34.595 1.00 12.10 C +ATOM 1287 CG2 VAL A 155 9.329 -7.159 34.058 1.00 12.61 C +ATOM 1288 N SER A 156 12.172 -6.245 32.887 1.00 12.48 N +ATOM 1289 CA SER A 156 13.486 -6.908 33.014 1.00 13.04 C +ATOM 1290 C SER A 156 14.712 -5.988 33.059 1.00 13.17 C +ATOM 1291 O SER A 156 15.715 -6.339 33.686 1.00 13.88 O +ATOM 1292 CB SER A 156 13.683 -7.944 31.903 1.00 13.26 C +ATOM 1293 OG SER A 156 13.818 -7.328 30.640 1.00 13.99 O +ATOM 1294 N AASN A 157 14.652 -4.833 32.405 0.50 12.93 N +ATOM 1295 N BASN A 157 14.622 -4.839 32.382 0.50 13.15 N +ATOM 1296 CA AASN A 157 15.768 -3.884 32.451 0.50 12.84 C +ATOM 1297 CA BASN A 157 15.723 -3.871 32.299 0.50 13.19 C +ATOM 1298 C AASN A 157 15.310 -2.464 32.740 0.50 12.43 C +ATOM 1299 C BASN A 157 15.373 -2.475 32.828 0.50 12.63 C +ATOM 1300 O AASN A 157 15.906 -1.504 32.252 0.50 12.58 O +ATOM 1301 O BASN A 157 16.141 -1.537 32.620 0.50 12.73 O +ATOM 1302 CB AASN A 157 16.550 -3.918 31.142 0.50 12.90 C +ATOM 1303 CB BASN A 157 16.194 -3.726 30.847 0.50 13.58 C +ATOM 1304 CG AASN A 157 15.704 -3.517 29.953 0.50 13.01 C +ATOM 1305 CG BASN A 157 16.621 -5.043 30.226 0.50 13.90 C +ATOM 1306 OD1AASN A 157 14.521 -3.200 30.097 0.50 13.03 O +ATOM 1307 OD1BASN A 157 17.011 -5.980 30.923 0.50 14.24 O +ATOM 1308 ND2AASN A 157 16.301 -3.538 28.771 0.50 13.28 N +ATOM 1309 ND2BASN A 157 16.559 -5.115 28.902 0.50 14.19 N +ATOM 1310 N GLU A 158 14.240 -2.340 33.521 1.00 12.01 N +ATOM 1311 CA GLU A 158 13.729 -1.039 33.956 1.00 11.50 C +ATOM 1312 C GLU A 158 13.414 -1.092 35.456 1.00 11.07 C +ATOM 1313 O GLU A 158 12.302 -1.451 35.852 1.00 10.65 O +ATOM 1314 CB GLU A 158 12.481 -0.669 33.149 1.00 11.22 C +ATOM 1315 CG GLU A 158 12.754 -0.505 31.654 1.00 11.03 C +ATOM 1316 CD GLU A 158 11.496 -0.356 30.816 1.00 11.10 C +ATOM 1317 OE1 GLU A 158 10.399 -0.254 31.395 1.00 10.90 O +ATOM 1318 OE2 GLU A 158 11.608 -0.347 29.569 1.00 11.19 O +ATOM 1319 N PRO A 159 14.401 -0.751 36.302 1.00 10.88 N +ATOM 1320 CA PRO A 159 14.253 -0.899 37.754 1.00 10.82 C +ATOM 1321 C PRO A 159 13.034 -0.212 38.365 1.00 10.63 C +ATOM 1322 O PRO A 159 12.498 -0.701 39.354 1.00 10.65 O +ATOM 1323 CB PRO A 159 15.545 -0.284 38.298 1.00 11.00 C +ATOM 1324 CG PRO A 159 16.537 -0.516 37.223 1.00 11.08 C +ATOM 1325 CD PRO A 159 15.776 -0.361 35.936 1.00 10.98 C +ATOM 1326 N ASN A 160 12.607 0.913 37.796 1.00 10.38 N +ATOM 1327 CA ASN A 160 11.455 1.638 38.336 1.00 10.38 C +ATOM 1328 C ASN A 160 10.129 1.249 37.699 1.00 10.05 C +ATOM 1329 O ASN A 160 9.108 1.876 37.976 1.00 10.11 O +ATOM 1330 CB ASN A 160 11.655 3.149 38.221 1.00 10.51 C +ATOM 1331 CG ASN A 160 12.776 3.660 39.100 1.00 10.78 C +ATOM 1332 OD1 ASN A 160 13.607 4.446 38.650 1.00 12.08 O +ATOM 1333 ND2 ASN A 160 12.790 3.242 40.355 1.00 10.73 N +ATOM 1334 N ASN A 161 10.152 0.230 36.841 1.00 9.76 N +ATOM 1335 CA ASN A 161 8.941 -0.333 36.252 1.00 9.64 C +ATOM 1336 C ASN A 161 8.635 -1.678 36.900 1.00 9.58 C +ATOM 1337 O ASN A 161 9.204 -2.700 36.524 1.00 9.75 O +ATOM 1338 CB ASN A 161 9.126 -0.496 34.744 1.00 9.54 C +ATOM 1339 CG ASN A 161 7.911 -1.101 34.059 1.00 9.48 C +ATOM 1340 OD1 ASN A 161 6.861 -1.303 34.674 1.00 9.31 O +ATOM 1341 ND2 ASN A 161 8.052 -1.389 32.771 1.00 9.51 N +ATOM 1342 N LYS A 162 7.758 -1.665 37.900 1.00 9.60 N +ATOM 1343 CA LYS A 162 7.235 -2.898 38.488 1.00 9.84 C +ATOM 1344 C LYS A 162 5.897 -3.301 37.867 1.00 9.29 C +ATOM 1345 O LYS A 162 5.543 -4.478 37.850 1.00 9.29 O +ATOM 1346 CB LYS A 162 7.056 -2.733 39.999 1.00 10.52 C +ATOM 1347 CG LYS A 162 8.343 -2.435 40.754 1.00 11.35 C +ATOM 1348 CD LYS A 162 9.287 -3.622 40.751 1.00 12.08 C +ATOM 1349 CE LYS A 162 10.420 -3.433 41.751 1.00 12.53 C +ATOM 1350 NZ LYS A 162 11.154 -2.152 41.563 1.00 12.97 N +ATOM 1351 N ALA A 163 5.149 -2.325 37.365 1.00 8.73 N +ATOM 1352 CA ALA A 163 3.798 -2.577 36.863 1.00 8.33 C +ATOM 1353 C ALA A 163 3.789 -3.460 35.604 1.00 8.11 C +ATOM 1354 O ALA A 163 3.009 -4.401 35.519 1.00 8.13 O +ATOM 1355 CB ALA A 163 3.076 -1.261 36.615 1.00 8.39 C +ATOM 1356 N GLY A 164 4.645 -3.147 34.634 1.00 7.86 N +ATOM 1357 CA GLY A 164 4.838 -4.001 33.460 1.00 7.70 C +ATOM 1358 C GLY A 164 3.594 -4.337 32.656 1.00 7.57 C +ATOM 1359 O GLY A 164 2.636 -3.564 32.612 1.00 7.35 O +ATOM 1360 N ALA A 165 3.623 -5.501 32.011 1.00 7.42 N +ATOM 1361 CA ALA A 165 2.516 -5.942 31.165 1.00 7.42 C +ATOM 1362 C ALA A 165 1.211 -6.105 31.944 1.00 7.45 C +ATOM 1363 O ALA A 165 0.135 -5.887 31.394 1.00 7.35 O +ATOM 1364 CB ALA A 165 2.876 -7.244 30.462 1.00 7.46 C +ATOM 1365 N GLN A 166 1.314 -6.480 33.218 1.00 7.52 N +ATOM 1366 CA GLN A 166 0.151 -6.661 34.078 1.00 7.78 C +ATOM 1367 C GLN A 166 -0.736 -5.416 34.128 1.00 7.39 C +ATOM 1368 O GLN A 166 -1.949 -5.531 34.320 1.00 7.28 O +ATOM 1369 CB GLN A 166 0.603 -7.031 35.493 1.00 8.25 C +ATOM 1370 CG GLN A 166 -0.536 -7.379 36.432 1.00 8.76 C +ATOM 1371 CD GLN A 166 -0.065 -7.759 37.818 1.00 9.38 C +ATOM 1372 OE1 GLN A 166 1.110 -7.613 38.162 1.00 9.95 O +ATOM 1373 NE2 GLN A 166 -0.988 -8.241 38.626 1.00 9.89 N +ATOM 1374 N TYR A 167 -0.129 -4.241 33.983 1.00 7.16 N +ATOM 1375 CA TYR A 167 -0.863 -2.974 33.970 1.00 7.01 C +ATOM 1376 C TYR A 167 -0.769 -2.239 32.634 1.00 6.88 C +ATOM 1377 O TYR A 167 -1.014 -1.037 32.565 1.00 6.76 O +ATOM 1378 CB TYR A 167 -0.404 -2.088 35.143 1.00 7.07 C +ATOM 1379 CG TYR A 167 -0.825 -2.690 36.455 1.00 7.12 C +ATOM 1380 CD1 TYR A 167 -0.080 -3.702 37.044 1.00 7.16 C +ATOM 1381 CD2 TYR A 167 -1.995 -2.285 37.087 1.00 7.22 C +ATOM 1382 CE1 TYR A 167 -0.484 -4.288 38.228 1.00 7.23 C +ATOM 1383 CE2 TYR A 167 -2.407 -2.872 38.268 1.00 7.24 C +ATOM 1384 CZ TYR A 167 -1.640 -3.869 38.840 1.00 7.26 C +ATOM 1385 OH TYR A 167 -2.047 -4.454 40.023 1.00 7.62 O +ATOM 1386 N GLY A 168 -0.436 -2.962 31.569 1.00 6.75 N +ATOM 1387 CA GLY A 168 -0.485 -2.400 30.225 1.00 6.71 C +ATOM 1388 C GLY A 168 0.572 -1.354 29.962 1.00 6.76 C +ATOM 1389 O GLY A 168 0.338 -0.402 29.226 1.00 6.58 O +ATOM 1390 N VAL A 169 1.747 -1.548 30.552 1.00 6.79 N +ATOM 1391 CA VAL A 169 2.885 -0.653 30.356 1.00 6.95 C +ATOM 1392 C VAL A 169 3.705 -1.123 29.151 1.00 7.02 C +ATOM 1393 O VAL A 169 3.719 -2.314 28.819 1.00 7.16 O +ATOM 1394 CB VAL A 169 3.773 -0.627 31.620 1.00 7.05 C +ATOM 1395 CG1 VAL A 169 4.985 0.275 31.434 1.00 7.11 C +ATOM 1396 CG2 VAL A 169 2.957 -0.190 32.830 1.00 7.04 C +ATOM 1397 N GLY A 170 4.376 -0.180 28.487 1.00 7.04 N +ATOM 1398 CA GLY A 170 5.343 -0.515 27.451 1.00 7.18 C +ATOM 1399 C GLY A 170 4.987 -0.099 26.038 1.00 7.16 C +ATOM 1400 O GLY A 170 5.717 -0.430 25.119 1.00 7.27 O +ATOM 1401 N TYR A 171 3.880 0.618 25.846 1.00 7.05 N +ATOM 1402 CA TYR A 171 3.442 0.971 24.491 1.00 7.08 C +ATOM 1403 C TYR A 171 4.470 1.804 23.745 1.00 7.18 C +ATOM 1404 O TYR A 171 5.151 2.651 24.331 1.00 7.18 O +ATOM 1405 CB TYR A 171 2.122 1.737 24.512 1.00 7.06 C +ATOM 1406 CG TYR A 171 1.515 1.961 23.135 1.00 6.97 C +ATOM 1407 CD1 TYR A 171 1.025 0.897 22.393 1.00 7.01 C +ATOM 1408 CD2 TYR A 171 1.429 3.235 22.586 1.00 7.02 C +ATOM 1409 CE1 TYR A 171 0.475 1.090 21.133 1.00 6.96 C +ATOM 1410 CE2 TYR A 171 0.866 3.442 21.340 1.00 6.99 C +ATOM 1411 CZ TYR A 171 0.388 2.363 20.616 1.00 6.96 C +ATOM 1412 OH TYR A 171 -0.161 2.562 19.365 1.00 7.10 O +ATOM 1413 N CYS A 172 4.548 1.542 22.444 1.00 7.32 N +ATOM 1414 CA CYS A 172 5.326 2.318 21.490 1.00 7.62 C +ATOM 1415 C CYS A 172 4.597 2.164 20.165 1.00 7.57 C +ATOM 1416 O CYS A 172 3.838 1.212 19.986 1.00 7.24 O +ATOM 1417 CB CYS A 172 6.750 1.764 21.378 1.00 7.84 C +ATOM 1418 SG CYS A 172 6.872 0.017 20.889 1.00 8.47 S +ATOM 1419 N ASP A 173 4.799 3.093 19.236 1.00 7.76 N +ATOM 1420 CA ASP A 173 4.327 2.888 17.864 1.00 8.06 C +ATOM 1421 C ASP A 173 5.075 3.789 16.883 1.00 8.20 C +ATOM 1422 O ASP A 173 6.016 4.488 17.280 1.00 7.93 O +ATOM 1423 CB ASP A 173 2.785 2.948 17.761 1.00 8.19 C +ATOM 1424 CG ASP A 173 2.212 4.346 17.835 1.00 8.48 C +ATOM 1425 OD1 ASP A 173 2.903 5.331 17.524 1.00 8.52 O +ATOM 1426 OD2 ASP A 173 1.012 4.454 18.187 1.00 8.86 O +ATOM 1427 N ASER A 174 4.665 3.768 15.616 0.70 8.34 N +ATOM 1428 N BSER A 174 4.684 3.758 15.612 0.30 8.43 N +ATOM 1429 CA ASER A 174 5.409 4.444 14.553 0.70 8.58 C +ATOM 1430 CA BSER A 174 5.430 4.456 14.565 0.30 8.69 C +ATOM 1431 C ASER A 174 5.187 5.961 14.533 0.70 8.92 C +ATOM 1432 C BSER A 174 5.169 5.964 14.513 0.30 9.01 C +ATOM 1433 O ASER A 174 5.831 6.668 13.758 0.70 8.87 O +ATOM 1434 O BSER A 174 5.761 6.665 13.692 0.30 9.00 O +ATOM 1435 CB ASER A 174 5.048 3.841 13.194 0.70 8.62 C +ATOM 1436 CB BSER A 174 5.142 3.819 13.208 0.30 8.70 C +ATOM 1437 OG ASER A 174 3.723 4.169 12.836 0.70 8.56 O +ATOM 1438 OG BSER A 174 5.784 2.561 13.115 0.30 8.66 O +ATOM 1439 N GLN A 175 4.289 6.455 15.383 1.00 9.36 N +ATOM 1440 CA GLN A 175 4.103 7.895 15.573 1.00 10.11 C +ATOM 1441 C GLN A 175 5.029 8.459 16.649 1.00 10.13 C +ATOM 1442 O GLN A 175 5.055 9.674 16.860 1.00 10.19 O +ATOM 1443 CB GLN A 175 2.657 8.213 15.968 1.00 10.81 C +ATOM 1444 CG GLN A 175 1.607 7.720 14.992 1.00 11.51 C +ATOM 1445 CD GLN A 175 1.852 8.187 13.572 1.00 12.15 C +ATOM 1446 OE1 GLN A 175 1.653 7.432 12.623 1.00 13.36 O +ATOM 1447 NE2 GLN A 175 2.294 9.428 13.421 1.00 12.56 N +ATOM 1448 N CYS A 176 5.775 7.592 17.333 1.00 10.33 N +ATOM 1449 CA CYS A 176 6.654 8.014 18.430 1.00 10.62 C +ATOM 1450 C CYS A 176 5.887 8.880 19.436 1.00 10.67 C +ATOM 1451 O CYS A 176 6.295 10.004 19.719 1.00 10.67 O +ATOM 1452 CB CYS A 176 7.872 8.768 17.882 1.00 10.86 C +ATOM 1453 SG CYS A 176 9.003 7.757 16.910 1.00 11.43 S +ATOM 1454 N PRO A 177 4.762 8.363 19.968 1.00 10.67 N +ATOM 1455 CA PRO A 177 3.866 9.186 20.777 1.00 10.84 C +ATOM 1456 C PRO A 177 4.541 9.793 21.997 1.00 11.10 C +ATOM 1457 O PRO A 177 5.231 9.097 22.746 1.00 11.03 O +ATOM 1458 CB PRO A 177 2.763 8.207 21.202 1.00 10.71 C +ATOM 1459 CG PRO A 177 3.354 6.852 21.027 1.00 10.82 C +ATOM 1460 CD PRO A 177 4.253 6.987 19.840 1.00 10.61 C +ATOM 1461 N ARG A 178 4.341 11.096 22.166 1.00 11.65 N +ATOM 1462 CA ARG A 178 4.834 11.812 23.329 1.00 12.00 C +ATOM 1463 C ARG A 178 3.746 12.038 24.393 1.00 11.95 C +ATOM 1464 O ARG A 178 4.040 12.578 25.461 1.00 11.69 O +ATOM 1465 CB ARG A 178 5.455 13.145 22.888 1.00 12.64 C +ATOM 1466 CG ARG A 178 6.678 12.997 21.984 1.00 13.20 C +ATOM 1467 CD ARG A 178 7.063 14.318 21.336 1.00 14.08 C +ATOM 1468 NE ARG A 178 7.351 15.339 22.339 1.00 14.98 N +ATOM 1469 CZ ARG A 178 7.454 16.644 22.096 1.00 15.63 C +ATOM 1470 NH1 ARG A 178 7.303 17.127 20.866 1.00 16.05 N +ATOM 1471 NH2 ARG A 178 7.725 17.475 23.097 1.00 16.08 N +ATOM 1472 N AASP A 179 2.510 11.611 24.127 0.50 11.97 N +ATOM 1473 N BASP A 179 2.508 11.626 24.104 0.50 12.02 N +ATOM 1474 CA AASP A 179 1.426 11.779 25.099 0.50 12.06 C +ATOM 1475 CA BASP A 179 1.413 11.757 25.067 0.50 12.15 C +ATOM 1476 C AASP A 179 1.411 10.689 26.179 0.50 11.93 C +ATOM 1477 C BASP A 179 1.313 10.570 26.034 0.50 12.08 C +ATOM 1478 O AASP A 179 0.562 10.706 27.077 0.50 11.99 O +ATOM 1479 O BASP A 179 0.282 10.374 26.674 0.50 12.56 O +ATOM 1480 CB AASP A 179 0.070 11.841 24.390 0.50 12.43 C +ATOM 1481 CB BASP A 179 0.068 12.003 24.358 0.50 12.48 C +ATOM 1482 CG AASP A 179 -0.424 10.482 23.951 0.50 12.68 C +ATOM 1483 CG BASP A 179 -0.170 11.082 23.168 0.50 12.61 C +ATOM 1484 OD1AASP A 179 0.414 9.613 23.637 0.50 13.14 O +ATOM 1485 OD1BASP A 179 0.767 10.391 22.724 0.50 12.73 O +ATOM 1486 OD2AASP A 179 -1.658 10.291 23.911 0.50 13.06 O +ATOM 1487 OD2BASP A 179 -1.317 11.070 22.663 0.50 13.02 O +ATOM 1488 N LEU A 180 2.377 9.775 26.123 1.00 11.90 N +ATOM 1489 CA LEU A 180 2.460 8.680 27.087 1.00 11.78 C +ATOM 1490 C LEU A 180 2.986 9.206 28.415 1.00 11.29 C +ATOM 1491 O LEU A 180 3.918 10.009 28.443 1.00 11.03 O +ATOM 1492 CB LEU A 180 3.381 7.578 26.561 1.00 11.98 C +ATOM 1493 CG LEU A 180 2.967 6.990 25.204 1.00 12.40 C +ATOM 1494 CD1 LEU A 180 4.015 5.999 24.729 1.00 12.63 C +ATOM 1495 CD2 LEU A 180 1.592 6.343 25.262 1.00 12.71 C +ATOM 1496 N LYS A 181 2.381 8.760 29.514 1.00 10.97 N +ATOM 1497 CA LYS A 181 2.800 9.185 30.846 1.00 11.06 C +ATOM 1498 C LYS A 181 4.058 8.467 31.294 1.00 10.72 C +ATOM 1499 O LYS A 181 4.858 9.029 32.039 1.00 10.15 O +ATOM 1500 CB LYS A 181 1.687 8.942 31.855 1.00 11.50 C +ATOM 1501 CG LYS A 181 0.466 9.791 31.580 1.00 12.03 C +ATOM 1502 CD LYS A 181 -0.764 9.236 32.272 1.00 12.58 C +ATOM 1503 CE LYS A 181 -2.018 9.780 31.626 1.00 12.80 C +ATOM 1504 NZ LYS A 181 -3.243 9.355 32.342 1.00 12.88 N +ATOM 1505 N PHE A 182 4.217 7.220 30.854 1.00 10.70 N +ATOM 1506 CA PHE A 182 5.409 6.437 31.145 1.00 10.73 C +ATOM 1507 C PHE A 182 6.041 5.871 29.890 1.00 10.66 C +ATOM 1508 O PHE A 182 5.348 5.309 29.041 1.00 10.70 O +ATOM 1509 CB PHE A 182 5.071 5.303 32.108 1.00 10.88 C +ATOM 1510 CG PHE A 182 4.842 5.777 33.500 1.00 10.91 C +ATOM 1511 CD1 PHE A 182 5.903 5.908 34.377 1.00 11.10 C +ATOM 1512 CD2 PHE A 182 3.576 6.148 33.919 1.00 11.15 C +ATOM 1513 CE1 PHE A 182 5.703 6.379 35.656 1.00 11.07 C +ATOM 1514 CE2 PHE A 182 3.368 6.616 35.199 1.00 11.14 C +ATOM 1515 CZ PHE A 182 4.435 6.741 36.070 1.00 11.21 C +ATOM 1516 N ILE A 183 7.361 6.021 29.790 1.00 10.63 N +ATOM 1517 CA ILE A 183 8.132 5.498 28.666 1.00 10.77 C +ATOM 1518 C ILE A 183 9.433 4.875 29.171 1.00 11.15 C +ATOM 1519 O ILE A 183 10.242 5.543 29.820 1.00 11.19 O +ATOM 1520 CB ILE A 183 8.473 6.595 27.633 1.00 10.70 C +ATOM 1521 CG1 ILE A 183 7.198 7.255 27.095 1.00 10.76 C +ATOM 1522 CG2 ILE A 183 9.288 6.006 26.486 1.00 10.69 C +ATOM 1523 CD1 ILE A 183 7.449 8.477 26.228 1.00 10.79 C +ATOM 1524 N ALA A 184 9.611 3.591 28.870 1.00 11.60 N +ATOM 1525 CA ALA A 184 10.829 2.852 29.197 1.00 11.80 C +ATOM 1526 C ALA A 184 11.237 2.956 30.668 1.00 11.91 C +ATOM 1527 O ALA A 184 12.417 3.102 30.978 1.00 12.22 O +ATOM 1528 CB ALA A 184 11.973 3.292 28.287 1.00 11.96 C +ATOM 1529 N GLY A 185 10.255 2.877 31.563 1.00 11.85 N +ATOM 1530 CA GLY A 185 10.515 2.813 33.002 1.00 11.90 C +ATOM 1531 C GLY A 185 10.761 4.151 33.683 1.00 11.84 C +ATOM 1532 O GLY A 185 11.231 4.192 34.823 1.00 12.43 O +ATOM 1533 N SER A 186 10.437 5.240 32.991 1.00 11.52 N +ATOM 1534 CA SER A 186 10.483 6.590 33.556 1.00 11.55 C +ATOM 1535 C SER A 186 9.166 7.279 33.255 1.00 11.07 C +ATOM 1536 O SER A 186 8.507 6.959 32.265 1.00 10.84 O +ATOM 1537 CB SER A 186 11.608 7.410 32.926 1.00 11.97 C +ATOM 1538 OG SER A 186 12.878 6.897 33.260 1.00 12.85 O +ATOM 1539 N ALA A 187 8.784 8.236 34.095 1.00 10.52 N +ATOM 1540 CA ALA A 187 7.658 9.095 33.761 1.00 10.43 C +ATOM 1541 C ALA A 187 8.064 10.059 32.651 1.00 10.45 C +ATOM 1542 O ALA A 187 9.238 10.167 32.305 1.00 10.67 O +ATOM 1543 CB ALA A 187 7.170 9.859 34.976 1.00 10.38 C +ATOM 1544 N ASN A 188 7.077 10.750 32.102 1.00 10.40 N +ATOM 1545 CA ASN A 188 7.287 11.710 31.023 1.00 10.57 C +ATOM 1546 C ASN A 188 6.849 13.115 31.460 1.00 11.04 C +ATOM 1547 O ASN A 188 6.396 13.923 30.651 1.00 11.51 O +ATOM 1548 CB ASN A 188 6.509 11.237 29.786 1.00 10.30 C +ATOM 1549 CG ASN A 188 7.034 11.822 28.482 1.00 10.08 C +ATOM 1550 OD1 ASN A 188 8.171 12.302 28.394 1.00 10.02 O +ATOM 1551 ND2 ASN A 188 6.200 11.776 27.453 1.00 9.94 N +ATOM 1552 N VAL A 189 7.000 13.398 32.752 1.00 11.35 N +ATOM 1553 CA VAL A 189 6.609 14.693 33.326 1.00 11.61 C +ATOM 1554 C VAL A 189 7.512 15.849 32.883 1.00 11.87 C +ATOM 1555 O VAL A 189 7.044 16.982 32.733 1.00 11.79 O +ATOM 1556 CB VAL A 189 6.548 14.633 34.879 1.00 11.62 C +ATOM 1557 CG1 VAL A 189 7.906 14.313 35.498 1.00 11.70 C +ATOM 1558 CG2 VAL A 189 6.007 15.931 35.455 1.00 11.61 C +ATOM 1559 N GLN A 190 8.796 15.567 32.677 1.00 12.20 N +ATOM 1560 CA GLN A 190 9.728 16.598 32.229 1.00 12.91 C +ATOM 1561 C GLN A 190 9.358 17.039 30.817 1.00 13.12 C +ATOM 1562 O GLN A 190 9.231 16.216 29.908 1.00 13.03 O +ATOM 1563 CB GLN A 190 11.166 16.094 32.286 1.00 13.26 C +ATOM 1564 CG GLN A 190 11.680 15.938 33.707 1.00 13.80 C +ATOM 1565 CD GLN A 190 13.079 15.375 33.763 1.00 14.44 C +ATOM 1566 OE1 GLN A 190 13.329 14.374 34.436 1.00 14.53 O +ATOM 1567 NE2 GLN A 190 14.003 16.006 33.044 1.00 14.98 N +ATOM 1568 N GLY A 191 9.153 18.340 30.650 1.00 13.44 N +ATOM 1569 CA GLY A 191 8.712 18.890 29.375 1.00 14.02 C +ATOM 1570 C GLY A 191 7.224 18.745 29.099 1.00 14.35 C +ATOM 1571 O GLY A 191 6.773 19.059 27.995 1.00 14.46 O +ATOM 1572 N TRP A 192 6.448 18.288 30.081 1.00 14.93 N +ATOM 1573 CA TRP A 192 5.012 18.093 29.876 1.00 15.51 C +ATOM 1574 C TRP A 192 4.303 19.422 29.662 1.00 16.83 C +ATOM 1575 O TRP A 192 4.479 20.359 30.440 1.00 17.29 O +ATOM 1576 CB TRP A 192 4.364 17.368 31.053 1.00 15.29 C +ATOM 1577 CG TRP A 192 2.952 16.913 30.777 1.00 14.87 C +ATOM 1578 CD1 TRP A 192 1.797 17.576 31.085 1.00 14.84 C +ATOM 1579 CD2 TRP A 192 2.556 15.692 30.139 1.00 14.70 C +ATOM 1580 NE1 TRP A 192 0.705 16.839 30.683 1.00 14.64 N +ATOM 1581 CE2 TRP A 192 1.145 15.679 30.101 1.00 14.68 C +ATOM 1582 CE3 TRP A 192 3.258 14.601 29.608 1.00 14.58 C +ATOM 1583 CZ2 TRP A 192 0.422 14.623 29.542 1.00 14.68 C +ATOM 1584 CZ3 TRP A 192 2.538 13.550 29.059 1.00 14.63 C +ATOM 1585 CH2 TRP A 192 1.133 13.574 29.028 1.00 14.58 C +ATOM 1586 N GLU A 193 3.515 19.493 28.597 1.00 18.38 N +ATOM 1587 CA GLU A 193 2.703 20.659 28.315 1.00 20.12 C +ATOM 1588 C GLU A 193 1.310 20.206 27.907 1.00 20.21 C +ATOM 1589 O GLU A 193 1.172 19.272 27.113 1.00 19.58 O +ATOM 1590 CB GLU A 193 3.333 21.489 27.195 1.00 21.59 C +ATOM 1591 CG GLU A 193 4.644 22.175 27.570 1.00 23.22 C +ATOM 1592 CD GLU A 193 4.492 23.255 28.634 1.00 24.78 C +ATOM 1593 OE1 GLU A 193 3.345 23.655 28.945 1.00 26.87 O +ATOM 1594 OE2 GLU A 193 5.528 23.711 29.167 1.00 26.80 O +ATOM 1595 N PRO A 194 0.267 20.851 28.458 1.00 20.53 N +ATOM 1596 CA PRO A 194 -1.089 20.617 27.971 1.00 21.54 C +ATOM 1597 C PRO A 194 -1.204 20.880 26.471 1.00 22.80 C +ATOM 1598 O PRO A 194 -0.604 21.830 25.965 1.00 23.49 O +ATOM 1599 CB PRO A 194 -1.915 21.638 28.755 1.00 21.13 C +ATOM 1600 CG PRO A 194 -1.175 21.798 30.034 1.00 20.85 C +ATOM 1601 CD PRO A 194 0.273 21.714 29.656 1.00 20.62 C +ATOM 1602 N ALA A 195 -1.957 20.037 25.773 1.00 24.71 N +ATOM 1603 CA ALA A 195 -2.142 20.178 24.327 1.00 26.41 C +ATOM 1604 C ALA A 195 -3.544 19.726 23.942 1.00 27.87 C +ATOM 1605 O ALA A 195 -3.947 18.601 24.242 1.00 28.71 O +ATOM 1606 CB ALA A 195 -1.097 19.371 23.574 1.00 26.39 C +ATOM 1607 N SER A 196 -4.277 20.617 23.280 1.00 29.81 N +ATOM 1608 CA SER A 196 -5.675 20.378 22.933 1.00 31.13 C +ATOM 1609 C SER A 196 -5.867 19.271 21.897 1.00 30.70 C +ATOM 1610 O SER A 196 -6.911 18.620 21.884 1.00 30.01 O +ATOM 1611 CB SER A 196 -6.307 21.663 22.402 1.00 32.82 C +ATOM 1612 OG SER A 196 -5.736 22.014 21.148 1.00 34.58 O +ATOM 1613 N ASN A 197 -4.869 19.067 21.036 1.00 30.00 N +ATOM 1614 CA ASN A 197 -4.979 18.091 19.944 1.00 30.05 C +ATOM 1615 C ASN A 197 -4.353 16.727 20.261 1.00 29.94 C +ATOM 1616 O ASN A 197 -3.935 16.004 19.356 1.00 29.69 O +ATOM 1617 CB ASN A 197 -4.420 18.674 18.632 1.00 30.24 C +ATOM 1618 CG ASN A 197 -2.938 18.993 18.700 1.00 30.50 C +ATOM 1619 OD1 ASN A 197 -2.324 18.980 19.769 1.00 30.46 O +ATOM 1620 ND2 ASN A 197 -2.355 19.292 17.544 1.00 30.80 N +ATOM 1621 N SER A 198 -4.318 16.377 21.546 1.00 30.09 N +ATOM 1622 CA SER A 198 -3.878 15.062 21.998 1.00 30.34 C +ATOM 1623 C SER A 198 -4.972 14.408 22.835 1.00 30.56 C +ATOM 1624 O SER A 198 -5.735 15.093 23.519 1.00 30.00 O +ATOM 1625 CB SER A 198 -2.599 15.190 22.819 1.00 30.72 C +ATOM 1626 OG SER A 198 -2.353 14.005 23.550 1.00 30.96 O +ATOM 1627 N GLY A 202 -2.001 15.914 26.955 1.00 17.41 N +ATOM 1628 CA GLY A 202 -0.735 16.643 26.950 1.00 17.04 C +ATOM 1629 C GLY A 202 0.371 15.909 26.225 1.00 16.96 C +ATOM 1630 O GLY A 202 0.175 14.796 25.738 1.00 17.18 O +ATOM 1631 N ALEU A 203 1.532 16.550 26.139 0.80 16.93 N +ATOM 1632 N BLEU A 203 1.547 16.533 26.195 0.20 16.51 N +ATOM 1633 CA ALEU A 203 2.694 15.997 25.455 0.80 17.10 C +ATOM 1634 CA BLEU A 203 2.693 16.045 25.435 0.20 16.23 C +ATOM 1635 C ALEU A 203 3.909 16.192 26.342 0.80 16.29 C +ATOM 1636 C BLEU A 203 3.966 16.225 26.260 0.20 15.83 C +ATOM 1637 O ALEU A 203 4.120 17.279 26.877 0.80 16.21 O +ATOM 1638 O BLEU A 203 4.288 17.346 26.655 0.20 15.85 O +ATOM 1639 CB ALEU A 203 2.931 16.715 24.126 0.80 17.63 C +ATOM 1640 CB BLEU A 203 2.815 16.850 24.140 0.20 16.23 C +ATOM 1641 CG ALEU A 203 1.792 16.690 23.105 0.80 18.22 C +ATOM 1642 CG BLEU A 203 3.560 16.209 22.972 0.20 16.25 C +ATOM 1643 CD1ALEU A 203 2.051 17.705 22.003 0.80 18.52 C +ATOM 1644 CD1BLEU A 203 2.658 15.210 22.265 0.20 16.21 C +ATOM 1645 CD2ALEU A 203 1.612 15.293 22.532 0.80 18.66 C +ATOM 1646 CD2BLEU A 203 4.044 17.274 21.999 0.20 16.28 C +ATOM 1647 N GLY A 204 4.694 15.136 26.505 1.00 15.42 N +ATOM 1648 CA GLY A 204 5.917 15.192 27.300 1.00 14.72 C +ATOM 1649 C GLY A 204 7.170 15.363 26.470 1.00 14.03 C +ATOM 1650 O GLY A 204 7.123 15.374 25.239 1.00 13.50 O +ATOM 1651 N GLY A 205 8.303 15.465 27.157 1.00 13.39 N +ATOM 1652 CA GLY A 205 9.591 15.638 26.509 1.00 13.43 C +ATOM 1653 C GLY A 205 10.030 14.497 25.606 1.00 13.24 C +ATOM 1654 O GLY A 205 10.743 14.722 24.632 1.00 13.76 O +ATOM 1655 N AASN A 206 9.599 13.276 25.913 0.50 13.08 N +ATOM 1656 N BASN A 206 9.625 13.270 25.944 0.50 13.08 N +ATOM 1657 CA AASN A 206 10.021 12.116 25.139 0.50 13.01 C +ATOM 1658 CA BASN A 206 10.063 12.074 25.224 0.50 13.01 C +ATOM 1659 C AASN A 206 8.883 11.351 24.515 0.50 12.10 C +ATOM 1660 C BASN A 206 8.903 11.359 24.524 0.50 12.10 C +ATOM 1661 O AASN A 206 7.732 11.457 24.941 0.50 11.74 O +ATOM 1662 O BASN A 206 7.746 11.511 24.918 0.50 11.73 O +ATOM 1663 CB AASN A 206 10.886 11.197 25.993 0.50 13.64 C +ATOM 1664 CB BASN A 206 10.766 11.100 26.181 0.50 13.60 C +ATOM 1665 CG AASN A 206 12.128 11.898 26.470 0.50 14.42 C +ATOM 1666 CG BASN A 206 11.582 11.809 27.254 0.50 14.43 C +ATOM 1667 OD1AASN A 206 13.235 11.653 25.990 0.50 14.65 O +ATOM 1668 OD1BASN A 206 11.572 11.410 28.410 0.50 14.64 O +ATOM 1669 ND2AASN A 206 11.942 12.808 27.404 0.50 15.60 N +ATOM 1670 ND2BASN A 206 12.290 12.858 26.878 0.50 15.65 N +ATOM 1671 N GLY A 207 9.233 10.597 23.479 1.00 11.47 N +ATOM 1672 CA GLY A 207 8.268 9.777 22.746 1.00 10.77 C +ATOM 1673 C GLY A 207 8.742 8.342 22.692 1.00 9.92 C +ATOM 1674 O GLY A 207 9.906 8.046 22.946 1.00 9.66 O +ATOM 1675 N SER A 208 7.827 7.445 22.343 1.00 9.14 N +ATOM 1676 CA SER A 208 8.083 6.008 22.397 1.00 8.87 C +ATOM 1677 C SER A 208 7.932 5.386 21.011 1.00 8.78 C +ATOM 1678 O SER A 208 6.815 5.148 20.558 1.00 8.67 O +ATOM 1679 CB SER A 208 7.107 5.361 23.379 1.00 8.83 C +ATOM 1680 OG SER A 208 7.391 3.990 23.557 1.00 8.77 O +ATOM 1681 N CYS A 209 9.061 5.100 20.365 1.00 8.78 N +ATOM 1682 CA CYS A 209 9.090 4.708 18.952 1.00 9.02 C +ATOM 1683 C CYS A 209 9.225 3.210 18.765 1.00 8.63 C +ATOM 1684 O CYS A 209 9.985 2.567 19.477 1.00 8.51 O +ATOM 1685 CB CYS A 209 10.292 5.348 18.253 1.00 9.58 C +ATOM 1686 SG CYS A 209 10.391 7.144 18.305 1.00 10.90 S +ATOM 1687 N CYS A 210 8.514 2.670 17.779 1.00 8.19 N +ATOM 1688 CA CYS A 210 8.792 1.322 17.274 1.00 7.99 C +ATOM 1689 C CYS A 210 8.068 1.100 15.956 1.00 7.68 C +ATOM 1690 O CYS A 210 7.289 1.950 15.521 1.00 7.42 O +ATOM 1691 CB CYS A 210 8.437 0.226 18.301 1.00 8.09 C +ATOM 1692 SG CYS A 210 6.719 0.110 18.836 1.00 8.36 S +ATOM 1693 N ALA A 211 8.343 -0.030 15.310 1.00 7.39 N +ATOM 1694 CA ALA A 211 7.627 -0.399 14.089 1.00 7.24 C +ATOM 1695 C ALA A 211 6.170 -0.695 14.437 1.00 7.20 C +ATOM 1696 O ALA A 211 5.827 -0.864 15.606 1.00 7.16 O +ATOM 1697 CB ALA A 211 8.278 -1.606 13.436 1.00 7.29 C +ATOM 1698 N GLU A 212 5.312 -0.733 13.426 1.00 7.02 N +ATOM 1699 CA GLU A 212 3.883 -0.868 13.672 1.00 7.21 C +ATOM 1700 C GLU A 212 3.201 -1.488 12.474 1.00 7.07 C +ATOM 1701 O GLU A 212 3.358 -1.016 11.358 1.00 6.89 O +ATOM 1702 CB GLU A 212 3.281 0.504 13.957 1.00 7.43 C +ATOM 1703 CG GLU A 212 1.786 0.496 14.240 1.00 7.73 C +ATOM 1704 CD GLU A 212 1.221 1.883 14.467 1.00 7.96 C +ATOM 1705 OE1 GLU A 212 1.993 2.863 14.565 1.00 8.15 O +ATOM 1706 OE2 GLU A 212 -0.020 1.995 14.564 1.00 8.54 O +ATOM 1707 N LEU A 213 2.432 -2.541 12.721 1.00 7.05 N +ATOM 1708 CA LEU A 213 1.671 -3.191 11.672 1.00 7.15 C +ATOM 1709 C LEU A 213 0.190 -2.946 11.898 1.00 7.06 C +ATOM 1710 O LEU A 213 -0.425 -3.606 12.728 1.00 6.87 O +ATOM 1711 CB LEU A 213 1.960 -4.683 11.670 1.00 7.44 C +ATOM 1712 CG LEU A 213 1.112 -5.507 10.705 1.00 7.71 C +ATOM 1713 CD1 LEU A 213 1.396 -5.128 9.260 1.00 7.82 C +ATOM 1714 CD2 LEU A 213 1.368 -6.984 10.933 1.00 7.87 C +ATOM 1715 N ASP A 214 -0.378 -1.990 11.175 1.00 6.90 N +ATOM 1716 CA ASP A 214 -1.804 -1.703 11.305 1.00 7.01 C +ATOM 1717 C ASP A 214 -2.597 -2.646 10.421 1.00 6.67 C +ATOM 1718 O ASP A 214 -2.921 -2.337 9.273 1.00 6.65 O +ATOM 1719 CB ASP A 214 -2.089 -0.242 10.996 1.00 7.28 C +ATOM 1720 CG ASP A 214 -1.401 0.685 11.968 1.00 7.67 C +ATOM 1721 OD1 ASP A 214 -1.418 0.382 13.186 1.00 8.13 O +ATOM 1722 OD2 ASP A 214 -0.834 1.694 11.522 1.00 8.40 O +ATOM 1723 N ILE A 215 -2.891 -3.816 10.977 1.00 6.36 N +ATOM 1724 CA ILE A 215 -3.672 -4.839 10.295 1.00 6.20 C +ATOM 1725 C ILE A 215 -5.032 -4.252 9.920 1.00 6.03 C +ATOM 1726 O ILE A 215 -5.530 -4.478 8.823 1.00 6.10 O +ATOM 1727 CB ILE A 215 -3.877 -6.097 11.179 1.00 6.27 C +ATOM 1728 CG1 ILE A 215 -2.540 -6.793 11.481 1.00 6.23 C +ATOM 1729 CG2 ILE A 215 -4.835 -7.085 10.519 1.00 6.31 C +ATOM 1730 CD1 ILE A 215 -2.642 -7.924 12.485 1.00 6.28 C +ATOM 1731 N TRP A 216 -5.615 -3.489 10.837 1.00 5.87 N +ATOM 1732 CA TRP A 216 -6.984 -3.020 10.683 1.00 5.84 C +ATOM 1733 C TRP A 216 -7.200 -1.678 11.355 1.00 5.92 C +ATOM 1734 O TRP A 216 -7.104 -1.567 12.573 1.00 5.87 O +ATOM 1735 CB TRP A 216 -7.925 -4.049 11.310 1.00 5.74 C +ATOM 1736 CG TRP A 216 -9.389 -3.796 11.112 1.00 5.68 C +ATOM 1737 CD1 TRP A 216 -10.292 -3.450 12.073 1.00 5.68 C +ATOM 1738 CD2 TRP A 216 -10.127 -3.900 9.886 1.00 5.68 C +ATOM 1739 NE1 TRP A 216 -11.545 -3.330 11.523 1.00 5.74 N +ATOM 1740 CE2 TRP A 216 -11.470 -3.593 10.182 1.00 5.64 C +ATOM 1741 CE3 TRP A 216 -9.782 -4.209 8.564 1.00 5.68 C +ATOM 1742 CZ2 TRP A 216 -12.466 -3.588 9.206 1.00 5.64 C +ATOM 1743 CZ3 TRP A 216 -10.781 -4.206 7.593 1.00 5.63 C +ATOM 1744 CH2 TRP A 216 -12.103 -3.897 7.925 1.00 5.63 C +ATOM 1745 N AGLU A 217 -7.489 -0.667 10.549 0.50 5.86 N +ATOM 1746 N BGLU A 217 -7.448 -0.650 10.547 0.50 6.05 N +ATOM 1747 CA AGLU A 217 -7.959 0.609 11.051 0.50 5.91 C +ATOM 1748 CA BGLU A 217 -7.921 0.647 11.028 0.50 6.21 C +ATOM 1749 C AGLU A 217 -9.185 0.953 10.244 0.50 5.93 C +ATOM 1750 C BGLU A 217 -9.187 0.921 10.237 0.50 6.10 C +ATOM 1751 O AGLU A 217 -9.108 1.117 9.026 0.50 5.91 O +ATOM 1752 O BGLU A 217 -9.135 1.001 9.010 0.50 6.05 O +ATOM 1753 CB AGLU A 217 -6.888 1.669 10.893 0.50 5.92 C +ATOM 1754 CB BGLU A 217 -6.895 1.747 10.757 0.50 6.46 C +ATOM 1755 CG AGLU A 217 -5.748 1.516 11.877 0.50 5.93 C +ATOM 1756 CG BGLU A 217 -5.483 1.438 11.225 0.50 6.73 C +ATOM 1757 CD AGLU A 217 -4.756 2.637 11.741 0.50 5.99 C +ATOM 1758 CD BGLU A 217 -5.147 2.051 12.563 0.50 6.98 C +ATOM 1759 OE1AGLU A 217 -3.914 2.572 10.827 0.50 6.13 O +ATOM 1760 OE1BGLU A 217 -5.869 2.980 12.992 0.50 7.22 O +ATOM 1761 OE2AGLU A 217 -4.838 3.582 12.542 0.50 6.08 O +ATOM 1762 OE2BGLU A 217 -4.141 1.619 13.175 0.50 7.34 O +ATOM 1763 N ALA A 218 -10.326 1.036 10.915 1.00 5.95 N +ATOM 1764 CA ALA A 218 -11.595 1.091 10.196 1.00 5.98 C +ATOM 1765 C ALA A 218 -12.779 1.584 10.991 1.00 6.07 C +ATOM 1766 O ALA A 218 -12.825 1.504 12.222 1.00 6.07 O +ATOM 1767 CB ALA A 218 -11.925 -0.291 9.643 1.00 5.99 C +ATOM 1768 N ASN A 219 -13.752 2.076 10.237 1.00 6.14 N +ATOM 1769 CA ASN A 219 -15.099 2.300 10.733 1.00 6.31 C +ATOM 1770 C ASN A 219 -16.060 1.764 9.675 1.00 6.54 C +ATOM 1771 O ASN A 219 -15.642 1.023 8.797 1.00 6.50 O +ATOM 1772 CB ASN A 219 -15.323 3.780 11.061 1.00 6.26 C +ATOM 1773 CG ASN A 219 -14.917 4.715 9.934 1.00 6.20 C +ATOM 1774 OD1 ASN A 219 -15.172 4.449 8.766 1.00 6.23 O +ATOM 1775 ND2 ASN A 219 -14.277 5.831 10.294 1.00 6.18 N +ATOM 1776 N SER A 220 -17.333 2.134 9.744 1.00 6.92 N +ATOM 1777 CA SER A 220 -18.304 1.662 8.759 1.00 7.25 C +ATOM 1778 C SER A 220 -18.132 2.262 7.354 1.00 7.27 C +ATOM 1779 O SER A 220 -18.744 1.768 6.405 1.00 7.53 O +ATOM 1780 CB SER A 220 -19.735 1.911 9.247 1.00 7.51 C +ATOM 1781 OG SER A 220 -20.020 3.287 9.336 1.00 7.97 O +ATOM 1782 N AILE A 221 -17.327 3.317 7.224 0.50 7.33 N +ATOM 1783 N BILE A 221 -17.303 3.296 7.229 0.50 7.30 N +ATOM 1784 CA AILE A 221 -17.137 3.995 5.944 0.50 7.37 C +ATOM 1785 CA BILE A 221 -17.138 4.021 5.977 0.50 7.33 C +ATOM 1786 C AILE A 221 -15.910 3.491 5.201 0.50 7.28 C +ATOM 1787 C BILE A 221 -15.906 3.568 5.196 0.50 7.25 C +ATOM 1788 O AILE A 221 -16.003 3.099 4.034 0.50 7.27 O +ATOM 1789 O BILE A 221 -15.991 3.293 3.995 0.50 7.21 O +ATOM 1790 CB AILE A 221 -16.984 5.512 6.127 0.50 7.51 C +ATOM 1791 CB BILE A 221 -17.032 5.529 6.253 0.50 7.44 C +ATOM 1792 CG1AILE A 221 -18.258 6.106 6.719 0.50 7.67 C +ATOM 1793 CG1BILE A 221 -18.253 5.999 7.053 0.50 7.56 C +ATOM 1794 CG2AILE A 221 -16.656 6.170 4.801 0.50 7.48 C +ATOM 1795 CG2BILE A 221 -16.889 6.294 4.950 0.50 7.41 C +ATOM 1796 CD1AILE A 221 -18.322 5.971 8.220 0.50 7.74 C +ATOM 1797 CD1BILE A 221 -19.578 5.656 6.409 0.50 7.63 C +ATOM 1798 N SER A 222 -14.760 3.517 5.874 1.00 7.20 N +ATOM 1799 CA SER A 222 -13.491 3.148 5.246 1.00 7.17 C +ATOM 1800 C SER A 222 -12.628 2.281 6.149 1.00 6.88 C +ATOM 1801 O SER A 222 -12.774 2.294 7.380 1.00 6.77 O +ATOM 1802 CB SER A 222 -12.705 4.406 4.875 1.00 7.36 C +ATOM 1803 OG SER A 222 -13.352 5.118 3.837 1.00 7.93 O +ATOM 1804 N ALA A 223 -11.719 1.547 5.515 1.00 6.58 N +ATOM 1805 CA ALA A 223 -10.762 0.693 6.208 1.00 6.51 C +ATOM 1806 C ALA A 223 -9.397 0.821 5.555 1.00 6.39 C +ATOM 1807 O ALA A 223 -9.296 1.021 4.341 1.00 6.51 O +ATOM 1808 CB ALA A 223 -11.226 -0.756 6.181 1.00 6.44 C +ATOM 1809 N ALA A 224 -8.346 0.693 6.356 1.00 6.30 N +ATOM 1810 CA ALA A 224 -6.988 0.714 5.838 1.00 6.18 C +ATOM 1811 C ALA A 224 -6.136 -0.375 6.485 1.00 6.12 C +ATOM 1812 O ALA A 224 -6.289 -0.696 7.669 1.00 6.06 O +ATOM 1813 CB ALA A 224 -6.354 2.075 6.051 1.00 6.15 C +ATOM 1814 N LEU A 225 -5.247 -0.937 5.670 1.00 5.98 N +ATOM 1815 CA LEU A 225 -4.230 -1.883 6.098 1.00 5.94 C +ATOM 1816 C LEU A 225 -2.893 -1.206 5.844 1.00 5.91 C +ATOM 1817 O LEU A 225 -2.607 -0.815 4.710 1.00 5.94 O +ATOM 1818 CB LEU A 225 -4.342 -3.159 5.270 1.00 6.00 C +ATOM 1819 CG LEU A 225 -3.165 -4.134 5.244 1.00 6.04 C +ATOM 1820 CD1 LEU A 225 -2.895 -4.689 6.630 1.00 6.08 C +ATOM 1821 CD2 LEU A 225 -3.452 -5.246 4.247 1.00 6.12 C +ATOM 1822 N THR A 226 -2.065 -1.089 6.880 1.00 5.84 N +ATOM 1823 CA THR A 226 -0.881 -0.231 6.800 1.00 5.86 C +ATOM 1824 C THR A 226 0.308 -0.703 7.644 1.00 5.81 C +ATOM 1825 O THR A 226 0.349 -0.469 8.847 1.00 5.80 O +ATOM 1826 CB THR A 226 -1.219 1.219 7.220 1.00 5.91 C +ATOM 1827 OG1 THR A 226 -2.417 1.659 6.567 1.00 6.06 O +ATOM 1828 CG2 THR A 226 -0.086 2.158 6.866 1.00 5.95 C +ATOM 1829 N PRO A 227 1.302 -1.342 7.010 1.00 5.97 N +ATOM 1830 CA PRO A 227 2.563 -1.538 7.727 1.00 5.99 C +ATOM 1831 C PRO A 227 3.377 -0.235 7.811 1.00 6.01 C +ATOM 1832 O PRO A 227 3.354 0.572 6.882 1.00 6.13 O +ATOM 1833 CB PRO A 227 3.281 -2.579 6.870 1.00 6.03 C +ATOM 1834 CG PRO A 227 2.751 -2.354 5.498 1.00 6.08 C +ATOM 1835 CD PRO A 227 1.305 -2.024 5.704 1.00 6.06 C +ATOM 1836 N HIS A 228 4.070 -0.046 8.931 1.00 6.05 N +ATOM 1837 CA HIS A 228 4.963 1.104 9.151 1.00 6.10 C +ATOM 1838 C HIS A 228 6.327 0.571 9.549 1.00 6.39 C +ATOM 1839 O HIS A 228 6.436 -0.229 10.484 1.00 6.56 O +ATOM 1840 CB HIS A 228 4.489 1.972 10.317 1.00 6.03 C +ATOM 1841 CG HIS A 228 3.161 2.635 10.121 1.00 5.98 C +ATOM 1842 ND1 HIS A 228 3.033 3.994 9.949 1.00 5.89 N +ATOM 1843 CD2 HIS A 228 1.901 2.142 10.151 1.00 5.89 C +ATOM 1844 CE1 HIS A 228 1.754 4.311 9.867 1.00 5.89 C +ATOM 1845 NE2 HIS A 228 1.046 3.204 9.984 1.00 5.86 N +ATOM 1846 N SER A 229 7.371 1.045 8.882 1.00 6.53 N +ATOM 1847 CA SER A 229 8.732 0.630 9.206 1.00 6.76 C +ATOM 1848 C SER A 229 9.366 1.496 10.307 1.00 6.96 C +ATOM 1849 O SER A 229 8.814 2.524 10.714 1.00 6.96 O +ATOM 1850 CB SER A 229 9.585 0.665 7.943 1.00 6.81 C +ATOM 1851 OG SER A 229 9.572 1.967 7.389 1.00 6.80 O +ATOM 1852 N ALA A 230 10.523 1.047 10.789 1.00 7.36 N +ATOM 1853 CA ALA A 230 11.321 1.778 11.775 1.00 7.69 C +ATOM 1854 C ALA A 230 12.781 1.334 11.709 1.00 8.02 C +ATOM 1855 O ALA A 230 13.071 0.161 11.477 1.00 7.99 O +ATOM 1856 CB ALA A 230 10.772 1.554 13.174 1.00 7.83 C +ATOM 1857 N ASP A 231 13.695 2.277 11.923 1.00 8.58 N +ATOM 1858 CA ASP A 231 15.130 1.974 11.927 1.00 9.00 C +ATOM 1859 C ASP A 231 15.463 0.882 12.939 1.00 9.19 C +ATOM 1860 O ASP A 231 16.211 -0.051 12.645 1.00 9.58 O +ATOM 1861 CB ASP A 231 15.946 3.219 12.278 1.00 9.27 C +ATOM 1862 CG ASP A 231 15.865 4.308 11.227 1.00 9.60 C +ATOM 1863 OD1 ASP A 231 15.435 4.047 10.082 1.00 9.96 O +ATOM 1864 OD2 ASP A 231 16.253 5.442 11.565 1.00 10.04 O +ATOM 1865 N THR A 232 14.921 1.030 14.143 1.00 9.35 N +ATOM 1866 CA THR A 232 14.995 0.008 15.174 1.00 9.43 C +ATOM 1867 C THR A 232 13.566 -0.431 15.436 1.00 9.55 C +ATOM 1868 O THR A 232 12.709 0.388 15.757 1.00 9.58 O +ATOM 1869 CB THR A 232 15.654 0.551 16.453 1.00 9.61 C +ATOM 1870 OG1 THR A 232 17.040 0.819 16.191 1.00 9.87 O +ATOM 1871 CG2 THR A 232 15.540 -0.451 17.597 1.00 9.61 C +ATOM 1872 N VAL A 233 13.302 -1.720 15.270 1.00 9.71 N +ATOM 1873 CA VAL A 233 11.908 -2.179 15.264 1.00 9.78 C +ATOM 1874 C VAL A 233 11.277 -2.203 16.648 1.00 9.93 C +ATOM 1875 O VAL A 233 10.074 -2.007 16.765 1.00 9.94 O +ATOM 1876 CB VAL A 233 11.723 -3.538 14.553 1.00 9.95 C +ATOM 1877 CG1 VAL A 233 12.201 -3.438 13.108 1.00 9.98 C +ATOM 1878 CG2 VAL A 233 12.420 -4.667 15.301 1.00 9.94 C +ATOM 1879 N THR A 234 12.085 -2.437 17.683 1.00 10.06 N +ATOM 1880 CA THR A 234 11.600 -2.447 19.063 1.00 10.43 C +ATOM 1881 C THR A 234 11.691 -1.047 19.664 1.00 10.57 C +ATOM 1882 O THR A 234 12.159 -0.113 19.009 1.00 10.46 O +ATOM 1883 CB THR A 234 12.403 -3.450 19.903 1.00 10.62 C +ATOM 1884 OG1 THR A 234 13.801 -3.211 19.704 1.00 11.41 O +ATOM 1885 CG2 THR A 234 12.065 -4.866 19.470 1.00 10.63 C +ATOM 1886 N GLN A 235 11.232 -0.897 20.905 1.00 11.02 N +ATOM 1887 CA GLN A 235 11.121 0.420 21.520 1.00 11.63 C +ATOM 1888 C GLN A 235 12.433 1.197 21.552 1.00 11.65 C +ATOM 1889 O GLN A 235 13.476 0.672 21.932 1.00 11.61 O +ATOM 1890 CB GLN A 235 10.584 0.315 22.949 1.00 12.32 C +ATOM 1891 CG GLN A 235 10.370 1.674 23.603 1.00 13.04 C +ATOM 1892 CD GLN A 235 9.944 1.573 25.052 1.00 13.63 C +ATOM 1893 OE1 GLN A 235 10.687 1.064 25.898 1.00 14.96 O +ATOM 1894 NE2 GLN A 235 8.754 2.066 25.351 1.00 13.81 N +ATOM 1895 N THR A 236 12.363 2.457 21.138 1.00 11.66 N +ATOM 1896 CA THR A 236 13.429 3.409 21.408 1.00 11.83 C +ATOM 1897 C THR A 236 12.784 4.683 21.925 1.00 12.01 C +ATOM 1898 O THR A 236 11.606 4.950 21.663 1.00 11.93 O +ATOM 1899 CB THR A 236 14.285 3.727 20.164 1.00 11.78 C +ATOM 1900 OG1 THR A 236 13.458 4.262 19.129 1.00 11.87 O +ATOM 1901 CG2 THR A 236 14.986 2.486 19.652 1.00 11.91 C +ATOM 1902 N VAL A 237 13.561 5.465 22.661 1.00 12.37 N +ATOM 1903 CA VAL A 237 13.083 6.713 23.235 1.00 12.80 C +ATOM 1904 C VAL A 237 13.636 7.879 22.425 1.00 13.17 C +ATOM 1905 O VAL A 237 14.836 7.927 22.150 1.00 13.51 O +ATOM 1906 CB VAL A 237 13.520 6.847 24.704 1.00 13.00 C +ATOM 1907 CG1 VAL A 237 12.987 8.137 25.307 1.00 13.14 C +ATOM 1908 CG2 VAL A 237 13.048 5.635 25.497 1.00 13.02 C +ATOM 1909 N CYS A 238 12.760 8.804 22.042 1.00 13.48 N +ATOM 1910 CA CYS A 238 13.170 9.971 21.261 1.00 13.88 C +ATOM 1911 C CYS A 238 12.978 11.253 22.051 1.00 14.76 C +ATOM 1912 O CYS A 238 12.232 11.288 23.025 1.00 14.81 O +ATOM 1913 CB CYS A 238 12.407 10.043 19.941 1.00 13.77 C +ATOM 1914 SG CYS A 238 10.621 10.109 20.137 1.00 13.46 S +ATOM 1915 N ASN A 239 13.658 12.300 21.595 1.00 15.82 N +ATOM 1916 CA ASN A 239 13.744 13.584 22.282 1.00 16.80 C +ATOM 1917 C ASN A 239 12.954 14.653 21.517 1.00 16.68 C +ATOM 1918 O ASN A 239 13.369 15.082 20.444 1.00 16.40 O +ATOM 1919 CB ASN A 239 15.233 13.970 22.404 1.00 17.82 C +ATOM 1920 CG ASN A 239 15.455 15.424 22.807 1.00 18.43 C +ATOM 1921 OD1 ASN A 239 14.658 16.021 23.535 1.00 19.53 O +ATOM 1922 ND2 ASN A 239 16.559 15.997 22.334 1.00 19.05 N +ATOM 1923 N GLY A 240 11.811 15.060 22.064 1.00 17.07 N +ATOM 1924 CA GLY A 240 11.039 16.193 21.540 1.00 17.49 C +ATOM 1925 C GLY A 240 10.711 16.178 20.053 1.00 18.29 C +ATOM 1926 O GLY A 240 10.174 15.201 19.533 1.00 17.12 O +ATOM 1927 N ASP A 241 11.039 17.265 19.359 1.00 19.24 N +ATOM 1928 CA ASP A 241 10.713 17.389 17.937 1.00 20.25 C +ATOM 1929 C ASP A 241 11.517 16.440 17.046 1.00 20.20 C +ATOM 1930 O ASP A 241 11.079 16.121 15.940 1.00 20.28 O +ATOM 1931 CB ASP A 241 10.877 18.839 17.466 1.00 21.41 C +ATOM 1932 CG ASP A 241 9.735 19.729 17.924 1.00 22.59 C +ATOM 1933 OD1 ASP A 241 8.568 19.428 17.582 1.00 24.18 O +ATOM 1934 OD2 ASP A 241 10.001 20.735 18.620 1.00 23.72 O +ATOM 1935 N ASP A 242 12.672 15.980 17.529 1.00 19.83 N +ATOM 1936 CA ASP A 242 13.461 14.969 16.812 1.00 19.68 C +ATOM 1937 C ASP A 242 12.716 13.641 16.682 1.00 17.91 C +ATOM 1938 O ASP A 242 13.082 12.808 15.857 1.00 17.79 O +ATOM 1939 CB ASP A 242 14.810 14.721 17.497 1.00 21.31 C +ATOM 1940 CG ASP A 242 15.725 15.932 17.461 1.00 22.90 C +ATOM 1941 OD1 ASP A 242 15.399 16.928 16.775 1.00 24.99 O +ATOM 1942 OD2 ASP A 242 16.779 15.882 18.131 1.00 25.69 O +ATOM 1943 N CYS A 243 11.687 13.445 17.509 1.00 15.97 N +ATOM 1944 CA CYS A 243 10.824 12.270 17.423 1.00 14.89 C +ATOM 1945 C CYS A 243 10.207 12.061 16.048 1.00 14.98 C +ATOM 1946 O CYS A 243 10.047 10.929 15.610 1.00 14.22 O +ATOM 1947 CB CYS A 243 9.686 12.372 18.444 1.00 14.18 C +ATOM 1948 SG CYS A 243 10.202 12.092 20.151 1.00 13.26 S +ATOM 1949 N GLY A 244 9.841 13.153 15.383 1.00 15.22 N +ATOM 1950 CA GLY A 244 9.031 13.066 14.180 1.00 15.81 C +ATOM 1951 C GLY A 244 7.639 12.620 14.578 1.00 16.47 C +ATOM 1952 O GLY A 244 7.287 12.645 15.757 1.00 16.15 O +ATOM 1953 N GLY A 245 6.854 12.192 13.600 1.00 17.62 N +ATOM 1954 CA GLY A 245 5.506 11.713 13.865 1.00 19.10 C +ATOM 1955 C GLY A 245 4.521 12.844 14.071 1.00 21.15 C +ATOM 1956 O GLY A 245 4.815 14.004 13.781 1.00 20.86 O +ATOM 1957 N THR A 246 3.353 12.496 14.603 1.00 24.10 N +ATOM 1958 CA THR A 246 2.206 13.406 14.647 1.00 27.04 C +ATOM 1959 C THR A 246 2.436 14.681 15.475 1.00 29.01 C +ATOM 1960 O THR A 246 2.011 15.764 15.063 1.00 29.83 O +ATOM 1961 CB THR A 246 0.939 12.660 15.128 1.00 27.46 C +ATOM 1962 OG1 THR A 246 0.571 11.675 14.153 1.00 27.97 O +ATOM 1963 CG2 THR A 246 -0.231 13.614 15.326 1.00 27.62 C +ATOM 1964 N ATYR A 247 3.146 14.542 16.578 0.60 30.32 N +ATOM 1965 N BTYR A 247 3.103 14.542 16.620 0.40 29.93 N +ATOM 1966 CA ATYR A 247 3.452 15.704 17.423 0.60 31.52 C +ATOM 1967 CA BTYR A 247 3.365 15.669 17.521 0.40 30.84 C +ATOM 1968 C ATYR A 247 4.882 16.105 17.359 0.60 31.31 C +ATOM 1969 C BTYR A 247 4.801 16.171 17.393 0.40 30.89 C +ATOM 1970 O ATYR A 247 5.546 16.283 18.379 0.60 31.65 O +ATOM 1971 O BTYR A 247 5.564 16.145 18.361 0.40 31.15 O +ATOM 1972 CB ATYR A 247 3.038 15.470 18.878 0.60 32.16 C +ATOM 1973 CB BTYR A 247 3.097 15.265 18.972 0.40 31.18 C +ATOM 1974 CG ATYR A 247 1.646 15.085 18.987 0.60 33.03 C +ATOM 1975 CG BTYR A 247 1.762 14.586 19.184 0.40 31.61 C +ATOM 1976 CD1ATYR A 247 0.647 15.974 18.588 0.60 33.28 C +ATOM 1977 CD1BTYR A 247 0.577 15.207 18.807 0.40 32.00 C +ATOM 1978 CD2ATYR A 247 1.293 13.802 19.401 0.60 33.41 C +ATOM 1979 CD2BTYR A 247 1.686 13.330 19.771 0.40 31.71 C +ATOM 1980 CE1ATYR A 247 -0.663 15.630 18.620 0.60 33.43 C +ATOM 1981 CE1BTYR A 247 -0.644 14.591 19.000 0.40 32.21 C +ATOM 1982 CE2ATYR A 247 -0.016 13.469 19.415 0.60 33.75 C +ATOM 1983 CE2BTYR A 247 0.469 12.706 19.969 0.40 31.97 C +ATOM 1984 CZ ATYR A 247 -0.982 14.401 19.012 0.60 33.81 C +ATOM 1985 CZ BTYR A 247 -0.693 13.341 19.582 0.40 32.28 C +ATOM 1986 OH ATYR A 247 -2.294 14.132 19.008 0.60 34.02 O +ATOM 1987 OH BTYR A 247 -1.909 12.726 19.777 0.40 32.46 O +ATOM 1988 N SER A 248 5.155 16.628 16.195 1.00 30.90 N +ATOM 1989 CA SER A 248 6.483 17.164 15.914 1.00 30.44 C +ATOM 1990 C SER A 248 6.357 18.222 14.826 1.00 30.27 C +ATOM 1991 O SER A 248 5.455 18.151 13.989 1.00 30.55 O +ATOM 1992 CB SER A 248 7.420 16.049 15.451 1.00 30.34 C +ATOM 1993 OG SER A 248 8.640 16.574 14.959 1.00 29.99 O +ATOM 1994 N ASN A 249 7.256 19.203 14.842 1.00 29.85 N +ATOM 1995 CA ASN A 249 7.243 20.261 13.827 1.00 29.63 C +ATOM 1996 C ASN A 249 7.714 19.771 12.450 1.00 27.69 C +ATOM 1997 O ASN A 249 7.376 20.375 11.431 1.00 28.21 O +ATOM 1998 CB ASN A 249 8.040 21.496 14.287 1.00 30.65 C +ATOM 1999 CG ASN A 249 9.511 21.204 14.538 1.00 31.72 C +ATOM 2000 OD1 ASN A 249 9.983 20.080 14.359 1.00 32.77 O +ATOM 2001 ND2 ASN A 249 10.246 22.228 14.964 1.00 32.71 N +ATOM 2002 N ASP A 250 8.493 18.686 12.431 1.00 25.24 N +ATOM 2003 CA ASP A 250 8.863 18.005 11.190 1.00 23.16 C +ATOM 2004 C ASP A 250 8.497 16.525 11.304 1.00 20.70 C +ATOM 2005 O ASP A 250 9.228 15.724 11.887 1.00 19.50 O +ATOM 2006 CB ASP A 250 10.355 18.171 10.881 1.00 24.56 C +ATOM 2007 CG ASP A 250 10.730 17.673 9.483 1.00 25.45 C +ATOM 2008 OD1 ASP A 250 9.921 16.968 8.830 1.00 26.05 O +ATOM 2009 OD2 ASP A 250 11.853 17.986 9.035 1.00 27.72 O +ATOM 2010 N ARG A 251 7.354 16.184 10.723 1.00 18.32 N +ATOM 2011 CA ARG A 251 6.786 14.840 10.792 1.00 16.87 C +ATOM 2012 C ARG A 251 7.745 13.726 10.374 1.00 15.53 C +ATOM 2013 O ARG A 251 7.706 12.628 10.934 1.00 14.33 O +ATOM 2014 CB ARG A 251 5.544 14.796 9.907 1.00 16.96 C +ATOM 2015 CG ARG A 251 4.778 13.491 9.928 1.00 17.07 C +ATOM 2016 CD ARG A 251 3.614 13.552 8.956 1.00 16.83 C +ATOM 2017 NE ARG A 251 2.868 12.300 8.952 1.00 16.66 N +ATOM 2018 CZ ARG A 251 2.004 11.926 9.893 1.00 16.76 C +ATOM 2019 NH1 ARG A 251 1.751 12.707 10.945 1.00 17.34 N +ATOM 2020 NH2 ARG A 251 1.393 10.753 9.790 1.00 16.63 N +ATOM 2021 N TYR A 252 8.599 14.004 9.394 1.00 14.66 N +ATOM 2022 CA TYR A 252 9.454 12.980 8.809 1.00 14.48 C +ATOM 2023 C TYR A 252 10.909 13.012 9.289 1.00 14.23 C +ATOM 2024 O TYR A 252 11.758 12.347 8.705 1.00 14.49 O +ATOM 2025 CB TYR A 252 9.397 13.105 7.286 1.00 14.56 C +ATOM 2026 CG TYR A 252 7.994 12.988 6.743 1.00 14.83 C +ATOM 2027 CD1 TYR A 252 7.260 11.822 6.921 1.00 14.80 C +ATOM 2028 CD2 TYR A 252 7.395 14.041 6.060 1.00 15.12 C +ATOM 2029 CE1 TYR A 252 5.973 11.704 6.430 1.00 15.28 C +ATOM 2030 CE2 TYR A 252 6.107 13.931 5.567 1.00 15.45 C +ATOM 2031 CZ TYR A 252 5.403 12.760 5.751 1.00 15.51 C +ATOM 2032 OH TYR A 252 4.125 12.651 5.258 1.00 16.23 O +ATOM 2033 N SER A 253 11.180 13.733 10.377 1.00 14.22 N +ATOM 2034 CA SER A 253 12.553 13.920 10.859 1.00 14.11 C +ATOM 2035 C SER A 253 13.045 12.824 11.810 1.00 13.56 C +ATOM 2036 O SER A 253 14.204 12.851 12.223 1.00 13.92 O +ATOM 2037 CB SER A 253 12.691 15.282 11.551 1.00 14.58 C +ATOM 2038 OG SER A 253 11.900 15.358 12.723 1.00 15.22 O +ATOM 2039 N GLY A 254 12.179 11.866 12.151 1.00 12.35 N +ATOM 2040 CA GLY A 254 12.510 10.829 13.134 1.00 11.56 C +ATOM 2041 C GLY A 254 13.002 9.517 12.549 1.00 10.88 C +ATOM 2042 O GLY A 254 13.351 9.432 11.377 1.00 10.75 O +ATOM 2043 N THR A 255 13.011 8.478 13.378 1.00 10.23 N +ATOM 2044 CA THR A 255 13.571 7.184 12.998 1.00 9.98 C +ATOM 2045 C THR A 255 12.510 6.163 12.581 1.00 9.57 C +ATOM 2046 O THR A 255 12.843 5.011 12.282 1.00 9.35 O +ATOM 2047 CB THR A 255 14.355 6.586 14.167 1.00 10.16 C +ATOM 2048 OG1 THR A 255 13.473 6.411 15.278 1.00 10.56 O +ATOM 2049 CG2 THR A 255 15.500 7.509 14.565 1.00 10.35 C +ATOM 2050 N THR A 256 11.244 6.577 12.591 1.00 9.22 N +ATOM 2051 CA THR A 256 10.143 5.710 12.181 1.00 9.05 C +ATOM 2052 C THR A 256 9.402 6.287 10.986 1.00 8.80 C +ATOM 2053 O THR A 256 9.559 7.458 10.638 1.00 8.90 O +ATOM 2054 CB THR A 256 9.112 5.500 13.310 1.00 9.16 C +ATOM 2055 OG1 THR A 256 8.389 6.716 13.540 1.00 9.10 O +ATOM 2056 CG2 THR A 256 9.788 5.040 14.591 1.00 9.22 C +ATOM 2057 N ASP A 257 8.573 5.444 10.384 1.00 8.50 N +ATOM 2058 CA ASP A 257 7.749 5.810 9.249 1.00 8.44 C +ATOM 2059 C ASP A 257 6.331 6.107 9.757 1.00 8.37 C +ATOM 2060 O ASP A 257 5.584 5.183 10.042 1.00 8.39 O +ATOM 2061 CB ASP A 257 7.749 4.640 8.264 1.00 8.56 C +ATOM 2062 CG ASP A 257 6.576 4.653 7.325 1.00 8.64 C +ATOM 2063 OD1 ASP A 257 6.088 5.746 6.962 1.00 8.64 O +ATOM 2064 OD2 ASP A 257 6.143 3.544 6.948 1.00 8.93 O +ATOM 2065 N PRO A 258 5.962 7.395 9.879 1.00 8.24 N +ATOM 2066 CA PRO A 258 4.661 7.714 10.467 1.00 8.27 C +ATOM 2067 C PRO A 258 3.475 7.536 9.520 1.00 8.29 C +ATOM 2068 O PRO A 258 2.331 7.584 9.969 1.00 8.50 O +ATOM 2069 CB PRO A 258 4.808 9.187 10.862 1.00 8.44 C +ATOM 2070 CG PRO A 258 5.785 9.735 9.898 1.00 8.49 C +ATOM 2071 CD PRO A 258 6.719 8.615 9.526 1.00 8.30 C +ATOM 2072 N ASP A 259 3.731 7.329 8.229 1.00 8.23 N +ATOM 2073 CA ASP A 259 2.647 7.240 7.244 1.00 8.34 C +ATOM 2074 C ASP A 259 2.307 5.808 6.863 1.00 8.05 C +ATOM 2075 O ASP A 259 1.134 5.463 6.729 1.00 8.07 O +ATOM 2076 CB ASP A 259 3.007 8.022 5.985 1.00 8.64 C +ATOM 2077 CG ASP A 259 3.046 9.520 6.220 1.00 9.08 C +ATOM 2078 OD1 ASP A 259 2.873 9.966 7.380 1.00 9.60 O +ATOM 2079 OD2 ASP A 259 3.262 10.254 5.232 1.00 9.79 O +ATOM 2080 N GLY A 260 3.335 4.991 6.660 1.00 7.89 N +ATOM 2081 CA GLY A 260 3.145 3.590 6.315 1.00 7.83 C +ATOM 2082 C GLY A 260 2.867 3.395 4.839 1.00 7.84 C +ATOM 2083 O GLY A 260 2.687 4.358 4.101 1.00 8.43 O +ATOM 2084 N CYS A 261 2.847 2.142 4.404 1.00 7.59 N +ATOM 2085 CA CYS A 261 2.429 1.813 3.053 1.00 7.60 C +ATOM 2086 C CYS A 261 1.004 1.284 3.156 1.00 7.32 C +ATOM 2087 O CYS A 261 0.785 0.122 3.471 1.00 7.32 O +ATOM 2088 CB CYS A 261 3.349 0.773 2.428 1.00 7.76 C +ATOM 2089 SG CYS A 261 2.779 0.334 0.776 1.00 8.07 S +ATOM 2090 N ASP A 262 0.037 2.155 2.911 1.00 7.02 N +ATOM 2091 CA ASP A 262 -1.362 1.842 3.185 1.00 6.86 C +ATOM 2092 C ASP A 262 -2.092 1.304 1.970 1.00 6.68 C +ATOM 2093 O ASP A 262 -1.795 1.684 0.837 1.00 6.64 O +ATOM 2094 CB ASP A 262 -2.099 3.093 3.661 1.00 6.97 C +ATOM 2095 CG ASP A 262 -2.066 4.208 2.636 1.00 7.11 C +ATOM 2096 OD1 ASP A 262 -0.946 4.600 2.239 1.00 7.45 O +ATOM 2097 OD2 ASP A 262 -3.146 4.699 2.234 1.00 7.26 O +ATOM 2098 N PHE A 263 -3.056 0.426 2.227 1.00 6.52 N +ATOM 2099 CA PHE A 263 -4.058 0.045 1.238 1.00 6.52 C +ATOM 2100 C PHE A 263 -5.438 0.277 1.835 1.00 6.52 C +ATOM 2101 O PHE A 263 -5.884 -0.476 2.707 1.00 6.56 O +ATOM 2102 CB PHE A 263 -3.915 -1.417 0.811 1.00 6.49 C +ATOM 2103 CG PHE A 263 -4.586 -1.732 -0.502 1.00 6.52 C +ATOM 2104 CD1 PHE A 263 -5.970 -1.658 -0.636 1.00 6.54 C +ATOM 2105 CD2 PHE A 263 -3.834 -2.079 -1.616 1.00 6.53 C +ATOM 2106 CE1 PHE A 263 -6.579 -1.941 -1.846 1.00 6.55 C +ATOM 2107 CE2 PHE A 263 -4.440 -2.369 -2.824 1.00 6.59 C +ATOM 2108 CZ PHE A 263 -5.813 -2.291 -2.946 1.00 6.56 C +ATOM 2109 N ASN A 264 -6.077 1.348 1.371 1.00 6.50 N +ATOM 2110 CA ASN A 264 -7.485 1.660 1.623 1.00 6.54 C +ATOM 2111 C ASN A 264 -8.164 1.555 0.255 1.00 6.62 C +ATOM 2112 O ASN A 264 -7.848 2.322 -0.652 1.00 6.40 O +ATOM 2113 CB ASN A 264 -7.578 3.078 2.218 1.00 6.60 C +ATOM 2114 CG ASN A 264 -8.991 3.649 2.258 1.00 6.60 C +ATOM 2115 OD1 ASN A 264 -9.904 3.207 1.560 1.00 6.60 O +ATOM 2116 ND2 ASN A 264 -9.155 4.691 3.061 1.00 6.61 N +ATOM 2117 N ASER A 265 -9.083 0.603 0.110 0.50 6.59 N +ATOM 2118 N BSER A 265 -9.084 0.603 0.105 0.50 6.74 N +ATOM 2119 CA ASER A 265 -9.725 0.328 -1.180 0.50 6.67 C +ATOM 2120 CA BSER A 265 -9.721 0.335 -1.189 0.50 6.92 C +ATOM 2121 C ASER A 265 -10.292 1.582 -1.856 0.50 6.82 C +ATOM 2122 C BSER A 265 -10.278 1.594 -1.859 0.50 6.96 C +ATOM 2123 O ASER A 265 -10.177 1.744 -3.077 0.50 6.87 O +ATOM 2124 O BSER A 265 -10.146 1.770 -3.076 0.50 6.99 O +ATOM 2125 CB ASER A 265 -10.841 -0.705 -1.001 0.50 6.62 C +ATOM 2126 CB BSER A 265 -10.850 -0.683 -1.026 0.50 7.02 C +ATOM 2127 OG ASER A 265 -10.306 -1.977 -0.664 0.50 6.50 O +ATOM 2128 OG BSER A 265 -11.815 -0.230 -0.098 0.50 7.27 O +ATOM 2129 N TYR A 266 -10.891 2.460 -1.056 1.00 6.96 N +ATOM 2130 CA TYR A 266 -11.476 3.705 -1.549 1.00 7.11 C +ATOM 2131 C TYR A 266 -10.387 4.661 -2.046 1.00 7.07 C +ATOM 2132 O TYR A 266 -10.505 5.240 -3.124 1.00 6.93 O +ATOM 2133 CB TYR A 266 -12.289 4.352 -0.427 1.00 7.36 C +ATOM 2134 CG TYR A 266 -13.244 5.437 -0.858 1.00 7.66 C +ATOM 2135 CD1 TYR A 266 -12.779 6.696 -1.240 1.00 7.87 C +ATOM 2136 CD2 TYR A 266 -14.614 5.218 -0.841 1.00 7.83 C +ATOM 2137 CE1 TYR A 266 -13.659 7.695 -1.620 1.00 8.18 C +ATOM 2138 CE2 TYR A 266 -15.499 6.210 -1.215 1.00 8.13 C +ATOM 2139 CZ TYR A 266 -15.016 7.441 -1.602 1.00 8.26 C +ATOM 2140 OH TYR A 266 -15.891 8.432 -1.970 1.00 9.17 O +ATOM 2141 N ARG A 267 -9.317 4.794 -1.269 1.00 7.02 N +ATOM 2142 CA ARG A 267 -8.190 5.643 -1.654 1.00 7.12 C +ATOM 2143 C ARG A 267 -7.524 5.106 -2.918 1.00 7.22 C +ATOM 2144 O ARG A 267 -6.991 5.872 -3.734 1.00 7.35 O +ATOM 2145 CB ARG A 267 -7.166 5.741 -0.520 1.00 7.22 C +ATOM 2146 CG ARG A 267 -6.180 6.875 -0.715 1.00 7.31 C +ATOM 2147 CD ARG A 267 -5.145 6.967 0.390 1.00 7.39 C +ATOM 2148 NE ARG A 267 -4.275 8.121 0.157 1.00 7.54 N +ATOM 2149 CZ ARG A 267 -2.975 8.184 0.441 1.00 7.60 C +ATOM 2150 NH1 ARG A 267 -2.341 7.157 0.993 1.00 7.63 N +ATOM 2151 NH2 ARG A 267 -2.297 9.290 0.155 1.00 7.71 N +ATOM 2152 N GLN A 268 -7.568 3.787 -3.082 1.00 7.25 N +ATOM 2153 CA GLN A 268 -7.008 3.135 -4.269 1.00 7.49 C +ATOM 2154 C GLN A 268 -7.985 3.036 -5.443 1.00 7.79 C +ATOM 2155 O GLN A 268 -7.721 2.310 -6.409 1.00 8.00 O +ATOM 2156 CB GLN A 268 -6.448 1.760 -3.905 1.00 7.42 C +ATOM 2157 CG GLN A 268 -5.325 1.819 -2.879 1.00 7.38 C +ATOM 2158 CD GLN A 268 -4.186 2.735 -3.291 1.00 7.36 C +ATOM 2159 OE1 GLN A 268 -3.730 2.728 -4.445 1.00 7.68 O +ATOM 2160 NE2 GLN A 268 -3.722 3.523 -2.358 1.00 7.06 N +ATOM 2161 N GLY A 269 -9.096 3.768 -5.362 1.00 8.15 N +ATOM 2162 CA GLY A 269 -9.943 4.037 -6.519 1.00 8.43 C +ATOM 2163 C GLY A 269 -11.211 3.220 -6.635 1.00 8.66 C +ATOM 2164 O GLY A 269 -12.012 3.458 -7.548 1.00 9.08 O +ATOM 2165 N ASP A 270 -11.414 2.270 -5.725 1.00 8.85 N +ATOM 2166 CA ASP A 270 -12.635 1.469 -5.727 1.00 8.99 C +ATOM 2167 C ASP A 270 -13.568 1.929 -4.606 1.00 8.75 C +ATOM 2168 O ASP A 270 -13.427 1.524 -3.450 1.00 8.90 O +ATOM 2169 CB ASP A 270 -12.313 -0.018 -5.600 1.00 9.34 C +ATOM 2170 CG ASP A 270 -13.516 -0.907 -5.904 1.00 9.59 C +ATOM 2171 OD1 ASP A 270 -14.673 -0.430 -5.803 1.00 9.99 O +ATOM 2172 OD2 ASP A 270 -13.310 -2.098 -6.224 1.00 10.13 O +ATOM 2173 N THR A 271 -14.531 2.770 -4.966 1.00 8.44 N +ATOM 2174 CA THR A 271 -15.462 3.338 -3.999 1.00 8.48 C +ATOM 2175 C THR A 271 -16.671 2.442 -3.745 1.00 8.55 C +ATOM 2176 O THR A 271 -17.482 2.755 -2.882 1.00 8.78 O +ATOM 2177 CB THR A 271 -15.977 4.723 -4.453 1.00 8.38 C +ATOM 2178 OG1 THR A 271 -16.830 4.578 -5.602 1.00 8.47 O +ATOM 2179 CG2 THR A 271 -14.814 5.651 -4.778 1.00 8.35 C +ATOM 2180 N SER A 272 -16.807 1.352 -4.505 1.00 8.59 N +ATOM 2181 CA SER A 272 -17.953 0.442 -4.362 1.00 8.81 C +ATOM 2182 C SER A 272 -17.675 -0.791 -3.501 1.00 8.48 C +ATOM 2183 O SER A 272 -18.563 -1.623 -3.309 1.00 8.55 O +ATOM 2184 CB SER A 272 -18.408 -0.031 -5.746 1.00 9.25 C +ATOM 2185 OG SER A 272 -17.463 -0.916 -6.326 1.00 10.41 O +ATOM 2186 N PHE A 273 -16.448 -0.915 -2.996 1.00 8.10 N +ATOM 2187 CA PHE A 273 -15.986 -2.164 -2.396 1.00 7.87 C +ATOM 2188 C PHE A 273 -16.326 -2.306 -0.916 1.00 7.60 C +ATOM 2189 O PHE A 273 -16.884 -3.317 -0.512 1.00 7.65 O +ATOM 2190 CB PHE A 273 -14.483 -2.330 -2.590 1.00 8.03 C +ATOM 2191 CG PHE A 273 -13.943 -3.622 -2.041 1.00 8.04 C +ATOM 2192 CD1 PHE A 273 -14.287 -4.838 -2.621 1.00 8.09 C +ATOM 2193 CD2 PHE A 273 -13.089 -3.628 -0.940 1.00 8.09 C +ATOM 2194 CE1 PHE A 273 -13.799 -6.029 -2.113 1.00 8.10 C +ATOM 2195 CE2 PHE A 273 -12.594 -4.821 -0.436 1.00 8.04 C +ATOM 2196 CZ PHE A 273 -12.949 -6.021 -1.022 1.00 8.12 C +ATOM 2197 N TYR A 274 -15.966 -1.302 -0.118 1.00 7.28 N +ATOM 2198 CA TYR A 274 -16.085 -1.394 1.343 1.00 7.10 C +ATOM 2199 C TYR A 274 -16.946 -0.259 1.876 1.00 7.23 C +ATOM 2200 O TYR A 274 -16.665 0.903 1.612 1.00 7.08 O +ATOM 2201 CB TYR A 274 -14.693 -1.359 1.994 1.00 6.90 C +ATOM 2202 CG TYR A 274 -14.732 -1.391 3.510 1.00 6.66 C +ATOM 2203 CD1 TYR A 274 -14.869 -0.222 4.246 1.00 6.55 C +ATOM 2204 CD2 TYR A 274 -14.658 -2.596 4.205 1.00 6.59 C +ATOM 2205 CE1 TYR A 274 -14.932 -0.244 5.625 1.00 6.45 C +ATOM 2206 CE2 TYR A 274 -14.714 -2.629 5.592 1.00 6.52 C +ATOM 2207 CZ TYR A 274 -14.850 -1.448 6.291 1.00 6.41 C +ATOM 2208 OH TYR A 274 -14.910 -1.459 7.662 1.00 6.37 O +ATOM 2209 N GLY A 275 -17.992 -0.596 2.629 1.00 7.52 N +ATOM 2210 CA GLY A 275 -18.857 0.416 3.222 1.00 7.92 C +ATOM 2211 C GLY A 275 -20.282 -0.060 3.363 1.00 8.25 C +ATOM 2212 O GLY A 275 -20.572 -1.234 3.117 1.00 8.30 O +ATOM 2213 N PRO A 276 -21.187 0.847 3.755 1.00 8.62 N +ATOM 2214 CA PRO A 276 -22.574 0.461 3.995 1.00 8.86 C +ATOM 2215 C PRO A 276 -23.271 0.048 2.699 1.00 9.11 C +ATOM 2216 O PRO A 276 -23.316 0.823 1.741 1.00 9.25 O +ATOM 2217 CB PRO A 276 -23.195 1.731 4.600 1.00 8.92 C +ATOM 2218 CG PRO A 276 -22.035 2.575 5.024 1.00 8.87 C +ATOM 2219 CD PRO A 276 -20.981 2.280 4.006 1.00 8.70 C +ATOM 2220 N GLY A 277 -23.765 -1.187 2.663 1.00 9.28 N +ATOM 2221 CA GLY A 277 -24.410 -1.728 1.466 1.00 9.52 C +ATOM 2222 C GLY A 277 -23.470 -2.109 0.336 1.00 9.71 C +ATOM 2223 O GLY A 277 -23.917 -2.431 -0.771 1.00 10.25 O +ATOM 2224 N LYS A 278 -22.166 -2.103 0.596 1.00 9.75 N +ATOM 2225 CA LYS A 278 -21.186 -2.355 -0.461 1.00 9.86 C +ATOM 2226 C LYS A 278 -20.752 -3.825 -0.456 1.00 10.06 C +ATOM 2227 O LYS A 278 -21.305 -4.633 0.292 1.00 10.35 O +ATOM 2228 CB LYS A 278 -20.014 -1.375 -0.320 1.00 9.82 C +ATOM 2229 CG LYS A 278 -20.449 0.071 -0.535 1.00 9.75 C +ATOM 2230 CD LYS A 278 -19.307 1.069 -0.470 1.00 9.72 C +ATOM 2231 CE LYS A 278 -19.807 2.483 -0.715 1.00 9.70 C +ATOM 2232 NZ LYS A 278 -18.722 3.486 -0.546 1.00 9.85 N +ATOM 2233 N THR A 279 -19.785 -4.178 -1.301 1.00 10.12 N +ATOM 2234 CA THR A 279 -19.387 -5.572 -1.481 1.00 10.24 C +ATOM 2235 C THR A 279 -19.014 -6.231 -0.159 1.00 10.05 C +ATOM 2236 O THR A 279 -19.460 -7.341 0.143 1.00 10.43 O +ATOM 2237 CB THR A 279 -18.213 -5.672 -2.474 1.00 10.49 C +ATOM 2238 OG1 THR A 279 -18.608 -5.090 -3.722 1.00 11.08 O +ATOM 2239 CG2 THR A 279 -17.794 -7.119 -2.684 1.00 10.60 C +ATOM 2240 N VAL A 280 -18.182 -5.544 0.620 1.00 9.63 N +ATOM 2241 CA VAL A 280 -17.986 -5.873 2.023 1.00 9.52 C +ATOM 2242 C VAL A 280 -18.914 -4.902 2.748 1.00 9.63 C +ATOM 2243 O VAL A 280 -18.625 -3.714 2.850 1.00 9.49 O +ATOM 2244 CB VAL A 280 -16.518 -5.688 2.458 1.00 9.39 C +ATOM 2245 CG1 VAL A 280 -16.363 -5.983 3.946 1.00 9.28 C +ATOM 2246 CG2 VAL A 280 -15.603 -6.576 1.623 1.00 9.42 C +ATOM 2247 N ASP A 281 -20.052 -5.420 3.206 1.00 9.65 N +ATOM 2248 CA ASP A 281 -21.153 -4.609 3.707 1.00 9.80 C +ATOM 2249 C ASP A 281 -20.981 -4.359 5.196 1.00 9.50 C +ATOM 2250 O ASP A 281 -21.162 -5.262 6.010 1.00 9.35 O +ATOM 2251 CB ASP A 281 -22.472 -5.342 3.437 1.00 10.33 C +ATOM 2252 CG ASP A 281 -23.697 -4.510 3.770 1.00 10.80 C +ATOM 2253 OD1 ASP A 281 -23.580 -3.461 4.430 1.00 10.94 O +ATOM 2254 OD2 ASP A 281 -24.803 -4.916 3.354 1.00 12.00 O +ATOM 2255 N THR A 282 -20.643 -3.125 5.550 1.00 9.10 N +ATOM 2256 CA THR A 282 -20.334 -2.792 6.935 1.00 8.95 C +ATOM 2257 C THR A 282 -21.565 -2.705 7.833 1.00 9.25 C +ATOM 2258 O THR A 282 -21.429 -2.490 9.031 1.00 8.99 O +ATOM 2259 CB THR A 282 -19.546 -1.479 7.029 1.00 8.76 C +ATOM 2260 OG1 THR A 282 -20.296 -0.423 6.424 1.00 8.55 O +ATOM 2261 CG2 THR A 282 -18.209 -1.610 6.317 1.00 8.58 C +ATOM 2262 N ASN A 283 -22.762 -2.875 7.266 1.00 9.80 N +ATOM 2263 CA ASN A 283 -23.975 -2.993 8.074 1.00 10.42 C +ATOM 2264 C ASN A 283 -24.041 -4.312 8.856 1.00 10.41 C +ATOM 2265 O ASN A 283 -24.818 -4.423 9.802 1.00 10.79 O +ATOM 2266 CB ASN A 283 -25.235 -2.832 7.203 1.00 10.97 C +ATOM 2267 CG ASN A 283 -25.345 -1.448 6.564 1.00 11.38 C +ATOM 2268 OD1 ASN A 283 -25.707 -1.308 5.400 1.00 12.43 O +ATOM 2269 ND2 ASN A 283 -25.029 -0.422 7.324 1.00 11.85 N +ATOM 2270 N SER A 284 -23.213 -5.288 8.481 1.00 10.23 N +ATOM 2271 CA SER A 284 -23.175 -6.588 9.145 1.00 10.29 C +ATOM 2272 C SER A 284 -21.749 -7.032 9.437 1.00 9.96 C +ATOM 2273 O SER A 284 -20.794 -6.539 8.835 1.00 9.45 O +ATOM 2274 CB SER A 284 -23.840 -7.644 8.267 1.00 10.66 C +ATOM 2275 OG SER A 284 -25.195 -7.331 8.039 1.00 11.38 O +ATOM 2276 N LYS A 285 -21.633 -7.999 10.341 1.00 9.79 N +ATOM 2277 CA LYS A 285 -20.350 -8.599 10.694 1.00 9.92 C +ATOM 2278 C LYS A 285 -19.677 -9.208 9.464 1.00 9.03 C +ATOM 2279 O LYS A 285 -20.340 -9.678 8.541 1.00 8.85 O +ATOM 2280 CB LYS A 285 -20.559 -9.685 11.764 1.00 10.91 C +ATOM 2281 CG LYS A 285 -19.282 -10.226 12.384 1.00 11.91 C +ATOM 2282 CD LYS A 285 -19.560 -11.121 13.590 1.00 12.81 C +ATOM 2283 CE LYS A 285 -20.240 -12.421 13.191 1.00 13.54 C +ATOM 2284 NZ LYS A 285 -20.354 -13.388 14.322 1.00 14.24 N +ATOM 2285 N PHE A 286 -18.353 -9.185 9.451 1.00 8.32 N +ATOM 2286 CA PHE A 286 -17.592 -9.881 8.426 1.00 7.68 C +ATOM 2287 C PHE A 286 -16.260 -10.330 8.994 1.00 7.54 C +ATOM 2288 O PHE A 286 -15.831 -9.869 10.059 1.00 7.31 O +ATOM 2289 CB PHE A 286 -17.381 -9.005 7.176 1.00 7.44 C +ATOM 2290 CG PHE A 286 -16.815 -7.637 7.479 1.00 7.22 C +ATOM 2291 CD1 PHE A 286 -15.449 -7.436 7.560 1.00 7.16 C +ATOM 2292 CD2 PHE A 286 -17.657 -6.557 7.692 1.00 7.18 C +ATOM 2293 CE1 PHE A 286 -14.932 -6.178 7.853 1.00 7.03 C +ATOM 2294 CE2 PHE A 286 -17.151 -5.301 7.991 1.00 7.13 C +ATOM 2295 CZ PHE A 286 -15.781 -5.113 8.066 1.00 7.10 C +ATOM 2296 N THR A 287 -15.626 -11.243 8.267 1.00 7.29 N +ATOM 2297 CA THR A 287 -14.317 -11.771 8.609 1.00 7.34 C +ATOM 2298 C THR A 287 -13.236 -11.058 7.797 1.00 7.00 C +ATOM 2299 O THR A 287 -13.407 -10.829 6.598 1.00 7.02 O +ATOM 2300 CB THR A 287 -14.256 -13.277 8.316 1.00 7.52 C +ATOM 2301 OG1 THR A 287 -15.338 -13.939 8.986 1.00 7.99 O +ATOM 2302 CG2 THR A 287 -12.932 -13.865 8.767 1.00 7.70 C +ATOM 2303 N VAL A 288 -12.133 -10.717 8.468 1.00 6.73 N +ATOM 2304 CA VAL A 288 -10.978 -10.048 7.867 1.00 6.61 C +ATOM 2305 C VAL A 288 -9.769 -10.972 7.960 1.00 6.50 C +ATOM 2306 O VAL A 288 -9.331 -11.317 9.059 1.00 6.24 O +ATOM 2307 CB VAL A 288 -10.652 -8.733 8.609 1.00 6.54 C +ATOM 2308 CG1 VAL A 288 -9.459 -8.029 7.967 1.00 6.55 C +ATOM 2309 CG2 VAL A 288 -11.870 -7.817 8.647 1.00 6.59 C +ATOM 2310 N VAL A 289 -9.239 -11.366 6.805 1.00 6.51 N +ATOM 2311 CA VAL A 289 -8.080 -12.256 6.720 1.00 6.55 C +ATOM 2312 C VAL A 289 -6.894 -11.452 6.214 1.00 6.51 C +ATOM 2313 O VAL A 289 -7.009 -10.763 5.211 1.00 6.52 O +ATOM 2314 CB VAL A 289 -8.324 -13.416 5.728 1.00 6.62 C +ATOM 2315 CG1 VAL A 289 -7.090 -14.307 5.610 1.00 6.70 C +ATOM 2316 CG2 VAL A 289 -9.550 -14.227 6.134 1.00 6.66 C +ATOM 2317 N THR A 290 -5.759 -11.545 6.899 1.00 6.53 N +ATOM 2318 CA THR A 290 -4.546 -10.861 6.478 1.00 6.65 C +ATOM 2319 C THR A 290 -3.397 -11.865 6.450 1.00 6.87 C +ATOM 2320 O THR A 290 -3.086 -12.469 7.471 1.00 6.81 O +ATOM 2321 CB THR A 290 -4.241 -9.684 7.415 1.00 6.60 C +ATOM 2322 OG1 THR A 290 -5.435 -8.916 7.588 1.00 6.45 O +ATOM 2323 CG2 THR A 290 -3.162 -8.786 6.849 1.00 6.70 C +ATOM 2324 N GLN A 291 -2.792 -12.036 5.275 1.00 7.17 N +ATOM 2325 CA GLN A 291 -1.758 -13.046 5.042 1.00 7.64 C +ATOM 2326 C GLN A 291 -0.400 -12.395 4.840 1.00 7.87 C +ATOM 2327 O GLN A 291 -0.285 -11.406 4.118 1.00 7.98 O +ATOM 2328 CB GLN A 291 -2.096 -13.848 3.793 1.00 7.71 C +ATOM 2329 CG GLN A 291 -3.469 -14.488 3.818 1.00 7.90 C +ATOM 2330 CD GLN A 291 -3.760 -15.268 2.555 1.00 8.15 C +ATOM 2331 OE1 GLN A 291 -3.277 -14.924 1.475 1.00 8.50 O +ATOM 2332 NE2 GLN A 291 -4.558 -16.316 2.681 1.00 8.30 N +ATOM 2333 N PHE A 292 0.629 -12.973 5.453 1.00 8.24 N +ATOM 2334 CA PHE A 292 1.975 -12.408 5.427 1.00 8.69 C +ATOM 2335 C PHE A 292 2.899 -13.358 4.677 1.00 9.16 C +ATOM 2336 O PHE A 292 3.475 -14.283 5.259 1.00 9.23 O +ATOM 2337 CB PHE A 292 2.418 -12.136 6.857 1.00 8.71 C +ATOM 2338 CG PHE A 292 1.477 -11.233 7.590 1.00 8.84 C +ATOM 2339 CD1 PHE A 292 1.584 -9.858 7.460 1.00 8.93 C +ATOM 2340 CD2 PHE A 292 0.441 -11.753 8.357 1.00 9.13 C +ATOM 2341 CE1 PHE A 292 0.703 -9.013 8.113 1.00 9.00 C +ATOM 2342 CE2 PHE A 292 -0.446 -10.911 9.011 1.00 9.23 C +ATOM 2343 CZ PHE A 292 -0.314 -9.541 8.888 1.00 9.18 C +ATOM 2344 N ALEU A 293 3.009 -13.128 3.369 0.50 9.45 N +ATOM 2345 N BLEU A 293 3.032 -13.120 3.376 0.50 9.44 N +ATOM 2346 CA ALEU A 293 3.769 -13.992 2.469 0.50 9.73 C +ATOM 2347 CA BLEU A 293 3.781 -14.006 2.499 0.50 9.71 C +ATOM 2348 C ALEU A 293 5.225 -13.560 2.422 0.50 10.11 C +ATOM 2349 C BLEU A 293 5.225 -13.558 2.406 0.50 10.10 C +ATOM 2350 O ALEU A 293 5.534 -12.377 2.585 0.50 9.91 O +ATOM 2351 O BLEU A 293 5.527 -12.368 2.526 0.50 9.89 O +ATOM 2352 CB ALEU A 293 3.188 -13.942 1.053 0.50 9.86 C +ATOM 2353 CB BLEU A 293 3.155 -14.031 1.109 0.50 9.82 C +ATOM 2354 CG ALEU A 293 1.863 -14.653 0.758 0.50 9.89 C +ATOM 2355 CG BLEU A 293 1.644 -14.252 1.096 0.50 9.84 C +ATOM 2356 CD1ALEU A 293 0.698 -13.977 1.463 0.50 9.90 C +ATOM 2357 CD1BLEU A 293 1.118 -14.216 -0.329 0.50 9.87 C +ATOM 2358 CD2ALEU A 293 1.623 -14.691 -0.744 0.50 9.93 C +ATOM 2359 CD2BLEU A 293 1.290 -15.565 1.777 0.50 9.84 C +ATOM 2360 N THR A 294 6.109 -14.525 2.180 1.00 10.58 N +ATOM 2361 CA THR A 294 7.551 -14.276 2.139 1.00 11.42 C +ATOM 2362 C THR A 294 8.130 -14.630 0.785 1.00 12.36 C +ATOM 2363 O THR A 294 7.471 -15.275 -0.034 1.00 12.27 O +ATOM 2364 CB THR A 294 8.291 -15.115 3.196 1.00 11.73 C +ATOM 2365 OG1 THR A 294 8.142 -16.508 2.897 1.00 12.25 O +ATOM 2366 CG2 THR A 294 7.744 -14.832 4.590 1.00 11.71 C +ATOM 2367 N ASP A 295 9.358 -14.174 0.555 1.00 13.53 N +ATOM 2368 CA ASP A 295 10.165 -14.654 -0.566 1.00 14.56 C +ATOM 2369 C ASP A 295 10.758 -16.007 -0.172 1.00 15.52 C +ATOM 2370 O ASP A 295 10.452 -16.530 0.901 1.00 15.65 O +ATOM 2371 CB ASP A 295 11.245 -13.631 -0.965 1.00 14.99 C +ATOM 2372 CG ASP A 295 12.211 -13.298 0.159 1.00 15.12 C +ATOM 2373 OD1 ASP A 295 12.342 -14.075 1.127 1.00 15.56 O +ATOM 2374 OD2 ASP A 295 12.860 -12.235 0.068 1.00 16.37 O +ATOM 2375 N SER A 296 11.608 -16.577 -1.021 1.00 16.73 N +ATOM 2376 CA SER A 296 12.193 -17.889 -0.727 1.00 17.59 C +ATOM 2377 C SER A 296 13.237 -17.861 0.398 1.00 18.23 C +ATOM 2378 O SER A 296 13.709 -18.920 0.824 1.00 19.31 O +ATOM 2379 CB SER A 296 12.811 -18.490 -1.990 1.00 17.95 C +ATOM 2380 OG SER A 296 13.899 -17.708 -2.438 1.00 18.04 O +ATOM 2381 N SER A 297 13.604 -16.665 0.861 1.00 18.64 N +ATOM 2382 CA SER A 297 14.557 -16.482 1.965 1.00 18.66 C +ATOM 2383 C SER A 297 13.880 -16.202 3.314 1.00 17.65 C +ATOM 2384 O SER A 297 14.554 -15.922 4.310 1.00 17.81 O +ATOM 2385 CB SER A 297 15.507 -15.330 1.637 1.00 19.49 C +ATOM 2386 OG SER A 297 16.175 -15.557 0.409 1.00 20.76 O +ATOM 2387 N GLY A 298 12.552 -16.255 3.345 1.00 16.23 N +ATOM 2388 CA GLY A 298 11.807 -16.067 4.583 1.00 15.48 C +ATOM 2389 C GLY A 298 11.578 -14.619 4.984 1.00 14.40 C +ATOM 2390 O GLY A 298 11.123 -14.357 6.100 1.00 14.36 O +ATOM 2391 N ASN A 299 11.881 -13.676 4.092 1.00 13.63 N +ATOM 2392 CA ASN A 299 11.604 -12.268 4.354 1.00 13.10 C +ATOM 2393 C ASN A 299 10.242 -11.890 3.790 1.00 11.71 C +ATOM 2394 O ASN A 299 9.871 -12.313 2.697 1.00 11.23 O +ATOM 2395 CB ASN A 299 12.693 -11.368 3.758 1.00 14.04 C +ATOM 2396 CG ASN A 299 14.065 -11.613 4.371 1.00 14.77 C +ATOM 2397 OD1 ASN A 299 15.058 -11.701 3.658 1.00 16.89 O +ATOM 2398 ND2 ASN A 299 14.124 -11.724 5.690 1.00 15.16 N +ATOM 2399 N LEU A 300 9.495 -11.099 4.549 1.00 10.81 N +ATOM 2400 CA LEU A 300 8.186 -10.636 4.106 1.00 10.22 C +ATOM 2401 C LEU A 300 8.298 -9.940 2.753 1.00 10.15 C +ATOM 2402 O LEU A 300 9.159 -9.079 2.566 1.00 10.13 O +ATOM 2403 CB LEU A 300 7.595 -9.663 5.131 1.00 9.94 C +ATOM 2404 CG LEU A 300 6.159 -9.188 4.883 1.00 9.78 C +ATOM 2405 CD1 LEU A 300 5.167 -10.296 5.202 1.00 9.71 C +ATOM 2406 CD2 LEU A 300 5.860 -7.948 5.712 1.00 9.83 C +ATOM 2407 N ASN A 301 7.442 -10.318 1.807 1.00 10.17 N +ATOM 2408 CA ASN A 301 7.391 -9.609 0.526 1.00 10.15 C +ATOM 2409 C ASN A 301 5.988 -9.259 0.034 1.00 9.87 C +ATOM 2410 O ASN A 301 5.840 -8.605 -0.995 1.00 9.70 O +ATOM 2411 CB ASN A 301 8.173 -10.368 -0.558 1.00 10.71 C +ATOM 2412 CG ASN A 301 7.461 -11.611 -1.051 1.00 10.92 C +ATOM 2413 OD1 ASN A 301 6.486 -12.075 -0.455 1.00 11.33 O +ATOM 2414 ND2 ASN A 301 7.960 -12.175 -2.155 1.00 11.34 N +ATOM 2415 N GLU A 302 4.959 -9.679 0.763 1.00 9.62 N +ATOM 2416 CA GLU A 302 3.598 -9.407 0.340 1.00 9.45 C +ATOM 2417 C GLU A 302 2.631 -9.576 1.492 1.00 8.91 C +ATOM 2418 O GLU A 302 2.721 -10.539 2.255 1.00 8.96 O +ATOM 2419 CB GLU A 302 3.180 -10.313 -0.825 1.00 10.00 C +ATOM 2420 CG GLU A 302 1.776 -10.022 -1.344 1.00 10.57 C +ATOM 2421 CD GLU A 302 1.438 -10.791 -2.605 1.00 11.11 C +ATOM 2422 OE1 GLU A 302 2.049 -11.853 -2.846 1.00 12.16 O +ATOM 2423 OE2 GLU A 302 0.559 -10.340 -3.360 1.00 11.97 O +ATOM 2424 N ILE A 303 1.707 -8.627 1.608 1.00 8.18 N +ATOM 2425 CA ILE A 303 0.581 -8.750 2.530 1.00 7.79 C +ATOM 2426 C ILE A 303 -0.693 -8.819 1.694 1.00 7.60 C +ATOM 2427 O ILE A 303 -0.987 -7.887 0.941 1.00 7.41 O +ATOM 2428 CB ILE A 303 0.507 -7.568 3.521 1.00 7.81 C +ATOM 2429 CG1 ILE A 303 1.850 -7.381 4.237 1.00 7.84 C +ATOM 2430 CG2 ILE A 303 -0.613 -7.802 4.533 1.00 7.76 C +ATOM 2431 CD1 ILE A 303 1.884 -6.192 5.176 1.00 7.90 C +ATOM 2432 N ALYS A 304 -1.425 -9.930 1.811 0.50 7.48 N +ATOM 2433 N BLYS A 304 -1.435 -9.920 1.812 0.50 7.46 N +ATOM 2434 CA ALYS A 304 -2.703 -10.103 1.120 0.50 7.47 C +ATOM 2435 CA BLYS A 304 -2.706 -10.064 1.105 0.50 7.45 C +ATOM 2436 C ALYS A 304 -3.856 -9.927 2.099 0.50 7.26 C +ATOM 2437 C BLYS A 304 -3.874 -10.005 2.079 0.50 7.24 C +ATOM 2438 O ALYS A 304 -3.685 -10.104 3.308 0.50 7.25 O +ATOM 2439 O BLYS A 304 -3.736 -10.347 3.256 0.50 7.23 O +ATOM 2440 CB ALYS A 304 -2.806 -11.491 0.485 0.50 7.66 C +ATOM 2441 CB BLYS A 304 -2.749 -11.370 0.308 0.50 7.63 C +ATOM 2442 CG ALYS A 304 -1.783 -11.782 -0.602 0.50 7.88 C +ATOM 2443 CG BLYS A 304 -1.879 -11.345 -0.940 0.50 7.82 C +ATOM 2444 CD ALYS A 304 -2.112 -13.084 -1.316 0.50 8.10 C +ATOM 2445 CD BLYS A 304 -2.055 -12.590 -1.797 0.50 7.98 C +ATOM 2446 CE ALYS A 304 -1.180 -13.352 -2.487 0.50 8.28 C +ATOM 2447 CE BLYS A 304 -3.468 -12.703 -2.348 0.50 8.12 C +ATOM 2448 NZ ALYS A 304 -1.314 -12.337 -3.567 0.50 8.46 N +ATOM 2449 NZ BLYS A 304 -3.720 -14.007 -3.022 0.50 8.28 N +ATOM 2450 N ARG A 305 -5.026 -9.587 1.562 1.00 7.07 N +ATOM 2451 CA ARG A 305 -6.236 -9.401 2.351 1.00 6.81 C +ATOM 2452 C ARG A 305 -7.393 -10.124 1.668 1.00 6.74 C +ATOM 2453 O ARG A 305 -7.586 -9.977 0.466 1.00 6.71 O +ATOM 2454 CB ARG A 305 -6.535 -7.901 2.457 1.00 6.65 C +ATOM 2455 CG ARG A 305 -7.942 -7.508 2.905 1.00 6.53 C +ATOM 2456 CD ARG A 305 -8.321 -8.009 4.289 1.00 6.47 C +ATOM 2457 NE ARG A 305 -7.348 -7.682 5.334 1.00 6.41 N +ATOM 2458 CZ ARG A 305 -7.206 -6.487 5.904 1.00 6.48 C +ATOM 2459 NH1 ARG A 305 -7.980 -5.468 5.549 1.00 6.53 N +ATOM 2460 NH2 ARG A 305 -6.288 -6.314 6.843 1.00 6.48 N +ATOM 2461 N PHE A 306 -8.141 -10.911 2.436 1.00 6.79 N +ATOM 2462 CA PHE A 306 -9.427 -11.448 1.993 1.00 6.93 C +ATOM 2463 C PHE A 306 -10.483 -11.088 3.016 1.00 7.00 C +ATOM 2464 O PHE A 306 -10.176 -10.889 4.189 1.00 7.01 O +ATOM 2465 CB PHE A 306 -9.374 -12.968 1.850 1.00 7.05 C +ATOM 2466 CG PHE A 306 -8.497 -13.435 0.739 1.00 7.17 C +ATOM 2467 CD1 PHE A 306 -7.140 -13.634 0.944 1.00 7.27 C +ATOM 2468 CD2 PHE A 306 -9.023 -13.672 -0.516 1.00 7.24 C +ATOM 2469 CE1 PHE A 306 -6.320 -14.058 -0.087 1.00 7.41 C +ATOM 2470 CE2 PHE A 306 -8.216 -14.110 -1.552 1.00 7.36 C +ATOM 2471 CZ PHE A 306 -6.857 -14.300 -1.337 1.00 7.36 C +ATOM 2472 N TYR A 307 -11.729 -11.010 2.568 1.00 7.12 N +ATOM 2473 CA TYR A 307 -12.857 -10.886 3.475 1.00 7.33 C +ATOM 2474 C TYR A 307 -13.733 -12.110 3.310 1.00 7.79 C +ATOM 2475 O TYR A 307 -13.703 -12.756 2.262 1.00 7.73 O +ATOM 2476 CB TYR A 307 -13.647 -9.612 3.176 1.00 7.20 C +ATOM 2477 CG TYR A 307 -12.808 -8.376 3.346 1.00 7.09 C +ATOM 2478 CD1 TYR A 307 -12.726 -7.742 4.576 1.00 7.07 C +ATOM 2479 CD2 TYR A 307 -12.066 -7.864 2.292 1.00 7.01 C +ATOM 2480 CE1 TYR A 307 -11.942 -6.620 4.750 1.00 7.11 C +ATOM 2481 CE2 TYR A 307 -11.268 -6.747 2.458 1.00 7.05 C +ATOM 2482 CZ TYR A 307 -11.213 -6.125 3.689 1.00 7.07 C +ATOM 2483 OH TYR A 307 -10.415 -5.009 3.867 1.00 7.13 O +ATOM 2484 N VAL A 308 -14.489 -12.440 4.351 1.00 8.31 N +ATOM 2485 CA VAL A 308 -15.545 -13.442 4.234 1.00 8.84 C +ATOM 2486 C VAL A 308 -16.811 -12.830 4.809 1.00 9.21 C +ATOM 2487 O VAL A 308 -16.812 -12.341 5.940 1.00 9.23 O +ATOM 2488 CB VAL A 308 -15.218 -14.767 4.968 1.00 8.94 C +ATOM 2489 CG1 VAL A 308 -16.179 -15.862 4.517 1.00 9.11 C +ATOM 2490 CG2 VAL A 308 -13.776 -15.194 4.731 1.00 9.01 C +ATOM 2491 N GLN A 309 -17.883 -12.832 4.019 1.00 9.84 N +ATOM 2492 CA GLN A 309 -19.185 -12.379 4.500 1.00 10.59 C +ATOM 2493 C GLN A 309 -20.277 -13.198 3.824 1.00 11.84 C +ATOM 2494 O GLN A 309 -20.204 -13.454 2.629 1.00 12.15 O +ATOM 2495 CB GLN A 309 -19.385 -10.883 4.231 1.00 10.27 C +ATOM 2496 CG GLN A 309 -20.533 -10.285 5.032 1.00 10.03 C +ATOM 2497 CD GLN A 309 -20.655 -8.782 4.867 1.00 9.78 C +ATOM 2498 OE1 GLN A 309 -20.606 -8.266 3.754 1.00 9.52 O +ATOM 2499 NE2 GLN A 309 -20.811 -8.074 5.979 1.00 9.62 N +ATOM 2500 N ASN A 310 -21.277 -13.612 4.600 1.00 13.70 N +ATOM 2501 CA ASN A 310 -22.336 -14.507 4.098 1.00 15.18 C +ATOM 2502 C ASN A 310 -21.765 -15.807 3.509 1.00 15.28 C +ATOM 2503 O ASN A 310 -22.330 -16.374 2.569 1.00 16.46 O +ATOM 2504 CB ASN A 310 -23.224 -13.795 3.054 1.00 16.05 C +ATOM 2505 CG ASN A 310 -23.994 -12.618 3.627 1.00 17.15 C +ATOM 2506 OD1 ASN A 310 -23.967 -11.508 3.078 1.00 18.66 O +ATOM 2507 ND2 ASN A 310 -24.693 -12.851 4.728 1.00 17.78 N +ATOM 2508 N GLY A 311 -20.644 -16.274 4.060 1.00 15.06 N +ATOM 2509 CA GLY A 311 -19.984 -17.493 3.583 1.00 14.59 C +ATOM 2510 C GLY A 311 -19.231 -17.364 2.266 1.00 14.17 C +ATOM 2511 O GLY A 311 -18.746 -18.365 1.734 1.00 14.93 O +ATOM 2512 N VAL A 312 -19.117 -16.141 1.748 1.00 13.03 N +ATOM 2513 CA VAL A 312 -18.464 -15.886 0.467 1.00 12.61 C +ATOM 2514 C VAL A 312 -17.088 -15.279 0.697 1.00 11.90 C +ATOM 2515 O VAL A 312 -16.960 -14.292 1.421 1.00 11.60 O +ATOM 2516 CB VAL A 312 -19.297 -14.919 -0.394 1.00 12.72 C +ATOM 2517 CG1 VAL A 312 -18.596 -14.620 -1.716 1.00 12.78 C +ATOM 2518 CG2 VAL A 312 -20.685 -15.495 -0.635 1.00 12.89 C +ATOM 2519 N VAL A 313 -16.074 -15.879 0.082 1.00 11.18 N +ATOM 2520 CA VAL A 313 -14.708 -15.365 0.144 1.00 10.85 C +ATOM 2521 C VAL A 313 -14.567 -14.252 -0.886 1.00 10.52 C +ATOM 2522 O VAL A 313 -14.836 -14.445 -2.080 1.00 10.45 O +ATOM 2523 CB VAL A 313 -13.662 -16.470 -0.112 1.00 10.93 C +ATOM 2524 CG1 VAL A 313 -12.260 -15.881 -0.178 1.00 11.03 C +ATOM 2525 CG2 VAL A 313 -13.739 -17.536 0.975 1.00 10.98 C +ATOM 2526 N ILE A 314 -14.149 -13.087 -0.406 1.00 9.94 N +ATOM 2527 CA ILE A 314 -14.063 -11.877 -1.205 1.00 9.93 C +ATOM 2528 C ILE A 314 -12.602 -11.431 -1.258 1.00 9.70 C +ATOM 2529 O ILE A 314 -12.059 -11.001 -0.244 1.00 9.82 O +ATOM 2530 CB ILE A 314 -14.905 -10.764 -0.555 1.00 10.04 C +ATOM 2531 CG1 ILE A 314 -16.365 -11.216 -0.430 1.00 10.25 C +ATOM 2532 CG2 ILE A 314 -14.787 -9.464 -1.337 1.00 10.03 C +ATOM 2533 CD1 ILE A 314 -17.181 -10.389 0.539 1.00 10.37 C +ATOM 2534 N PRO A 315 -11.954 -11.552 -2.429 1.00 9.48 N +ATOM 2535 CA PRO A 315 -10.605 -11.010 -2.556 1.00 9.23 C +ATOM 2536 C PRO A 315 -10.578 -9.503 -2.375 1.00 8.83 C +ATOM 2537 O PRO A 315 -11.572 -8.825 -2.630 1.00 8.62 O +ATOM 2538 CB PRO A 315 -10.212 -11.370 -3.990 1.00 9.36 C +ATOM 2539 CG PRO A 315 -11.045 -12.551 -4.323 1.00 9.52 C +ATOM 2540 CD PRO A 315 -12.350 -12.309 -3.629 1.00 9.47 C +ATOM 2541 N ASN A 316 -9.438 -8.978 -1.945 1.00 8.73 N +ATOM 2542 CA ASN A 316 -9.298 -7.538 -1.839 1.00 8.57 C +ATOM 2543 C ASN A 316 -9.487 -6.897 -3.211 1.00 8.64 C +ATOM 2544 O ASN A 316 -9.157 -7.496 -4.234 1.00 8.57 O +ATOM 2545 CB ASN A 316 -7.933 -7.167 -1.257 1.00 8.52 C +ATOM 2546 CG ASN A 316 -7.884 -5.741 -0.768 1.00 8.61 C +ATOM 2547 OD1 ASN A 316 -8.888 -5.193 -0.321 1.00 8.50 O +ATOM 2548 ND2 ASN A 316 -6.713 -5.127 -0.853 1.00 8.60 N +ATOM 2549 N SER A 317 -10.042 -5.690 -3.227 1.00 8.58 N +ATOM 2550 CA SER A 317 -10.267 -4.969 -4.475 1.00 8.74 C +ATOM 2551 C SER A 317 -8.948 -4.573 -5.113 1.00 8.92 C +ATOM 2552 O SER A 317 -7.966 -4.286 -4.422 1.00 8.69 O +ATOM 2553 CB SER A 317 -11.111 -3.720 -4.233 1.00 8.80 C +ATOM 2554 OG SER A 317 -10.501 -2.878 -3.271 1.00 8.74 O +ATOM 2555 N GLN A 318 -8.944 -4.550 -6.440 1.00 9.30 N +ATOM 2556 CA GLN A 318 -7.812 -4.058 -7.202 1.00 9.76 C +ATOM 2557 C GLN A 318 -7.690 -2.557 -7.023 1.00 9.47 C +ATOM 2558 O GLN A 318 -8.691 -1.845 -6.994 1.00 9.07 O +ATOM 2559 CB GLN A 318 -7.995 -4.351 -8.694 1.00 10.40 C +ATOM 2560 CG GLN A 318 -8.045 -5.823 -9.061 1.00 11.22 C +ATOM 2561 CD GLN A 318 -6.751 -6.547 -8.767 1.00 12.01 C +ATOM 2562 OE1 GLN A 318 -5.662 -6.029 -9.022 1.00 13.22 O +ATOM 2563 NE2 GLN A 318 -6.862 -7.762 -8.233 1.00 12.76 N +ATOM 2564 N SER A 319 -6.456 -2.081 -6.907 1.00 9.27 N +ATOM 2565 CA SER A 319 -6.176 -0.664 -7.039 1.00 9.29 C +ATOM 2566 C SER A 319 -6.417 -0.280 -8.498 1.00 9.41 C +ATOM 2567 O SER A 319 -5.956 -0.971 -9.411 1.00 9.58 O +ATOM 2568 CB SER A 319 -4.728 -0.377 -6.643 1.00 9.13 C +ATOM 2569 OG SER A 319 -4.423 0.993 -6.812 1.00 9.02 O +ATOM 2570 N THR A 320 -7.174 0.792 -8.721 1.00 9.54 N +ATOM 2571 CA THR A 320 -7.533 1.216 -10.077 1.00 9.82 C +ATOM 2572 C THR A 320 -6.827 2.506 -10.477 1.00 10.06 C +ATOM 2573 O THR A 320 -7.022 3.006 -11.588 1.00 10.39 O +ATOM 2574 CB THR A 320 -9.052 1.444 -10.215 1.00 9.90 C +ATOM 2575 OG1 THR A 320 -9.428 2.612 -9.476 1.00 10.00 O +ATOM 2576 CG2 THR A 320 -9.839 0.251 -9.714 1.00 10.03 C +ATOM 2577 N ILE A 321 -6.007 3.043 -9.576 1.00 10.25 N +ATOM 2578 CA ILE A 321 -5.295 4.284 -9.844 1.00 10.37 C +ATOM 2579 C ILE A 321 -4.280 4.015 -10.950 1.00 10.58 C +ATOM 2580 O ILE A 321 -3.534 3.044 -10.876 1.00 10.55 O +ATOM 2581 CB ILE A 321 -4.528 4.797 -8.600 1.00 10.39 C +ATOM 2582 CG1 ILE A 321 -5.438 4.903 -7.364 1.00 10.51 C +ATOM 2583 CG2 ILE A 321 -3.860 6.135 -8.896 1.00 10.37 C +ATOM 2584 CD1 ILE A 321 -6.756 5.611 -7.595 1.00 10.59 C +ATOM 2585 N ALA A 322 -4.252 4.865 -11.971 1.00 10.84 N +ATOM 2586 CA ALA A 322 -3.280 4.710 -13.051 1.00 11.13 C +ATOM 2587 C ALA A 322 -1.865 4.754 -12.475 1.00 11.25 C +ATOM 2588 O ALA A 322 -1.498 5.703 -11.774 1.00 11.63 O +ATOM 2589 CB ALA A 322 -3.468 5.794 -14.101 1.00 11.16 C +ATOM 2590 N GLY A 323 -1.087 3.710 -12.750 1.00 11.29 N +ATOM 2591 CA GLY A 323 0.256 3.580 -12.204 1.00 11.31 C +ATOM 2592 C GLY A 323 0.353 2.770 -10.919 1.00 11.14 C +ATOM 2593 O GLY A 323 1.459 2.419 -10.511 1.00 11.39 O +ATOM 2594 N ILE A 324 -0.783 2.462 -10.287 1.00 10.90 N +ATOM 2595 CA ILE A 324 -0.809 1.633 -9.073 1.00 10.81 C +ATOM 2596 C ILE A 324 -1.760 0.451 -9.251 1.00 10.94 C +ATOM 2597 O ILE A 324 -2.970 0.574 -9.027 1.00 10.86 O +ATOM 2598 CB ILE A 324 -1.263 2.408 -7.813 1.00 10.45 C +ATOM 2599 CG1 ILE A 324 -0.656 3.816 -7.753 1.00 10.41 C +ATOM 2600 CG2 ILE A 324 -0.885 1.610 -6.569 1.00 10.45 C +ATOM 2601 CD1 ILE A 324 -1.303 4.693 -6.701 1.00 10.36 C +ATOM 2602 N SER A 325 -1.217 -0.696 -9.642 1.00 11.37 N +ATOM 2603 CA SER A 325 -2.036 -1.885 -9.872 1.00 11.64 C +ATOM 2604 C SER A 325 -1.932 -2.889 -8.726 1.00 11.26 C +ATOM 2605 O SER A 325 -1.084 -2.759 -7.838 1.00 11.50 O +ATOM 2606 CB SER A 325 -1.622 -2.563 -11.172 1.00 12.18 C +ATOM 2607 OG SER A 325 -0.275 -2.977 -11.090 1.00 13.16 O +ATOM 2608 N GLY A 326 -2.808 -3.887 -8.768 1.00 10.63 N +ATOM 2609 CA GLY A 326 -2.798 -4.997 -7.820 1.00 10.25 C +ATOM 2610 C GLY A 326 -3.709 -4.782 -6.630 1.00 9.74 C +ATOM 2611 O GLY A 326 -4.211 -3.683 -6.413 1.00 9.37 O +ATOM 2612 N ASN A 327 -3.901 -5.843 -5.852 1.00 9.22 N +ATOM 2613 CA ASN A 327 -4.782 -5.816 -4.690 1.00 8.95 C +ATOM 2614 C ASN A 327 -4.077 -6.209 -3.395 1.00 8.71 C +ATOM 2615 O ASN A 327 -4.715 -6.614 -2.436 1.00 8.66 O +ATOM 2616 CB ASN A 327 -5.999 -6.724 -4.922 1.00 9.02 C +ATOM 2617 CG ASN A 327 -5.660 -8.205 -4.861 1.00 9.09 C +ATOM 2618 OD1 ASN A 327 -4.503 -8.604 -4.969 1.00 9.45 O +ATOM 2619 ND2 ASN A 327 -6.681 -9.026 -4.696 1.00 9.20 N +ATOM 2620 N SER A 328 -2.761 -6.063 -3.361 1.00 8.59 N +ATOM 2621 CA SER A 328 -1.993 -6.456 -2.187 1.00 8.58 C +ATOM 2622 C SER A 328 -0.847 -5.490 -1.935 1.00 8.37 C +ATOM 2623 O SER A 328 -0.526 -4.660 -2.787 1.00 8.63 O +ATOM 2624 CB SER A 328 -1.465 -7.876 -2.355 1.00 8.84 C +ATOM 2625 OG SER A 328 -0.517 -7.934 -3.393 1.00 9.35 O +ATOM 2626 N ILE A 329 -0.241 -5.591 -0.758 1.00 8.05 N +ATOM 2627 CA ILE A 329 0.878 -4.720 -0.407 1.00 7.95 C +ATOM 2628 C ILE A 329 2.195 -5.434 -0.702 1.00 7.98 C +ATOM 2629 O ILE A 329 2.526 -6.442 -0.081 1.00 7.90 O +ATOM 2630 CB ILE A 329 0.796 -4.244 1.058 1.00 7.96 C +ATOM 2631 CG1 ILE A 329 -0.496 -3.441 1.262 1.00 7.92 C +ATOM 2632 CG2 ILE A 329 2.001 -3.384 1.415 1.00 8.00 C +ATOM 2633 CD1 ILE A 329 -0.765 -3.055 2.696 1.00 7.85 C +ATOM 2634 N THR A 330 2.931 -4.889 -1.667 1.00 8.13 N +ATOM 2635 CA THR A 330 4.188 -5.446 -2.149 1.00 8.35 C +ATOM 2636 C THR A 330 5.169 -4.304 -2.342 1.00 8.64 C +ATOM 2637 O THR A 330 4.780 -3.140 -2.302 1.00 8.27 O +ATOM 2638 CB THR A 330 4.022 -6.113 -3.527 1.00 8.28 C +ATOM 2639 OG1 THR A 330 3.626 -5.127 -4.490 1.00 8.31 O +ATOM 2640 CG2 THR A 330 2.991 -7.230 -3.488 1.00 8.32 C +ATOM 2641 N GLN A 331 6.431 -4.648 -2.578 1.00 9.32 N +ATOM 2642 CA GLN A 331 7.459 -3.667 -2.916 1.00 10.10 C +ATOM 2643 C GLN A 331 7.021 -2.763 -4.070 1.00 9.63 C +ATOM 2644 O GLN A 331 7.089 -1.530 -3.983 1.00 9.27 O +ATOM 2645 CB GLN A 331 8.744 -4.396 -3.314 1.00 11.08 C +ATOM 2646 CG GLN A 331 9.917 -3.487 -3.635 1.00 12.34 C +ATOM 2647 CD GLN A 331 10.417 -2.736 -2.427 1.00 13.37 C +ATOM 2648 OE1 GLN A 331 10.274 -3.198 -1.290 1.00 14.78 O +ATOM 2649 NE2 GLN A 331 11.020 -1.573 -2.659 1.00 14.64 N +ATOM 2650 N ASP A 332 6.562 -3.384 -5.150 1.00 9.33 N +ATOM 2651 CA ASP A 332 6.160 -2.645 -6.344 1.00 9.24 C +ATOM 2652 C ASP A 332 4.981 -1.726 -6.063 1.00 8.64 C +ATOM 2653 O ASP A 332 4.953 -0.587 -6.513 1.00 8.42 O +ATOM 2654 CB ASP A 332 5.791 -3.604 -7.478 1.00 9.67 C +ATOM 2655 CG ASP A 332 6.985 -4.357 -8.028 1.00 10.25 C +ATOM 2656 OD1 ASP A 332 8.130 -4.048 -7.641 1.00 10.66 O +ATOM 2657 OD2 ASP A 332 6.767 -5.268 -8.857 1.00 10.99 O +ATOM 2658 N TYR A 333 3.998 -2.225 -5.321 1.00 8.07 N +ATOM 2659 CA TYR A 333 2.844 -1.414 -4.959 1.00 7.73 C +ATOM 2660 C TYR A 333 3.255 -0.195 -4.140 1.00 7.53 C +ATOM 2661 O TYR A 333 2.820 0.918 -4.422 1.00 7.25 O +ATOM 2662 CB TYR A 333 1.837 -2.247 -4.165 1.00 7.60 C +ATOM 2663 CG TYR A 333 0.750 -1.421 -3.526 1.00 7.54 C +ATOM 2664 CD1 TYR A 333 -0.394 -1.075 -4.234 1.00 7.52 C +ATOM 2665 CD2 TYR A 333 0.869 -0.982 -2.212 1.00 7.41 C +ATOM 2666 CE1 TYR A 333 -1.387 -0.308 -3.652 1.00 7.48 C +ATOM 2667 CE2 TYR A 333 -0.114 -0.215 -1.622 1.00 7.40 C +ATOM 2668 CZ TYR A 333 -1.241 0.121 -2.340 1.00 7.43 C +ATOM 2669 OH TYR A 333 -2.220 0.881 -1.743 1.00 7.41 O +ATOM 2670 N CYS A 334 4.086 -0.406 -3.123 1.00 7.45 N +ATOM 2671 CA CYS A 334 4.450 0.688 -2.228 1.00 7.39 C +ATOM 2672 C CYS A 334 5.237 1.773 -2.952 1.00 7.37 C +ATOM 2673 O CYS A 334 4.983 2.962 -2.762 1.00 7.45 O +ATOM 2674 CB CYS A 334 5.229 0.164 -1.024 1.00 7.55 C +ATOM 2675 SG CYS A 334 4.213 -0.900 0.030 1.00 7.77 S +ATOM 2676 N THR A 335 6.187 1.362 -3.785 1.00 7.33 N +ATOM 2677 CA THR A 335 6.967 2.313 -4.562 1.00 7.31 C +ATOM 2678 C THR A 335 6.061 3.103 -5.500 1.00 7.44 C +ATOM 2679 O THR A 335 6.143 4.329 -5.566 1.00 7.62 O +ATOM 2680 CB THR A 335 8.061 1.598 -5.362 1.00 7.19 C +ATOM 2681 OG1 THR A 335 8.988 0.995 -4.454 1.00 7.09 O +ATOM 2682 CG2 THR A 335 8.803 2.574 -6.261 1.00 7.20 C +ATOM 2683 N ALA A 336 5.184 2.396 -6.202 1.00 7.56 N +ATOM 2684 CA ALA A 336 4.278 3.036 -7.149 1.00 7.92 C +ATOM 2685 C ALA A 336 3.329 3.998 -6.457 1.00 8.16 C +ATOM 2686 O ALA A 336 3.105 5.110 -6.926 1.00 8.23 O +ATOM 2687 CB ALA A 336 3.488 1.997 -7.912 1.00 7.84 C +ATOM 2688 N GLN A 337 2.759 3.559 -5.343 1.00 8.48 N +ATOM 2689 CA GLN A 337 1.755 4.353 -4.650 1.00 8.90 C +ATOM 2690 C GLN A 337 2.339 5.666 -4.122 1.00 8.99 C +ATOM 2691 O GLN A 337 1.726 6.733 -4.255 1.00 9.07 O +ATOM 2692 CB GLN A 337 1.134 3.516 -3.535 1.00 9.09 C +ATOM 2693 CG GLN A 337 -0.099 4.123 -2.900 1.00 9.29 C +ATOM 2694 CD GLN A 337 0.152 4.579 -1.485 1.00 9.61 C +ATOM 2695 OE1 GLN A 337 1.127 5.281 -1.207 1.00 9.70 O +ATOM 2696 NE2 GLN A 337 -0.732 4.191 -0.581 1.00 9.71 N +ATOM 2697 N LYS A 338 3.529 5.599 -3.537 1.00 9.18 N +ATOM 2698 CA LYS A 338 4.166 6.797 -3.003 1.00 9.50 C +ATOM 2699 C LYS A 338 4.556 7.749 -4.131 1.00 9.98 C +ATOM 2700 O LYS A 338 4.395 8.959 -4.001 1.00 10.38 O +ATOM 2701 CB LYS A 338 5.371 6.427 -2.135 1.00 9.35 C +ATOM 2702 CG LYS A 338 4.988 5.644 -0.885 1.00 9.32 C +ATOM 2703 CD LYS A 338 4.240 6.492 0.133 1.00 9.31 C +ATOM 2704 CE LYS A 338 3.725 5.641 1.286 1.00 9.27 C +ATOM 2705 NZ LYS A 338 2.898 6.419 2.249 1.00 9.34 N +ATOM 2706 N GLN A 339 5.039 7.203 -5.244 1.00 10.69 N +ATOM 2707 CA GLN A 339 5.368 8.029 -6.411 1.00 11.41 C +ATOM 2708 C GLN A 339 4.124 8.682 -7.010 1.00 10.98 C +ATOM 2709 O GLN A 339 4.108 9.884 -7.241 1.00 11.27 O +ATOM 2710 CB GLN A 339 6.102 7.217 -7.482 1.00 12.40 C +ATOM 2711 CG GLN A 339 7.543 6.855 -7.139 1.00 13.47 C +ATOM 2712 CD GLN A 339 8.378 8.051 -6.706 1.00 14.83 C +ATOM 2713 OE1 GLN A 339 8.471 9.055 -7.416 1.00 17.01 O +ATOM 2714 NE2 GLN A 339 8.981 7.951 -5.524 1.00 15.52 N +ATOM 2715 N VAL A 340 3.072 7.906 -7.234 1.00 10.33 N +ATOM 2716 CA VAL A 340 1.862 8.438 -7.867 1.00 10.03 C +ATOM 2717 C VAL A 340 1.107 9.420 -6.962 1.00 9.82 C +ATOM 2718 O VAL A 340 0.617 10.456 -7.433 1.00 10.07 O +ATOM 2719 CB VAL A 340 0.934 7.300 -8.335 1.00 9.99 C +ATOM 2720 CG1 VAL A 340 -0.398 7.842 -8.837 1.00 9.94 C +ATOM 2721 CG2 VAL A 340 1.617 6.480 -9.421 1.00 9.90 C +ATOM 2722 N PHE A 341 1.013 9.112 -5.670 1.00 9.59 N +ATOM 2723 CA PHE A 341 0.309 9.991 -4.733 1.00 9.65 C +ATOM 2724 C PHE A 341 1.175 11.182 -4.330 1.00 9.94 C +ATOM 2725 O PHE A 341 0.658 12.161 -3.792 1.00 10.59 O +ATOM 2726 CB PHE A 341 -0.124 9.236 -3.464 1.00 9.29 C +ATOM 2727 CG PHE A 341 -1.261 8.261 -3.661 1.00 9.06 C +ATOM 2728 CD1 PHE A 341 -2.007 8.215 -4.839 1.00 8.86 C +ATOM 2729 CD2 PHE A 341 -1.618 7.414 -2.622 1.00 8.90 C +ATOM 2730 CE1 PHE A 341 -3.059 7.323 -4.978 1.00 8.74 C +ATOM 2731 CE2 PHE A 341 -2.668 6.529 -2.755 1.00 8.82 C +ATOM 2732 CZ PHE A 341 -3.393 6.484 -3.933 1.00 8.75 C +ATOM 2733 N GLY A 342 2.481 11.094 -4.576 1.00 10.07 N +ATOM 2734 CA GLY A 342 3.411 12.159 -4.203 1.00 10.49 C +ATOM 2735 C GLY A 342 3.597 12.268 -2.701 1.00 10.78 C +ATOM 2736 O GLY A 342 3.736 13.367 -2.164 1.00 11.19 O +ATOM 2737 N ASP A 343 3.576 11.128 -2.016 1.00 11.13 N +ATOM 2738 CA ASP A 343 3.801 11.083 -0.577 1.00 11.58 C +ATOM 2739 C ASP A 343 5.232 10.626 -0.342 1.00 11.52 C +ATOM 2740 O ASP A 343 5.744 9.769 -1.066 1.00 11.71 O +ATOM 2741 CB ASP A 343 2.822 10.120 0.096 1.00 11.93 C +ATOM 2742 CG ASP A 343 1.377 10.590 0.017 1.00 12.44 C +ATOM 2743 OD1 ASP A 343 1.125 11.802 -0.160 1.00 13.34 O +ATOM 2744 OD2 ASP A 343 0.481 9.732 0.138 1.00 13.07 O +ATOM 2745 N THR A 344 5.877 11.204 0.667 1.00 11.44 N +ATOM 2746 CA THR A 344 7.256 10.880 0.983 1.00 11.62 C +ATOM 2747 C THR A 344 7.335 9.410 1.387 1.00 11.13 C +ATOM 2748 O THR A 344 6.541 8.952 2.204 1.00 11.12 O +ATOM 2749 CB THR A 344 7.773 11.759 2.138 1.00 11.88 C +ATOM 2750 OG1 THR A 344 7.573 13.141 1.811 1.00 13.09 O +ATOM 2751 CG2 THR A 344 9.253 11.487 2.413 1.00 11.99 C +ATOM 2752 N ASN A 345 8.283 8.673 0.816 1.00 10.73 N +ATOM 2753 CA ASN A 345 8.368 7.239 1.057 1.00 10.40 C +ATOM 2754 C ASN A 345 9.210 6.935 2.293 1.00 10.16 C +ATOM 2755 O ASN A 345 10.271 6.321 2.196 1.00 9.97 O +ATOM 2756 CB ASN A 345 8.920 6.506 -0.179 1.00 10.40 C +ATOM 2757 CG ASN A 345 8.558 5.028 -0.192 1.00 10.40 C +ATOM 2758 OD1 ASN A 345 8.204 4.445 0.840 1.00 9.98 O +ATOM 2759 ND2 ASN A 345 8.641 4.415 -1.363 1.00 10.51 N +ATOM 2760 N THR A 346 8.717 7.352 3.457 1.00 9.82 N +ATOM 2761 CA THR A 346 9.373 7.036 4.728 1.00 9.70 C +ATOM 2762 C THR A 346 9.290 5.538 5.031 1.00 9.31 C +ATOM 2763 O THR A 346 10.125 4.997 5.757 1.00 9.05 O +ATOM 2764 CB THR A 346 8.792 7.849 5.901 1.00 9.96 C +ATOM 2765 OG1 THR A 346 7.359 7.807 5.863 1.00 10.18 O +ATOM 2766 CG2 THR A 346 9.269 9.305 5.827 1.00 10.10 C +ATOM 2767 N TRP A 347 8.275 4.882 4.473 1.00 9.02 N +ATOM 2768 CA TRP A 347 8.174 3.426 4.507 1.00 9.01 C +ATOM 2769 C TRP A 347 9.467 2.778 4.013 1.00 9.46 C +ATOM 2770 O TRP A 347 10.079 1.966 4.707 1.00 9.06 O +ATOM 2771 CB TRP A 347 6.963 2.964 3.675 1.00 8.67 C +ATOM 2772 CG TRP A 347 6.995 1.531 3.274 1.00 8.52 C +ATOM 2773 CD1 TRP A 347 7.242 1.037 2.022 1.00 8.52 C +ATOM 2774 CD2 TRP A 347 6.784 0.395 4.118 1.00 8.39 C +ATOM 2775 NE1 TRP A 347 7.191 -0.332 2.038 1.00 8.48 N +ATOM 2776 CE2 TRP A 347 6.907 -0.755 3.309 1.00 8.39 C +ATOM 2777 CE3 TRP A 347 6.494 0.236 5.480 1.00 8.25 C +ATOM 2778 CZ2 TRP A 347 6.760 -2.051 3.816 1.00 8.29 C +ATOM 2779 CZ3 TRP A 347 6.349 -1.054 5.983 1.00 8.36 C +ATOM 2780 CH2 TRP A 347 6.485 -2.180 5.147 1.00 8.37 C +ATOM 2781 N GLU A 348 9.885 3.161 2.813 1.00 10.41 N +ATOM 2782 CA GLU A 348 11.116 2.639 2.233 1.00 11.67 C +ATOM 2783 C GLU A 348 12.349 3.139 3.006 1.00 11.65 C +ATOM 2784 O GLU A 348 13.285 2.370 3.268 1.00 11.25 O +ATOM 2785 CB GLU A 348 11.187 3.032 0.751 1.00 12.82 C +ATOM 2786 CG GLU A 348 12.464 2.636 0.019 1.00 14.09 C +ATOM 2787 CD GLU A 348 12.523 1.174 -0.386 1.00 15.25 C +ATOM 2788 OE1 GLU A 348 11.464 0.542 -0.622 1.00 15.76 O +ATOM 2789 OE2 GLU A 348 13.659 0.654 -0.503 1.00 16.71 O +ATOM 2790 N ASP A 349 12.343 4.413 3.388 1.00 11.65 N +ATOM 2791 CA ASP A 349 13.503 5.019 4.057 1.00 12.19 C +ATOM 2792 C ASP A 349 13.903 4.296 5.332 1.00 11.64 C +ATOM 2793 O ASP A 349 15.089 4.200 5.642 1.00 11.90 O +ATOM 2794 CB ASP A 349 13.245 6.483 4.411 1.00 13.21 C +ATOM 2795 CG ASP A 349 13.057 7.364 3.198 1.00 14.54 C +ATOM 2796 OD1 ASP A 349 13.457 6.958 2.083 1.00 16.16 O +ATOM 2797 OD2 ASP A 349 12.502 8.473 3.370 1.00 16.09 O +ATOM 2798 N HIS A 350 12.917 3.804 6.079 1.00 10.72 N +ATOM 2799 CA HIS A 350 13.193 3.152 7.363 1.00 10.18 C +ATOM 2800 C HIS A 350 13.172 1.625 7.289 1.00 9.81 C +ATOM 2801 O HIS A 350 13.075 0.958 8.319 1.00 9.87 O +ATOM 2802 CB HIS A 350 12.233 3.668 8.432 1.00 10.15 C +ATOM 2803 CG HIS A 350 12.337 5.141 8.662 1.00 10.24 C +ATOM 2804 ND1 HIS A 350 13.477 5.738 9.156 1.00 10.25 N +ATOM 2805 CD2 HIS A 350 11.456 6.141 8.435 1.00 10.29 C +ATOM 2806 CE1 HIS A 350 13.284 7.041 9.246 1.00 10.20 C +ATOM 2807 NE2 HIS A 350 12.066 7.312 8.813 1.00 10.22 N +ATOM 2808 N GLY A 351 13.283 1.078 6.080 1.00 9.30 N +ATOM 2809 CA GLY A 351 13.569 -0.346 5.898 1.00 9.11 C +ATOM 2810 C GLY A 351 12.449 -1.195 5.332 1.00 9.04 C +ATOM 2811 O GLY A 351 12.626 -2.395 5.143 1.00 8.95 O +ATOM 2812 N GLY A 352 11.303 -0.579 5.057 1.00 8.71 N +ATOM 2813 CA GLY A 352 10.177 -1.262 4.406 1.00 8.69 C +ATOM 2814 C GLY A 352 9.940 -2.691 4.869 1.00 8.70 C +ATOM 2815 O GLY A 352 9.760 -2.944 6.054 1.00 8.34 O +ATOM 2816 N PHE A 353 9.953 -3.625 3.920 1.00 8.81 N +ATOM 2817 CA PHE A 353 9.598 -5.010 4.191 1.00 9.14 C +ATOM 2818 C PHE A 353 10.599 -5.730 5.086 1.00 9.36 C +ATOM 2819 O PHE A 353 10.224 -6.625 5.844 1.00 9.24 O +ATOM 2820 CB PHE A 353 9.412 -5.771 2.882 1.00 9.21 C +ATOM 2821 CG PHE A 353 8.125 -5.451 2.195 1.00 9.26 C +ATOM 2822 CD1 PHE A 353 6.975 -6.167 2.494 1.00 9.46 C +ATOM 2823 CD2 PHE A 353 8.050 -4.418 1.279 1.00 9.31 C +ATOM 2824 CE1 PHE A 353 5.774 -5.864 1.879 1.00 9.50 C +ATOM 2825 CE2 PHE A 353 6.856 -4.111 0.662 1.00 9.38 C +ATOM 2826 CZ PHE A 353 5.717 -4.837 0.960 1.00 9.54 C +ATOM 2827 N GLN A 354 11.865 -5.340 5.014 1.00 9.73 N +ATOM 2828 CA GLN A 354 12.870 -5.937 5.886 1.00 10.19 C +ATOM 2829 C GLN A 354 12.648 -5.522 7.341 1.00 9.70 C +ATOM 2830 O GLN A 354 12.805 -6.317 8.276 1.00 9.14 O +ATOM 2831 CB GLN A 354 14.269 -5.532 5.433 1.00 11.08 C +ATOM 2832 CG GLN A 354 15.363 -6.367 6.053 1.00 12.13 C +ATOM 2833 CD GLN A 354 15.157 -7.850 5.812 1.00 13.13 C +ATOM 2834 OE1 GLN A 354 14.931 -8.283 4.676 1.00 14.78 O +ATOM 2835 NE2 GLN A 354 15.193 -8.632 6.883 1.00 14.06 N +ATOM 2836 N SER A 355 12.282 -4.260 7.525 1.00 9.16 N +ATOM 2837 CA SER A 355 11.934 -3.754 8.836 1.00 8.92 C +ATOM 2838 C SER A 355 10.762 -4.546 9.437 1.00 8.74 C +ATOM 2839 O SER A 355 10.812 -4.950 10.593 1.00 8.49 O +ATOM 2840 CB SER A 355 11.615 -2.257 8.757 1.00 8.91 C +ATOM 2841 OG SER A 355 11.336 -1.730 10.037 1.00 8.76 O +ATOM 2842 N AMET A 356 9.722 -4.782 8.645 0.75 8.69 N +ATOM 2843 N BMET A 356 9.715 -4.772 8.647 0.25 8.56 N +ATOM 2844 CA AMET A 356 8.565 -5.515 9.147 0.75 8.78 C +ATOM 2845 CA BMET A 356 8.554 -5.529 9.122 0.25 8.48 C +ATOM 2846 C AMET A 356 8.909 -6.980 9.421 0.75 8.56 C +ATOM 2847 C BMET A 356 8.908 -6.981 9.417 0.25 8.42 C +ATOM 2848 O AMET A 356 8.403 -7.572 10.377 0.75 8.39 O +ATOM 2849 O BMET A 356 8.396 -7.566 10.374 0.25 8.37 O +ATOM 2850 CB AMET A 356 7.380 -5.404 8.183 0.75 9.08 C +ATOM 2851 CB BMET A 356 7.421 -5.481 8.102 0.25 8.47 C +ATOM 2852 CG AMET A 356 6.065 -5.901 8.772 0.75 9.25 C +ATOM 2853 CG BMET A 356 6.992 -4.075 7.744 0.25 8.45 C +ATOM 2854 SD AMET A 356 5.627 -5.154 10.361 0.75 9.82 S +ATOM 2855 SD BMET A 356 6.981 -2.940 9.142 0.25 8.44 S +ATOM 2856 CE AMET A 356 5.492 -3.437 9.883 0.75 9.58 C +ATOM 2857 CE BMET A 356 5.751 -3.715 10.189 0.25 8.42 C +ATOM 2858 N THR A 357 9.774 -7.560 8.590 1.00 8.33 N +ATOM 2859 CA THR A 357 10.286 -8.907 8.840 1.00 8.37 C +ATOM 2860 C THR A 357 10.981 -8.972 10.201 1.00 8.51 C +ATOM 2861 O THR A 357 10.735 -9.877 10.990 1.00 8.37 O +ATOM 2862 CB THR A 357 11.282 -9.333 7.752 1.00 8.26 C +ATOM 2863 OG1 THR A 357 10.624 -9.341 6.482 1.00 8.19 O +ATOM 2864 CG2 THR A 357 11.854 -10.717 8.043 1.00 8.34 C +ATOM 2865 N ASN A 358 11.833 -7.993 10.484 1.00 8.71 N +ATOM 2866 CA ASN A 358 12.548 -7.966 11.755 1.00 9.01 C +ATOM 2867 C ASN A 358 11.625 -7.693 12.946 1.00 8.88 C +ATOM 2868 O ASN A 358 11.864 -8.199 14.040 1.00 8.90 O +ATOM 2869 CB ASN A 358 13.702 -6.962 11.685 1.00 9.58 C +ATOM 2870 CG ASN A 358 14.757 -7.372 10.670 1.00 10.08 C +ATOM 2871 OD1 ASN A 358 14.787 -8.521 10.227 1.00 11.39 O +ATOM 2872 ND2 ASN A 358 15.609 -6.442 10.291 1.00 10.49 N +ATOM 2873 N ALA A 359 10.566 -6.910 12.729 1.00 8.75 N +ATOM 2874 CA ALA A 359 9.549 -6.698 13.764 1.00 8.65 C +ATOM 2875 C ALA A 359 8.839 -8.005 14.141 1.00 8.67 C +ATOM 2876 O ALA A 359 8.633 -8.286 15.328 1.00 8.33 O +ATOM 2877 CB ALA A 359 8.543 -5.650 13.312 1.00 8.68 C +ATOM 2878 N PHE A 360 8.496 -8.809 13.140 1.00 8.86 N +ATOM 2879 CA PHE A 360 7.883 -10.111 13.396 1.00 9.25 C +ATOM 2880 C PHE A 360 8.835 -11.037 14.136 1.00 9.57 C +ATOM 2881 O PHE A 360 8.431 -11.748 15.056 1.00 9.41 O +ATOM 2882 CB PHE A 360 7.441 -10.784 12.096 1.00 9.36 C +ATOM 2883 CG PHE A 360 6.072 -10.368 11.612 1.00 9.63 C +ATOM 2884 CD1 PHE A 360 4.989 -10.294 12.483 1.00 9.91 C +ATOM 2885 CD2 PHE A 360 5.856 -10.095 10.270 1.00 9.88 C +ATOM 2886 CE1 PHE A 360 3.727 -9.931 12.024 1.00 10.10 C +ATOM 2887 CE2 PHE A 360 4.599 -9.739 9.809 1.00 10.04 C +ATOM 2888 CZ PHE A 360 3.535 -9.654 10.686 1.00 10.16 C +ATOM 2889 N LYS A 361 10.102 -11.025 13.741 1.00 10.05 N +ATOM 2890 CA LYS A 361 11.100 -11.845 14.410 1.00 10.74 C +ATOM 2891 C LYS A 361 11.297 -11.448 15.871 1.00 10.55 C +ATOM 2892 O LYS A 361 11.554 -12.311 16.711 1.00 11.28 O +ATOM 2893 CB LYS A 361 12.418 -11.809 13.647 1.00 11.22 C +ATOM 2894 CG LYS A 361 12.344 -12.564 12.330 1.00 11.88 C +ATOM 2895 CD LYS A 361 13.664 -12.537 11.587 1.00 12.76 C +ATOM 2896 CE LYS A 361 13.574 -13.253 10.256 1.00 13.39 C +ATOM 2897 NZ LYS A 361 14.915 -13.325 9.613 1.00 14.11 N +ATOM 2898 N ALA A 362 11.168 -10.155 16.166 1.00 10.35 N +ATOM 2899 CA ALA A 362 11.242 -9.647 17.541 1.00 10.19 C +ATOM 2900 C ALA A 362 10.051 -10.117 18.378 1.00 10.04 C +ATOM 2901 O ALA A 362 10.172 -10.329 19.587 1.00 10.28 O +ATOM 2902 CB ALA A 362 11.316 -8.126 17.542 1.00 10.30 C +ATOM 2903 N GLY A 363 8.901 -10.266 17.728 1.00 9.63 N +ATOM 2904 CA GLY A 363 7.677 -10.676 18.387 1.00 9.34 C +ATOM 2905 C GLY A 363 6.764 -9.476 18.534 1.00 9.04 C +ATOM 2906 O GLY A 363 7.131 -8.482 19.164 1.00 9.23 O +ATOM 2907 N AMET A 364 5.578 -9.587 17.941 0.60 8.60 N +ATOM 2908 N BMET A 364 5.581 -9.542 17.938 0.40 9.09 N +ATOM 2909 CA AMET A 364 4.566 -8.535 17.937 0.60 8.42 C +ATOM 2910 CA BMET A 364 4.654 -8.420 17.998 0.40 9.13 C +ATOM 2911 C AMET A 364 3.518 -8.769 19.017 0.60 8.16 C +ATOM 2912 C BMET A 364 3.480 -8.715 18.926 0.40 8.58 C +ATOM 2913 O AMET A 364 3.060 -9.895 19.198 0.60 8.09 O +ATOM 2914 O BMET A 364 2.924 -9.814 18.923 0.40 8.48 O +ATOM 2915 CB AMET A 364 3.848 -8.532 16.586 0.60 8.43 C +ATOM 2916 CB BMET A 364 4.169 -8.059 16.595 0.40 9.75 C +ATOM 2917 CG AMET A 364 4.682 -8.079 15.399 0.60 8.41 C +ATOM 2918 CG BMET A 364 5.298 -7.903 15.588 0.40 10.25 C +ATOM 2919 SD AMET A 364 4.971 -6.304 15.427 0.60 8.38 S +ATOM 2920 SD BMET A 364 4.784 -7.199 14.010 0.40 11.35 S +ATOM 2921 CE AMET A 364 4.804 -5.887 13.697 0.60 8.43 C +ATOM 2922 CE BMET A 364 4.554 -5.481 14.458 0.40 11.04 C +ATOM 2923 N VAL A 365 3.119 -7.702 19.707 1.00 7.89 N +ATOM 2924 CA VAL A 365 1.996 -7.752 20.642 1.00 7.57 C +ATOM 2925 C VAL A 365 0.733 -7.276 19.916 1.00 7.25 C +ATOM 2926 O VAL A 365 0.783 -6.304 19.157 1.00 7.16 O +ATOM 2927 CB VAL A 365 2.278 -6.852 21.862 1.00 7.56 C +ATOM 2928 CG1 VAL A 365 1.051 -6.721 22.761 1.00 7.61 C +ATOM 2929 CG2 VAL A 365 3.477 -7.386 22.631 1.00 7.58 C +ATOM 2930 N LEU A 366 -0.393 -7.955 20.156 1.00 6.92 N +ATOM 2931 CA LEU A 366 -1.671 -7.597 19.545 1.00 6.85 C +ATOM 2932 C LEU A 366 -2.347 -6.497 20.353 1.00 6.66 C +ATOM 2933 O LEU A 366 -2.520 -6.618 21.572 1.00 6.41 O +ATOM 2934 CB LEU A 366 -2.590 -8.820 19.465 1.00 6.87 C +ATOM 2935 CG LEU A 366 -3.994 -8.596 18.887 1.00 7.01 C +ATOM 2936 CD1 LEU A 366 -3.918 -8.138 17.440 1.00 7.11 C +ATOM 2937 CD2 LEU A 366 -4.813 -9.873 19.007 1.00 7.11 C +ATOM 2938 N VAL A 367 -2.720 -5.428 19.661 1.00 6.65 N +ATOM 2939 CA VAL A 367 -3.393 -4.283 20.249 1.00 6.77 C +ATOM 2940 C VAL A 367 -4.792 -4.193 19.666 1.00 6.92 C +ATOM 2941 O VAL A 367 -4.958 -4.298 18.450 1.00 6.68 O +ATOM 2942 CB VAL A 367 -2.652 -2.978 19.903 1.00 6.71 C +ATOM 2943 CG1 VAL A 367 -3.226 -1.804 20.688 1.00 6.77 C +ATOM 2944 CG2 VAL A 367 -1.156 -3.127 20.142 1.00 6.67 C +ATOM 2945 N MET A 368 -5.787 -4.003 20.527 1.00 7.28 N +ATOM 2946 CA MET A 368 -7.161 -3.766 20.087 1.00 7.78 C +ATOM 2947 C MET A 368 -7.673 -2.510 20.761 1.00 7.64 C +ATOM 2948 O MET A 368 -7.673 -2.420 21.984 1.00 7.46 O +ATOM 2949 CB MET A 368 -8.033 -4.973 20.404 1.00 8.53 C +ATOM 2950 CG MET A 368 -7.708 -6.153 19.502 1.00 9.12 C +ATOM 2951 SD MET A 368 -8.514 -7.688 19.961 1.00 10.75 S +ATOM 2952 CE MET A 368 -7.561 -8.132 21.398 1.00 10.30 C +ATOM 2953 N SER A 369 -8.094 -1.536 19.958 1.00 7.70 N +ATOM 2954 CA SER A 369 -8.402 -0.212 20.469 1.00 7.69 C +ATOM 2955 C SER A 369 -9.626 0.381 19.783 1.00 7.72 C +ATOM 2956 O SER A 369 -10.071 -0.101 18.741 1.00 7.71 O +ATOM 2957 CB SER A 369 -7.202 0.711 20.253 1.00 7.88 C +ATOM 2958 OG SER A 369 -7.042 0.987 18.874 1.00 8.32 O +ATOM 2959 N LEU A 370 -10.168 1.423 20.403 1.00 7.70 N +ATOM 2960 CA LEU A 370 -11.228 2.230 19.825 1.00 7.85 C +ATOM 2961 C LEU A 370 -10.918 3.676 20.174 1.00 8.09 C +ATOM 2962 O LEU A 370 -10.728 4.007 21.344 1.00 8.00 O +ATOM 2963 CB LEU A 370 -12.589 1.821 20.397 1.00 7.79 C +ATOM 2964 CG LEU A 370 -13.794 2.629 19.900 1.00 7.83 C +ATOM 2965 CD1 LEU A 370 -13.916 2.549 18.383 1.00 7.94 C +ATOM 2966 CD2 LEU A 370 -15.075 2.160 20.576 1.00 7.92 C +ATOM 2967 N TRP A 371 -10.844 4.541 19.169 1.00 8.37 N +ATOM 2968 CA TRP A 371 -10.412 5.907 19.407 1.00 8.85 C +ATOM 2969 C TRP A 371 -10.989 6.919 18.438 1.00 9.13 C +ATOM 2970 O TRP A 371 -11.399 6.581 17.326 1.00 8.75 O +ATOM 2971 CB TRP A 371 -8.881 5.991 19.404 1.00 8.98 C +ATOM 2972 CG TRP A 371 -8.177 5.528 18.141 1.00 9.28 C +ATOM 2973 CD1 TRP A 371 -8.118 4.255 17.649 1.00 9.59 C +ATOM 2974 CD2 TRP A 371 -7.383 6.333 17.256 1.00 9.46 C +ATOM 2975 NE1 TRP A 371 -7.363 4.224 16.505 1.00 9.70 N +ATOM 2976 CE2 TRP A 371 -6.899 5.485 16.242 1.00 9.62 C +ATOM 2977 CE3 TRP A 371 -7.050 7.691 17.215 1.00 9.54 C +ATOM 2978 CZ2 TRP A 371 -6.092 5.949 15.200 1.00 9.63 C +ATOM 2979 CZ3 TRP A 371 -6.244 8.150 16.179 1.00 9.59 C +ATOM 2980 CH2 TRP A 371 -5.780 7.281 15.188 1.00 9.66 C +ATOM 2981 N ASP A 372 -11.042 8.166 18.900 1.00 9.54 N +ATOM 2982 CA ASP A 372 -11.200 9.314 18.012 1.00 10.11 C +ATOM 2983 C ASP A 372 -9.885 10.080 17.948 1.00 10.27 C +ATOM 2984 O ASP A 372 -8.974 9.843 18.742 1.00 10.34 O +ATOM 2985 CB ASP A 372 -12.405 10.192 18.383 1.00 10.34 C +ATOM 2986 CG ASP A 372 -12.330 10.798 19.778 1.00 10.59 C +ATOM 2987 OD1 ASP A 372 -11.427 10.474 20.572 1.00 10.90 O +ATOM 2988 OD2 ASP A 372 -13.222 11.615 20.078 1.00 11.11 O +ATOM 2989 N ASP A 373 -9.781 10.976 16.974 1.00 10.77 N +ATOM 2990 CA ASP A 373 -8.497 11.511 16.546 1.00 11.21 C +ATOM 2991 C ASP A 373 -8.451 13.014 16.788 1.00 11.98 C +ATOM 2992 O ASP A 373 -9.022 13.800 16.033 1.00 11.56 O +ATOM 2993 CB ASP A 373 -8.306 11.154 15.068 1.00 11.13 C +ATOM 2994 CG ASP A 373 -7.059 11.753 14.446 1.00 11.15 C +ATOM 2995 OD1 ASP A 373 -6.199 12.324 15.153 1.00 11.38 O +ATOM 2996 OD2 ASP A 373 -6.944 11.649 13.207 1.00 11.02 O +ATOM 2997 N TYR A 374 -7.754 13.396 17.854 1.00 13.10 N +ATOM 2998 CA TYR A 374 -7.654 14.796 18.248 1.00 14.18 C +ATOM 2999 C TYR A 374 -6.694 15.597 17.354 1.00 14.81 C +ATOM 3000 O TYR A 374 -6.694 16.829 17.402 1.00 15.18 O +ATOM 3001 CB TYR A 374 -7.250 14.903 19.725 1.00 14.60 C +ATOM 3002 CG TYR A 374 -8.406 14.749 20.692 1.00 15.21 C +ATOM 3003 CD1 TYR A 374 -8.998 13.511 20.915 1.00 15.41 C +ATOM 3004 CD2 TYR A 374 -8.915 15.851 21.375 1.00 15.48 C +ATOM 3005 CE1 TYR A 374 -10.063 13.374 21.793 1.00 15.82 C +ATOM 3006 CE2 TYR A 374 -9.977 15.724 22.253 1.00 15.78 C +ATOM 3007 CZ TYR A 374 -10.546 14.487 22.461 1.00 15.98 C +ATOM 3008 OH TYR A 374 -11.602 14.367 23.335 1.00 16.81 O +ATOM 3009 N TYR A 375 -5.895 14.909 16.535 1.00 15.55 N +ATOM 3010 CA TYR A 375 -4.985 15.575 15.602 1.00 16.48 C +ATOM 3011 C TYR A 375 -5.673 15.921 14.280 1.00 15.40 C +ATOM 3012 O TYR A 375 -5.688 17.080 13.869 1.00 15.90 O +ATOM 3013 CB TYR A 375 -3.750 14.704 15.343 1.00 18.18 C +ATOM 3014 CG TYR A 375 -2.812 15.251 14.285 1.00 20.45 C +ATOM 3015 CD1 TYR A 375 -2.100 16.434 14.496 1.00 21.69 C +ATOM 3016 CD2 TYR A 375 -2.622 14.578 13.078 1.00 21.58 C +ATOM 3017 CE1 TYR A 375 -1.234 16.930 13.528 1.00 22.81 C +ATOM 3018 CE2 TYR A 375 -1.762 15.068 12.108 1.00 22.77 C +ATOM 3019 CZ TYR A 375 -1.072 16.244 12.334 1.00 23.23 C +ATOM 3020 OH TYR A 375 -0.216 16.727 11.366 1.00 25.63 O +ATOM 3021 N ALA A 376 -6.240 14.912 13.618 1.00 13.99 N +ATOM 3022 CA ALA A 376 -6.768 15.083 12.258 1.00 12.98 C +ATOM 3023 C ALA A 376 -8.194 14.563 12.028 1.00 12.00 C +ATOM 3024 O ALA A 376 -8.608 14.385 10.879 1.00 11.47 O +ATOM 3025 CB ALA A 376 -5.806 14.461 11.258 1.00 13.13 C +ATOM 3026 N ASP A 377 -8.938 14.331 13.110 1.00 11.51 N +ATOM 3027 CA ASP A 377 -10.367 13.998 13.044 1.00 11.23 C +ATOM 3028 C ASP A 377 -10.670 12.735 12.223 1.00 10.23 C +ATOM 3029 O ASP A 377 -11.785 12.555 11.743 1.00 9.95 O +ATOM 3030 CB ASP A 377 -11.173 15.189 12.501 1.00 11.92 C +ATOM 3031 CG ASP A 377 -10.975 16.462 13.318 1.00 12.51 C +ATOM 3032 OD1 ASP A 377 -10.584 16.381 14.499 1.00 13.41 O +ATOM 3033 OD2 ASP A 377 -11.220 17.558 12.772 1.00 14.11 O +ATOM 3034 N MET A 378 -9.662 11.877 12.083 1.00 9.51 N +ATOM 3035 CA MET A 378 -9.744 10.628 11.332 1.00 8.92 C +ATOM 3036 C MET A 378 -9.963 10.861 9.836 1.00 8.66 C +ATOM 3037 O MET A 378 -10.347 9.945 9.109 1.00 8.50 O +ATOM 3038 CB MET A 378 -10.826 9.705 11.903 1.00 8.79 C +ATOM 3039 CG MET A 378 -10.396 8.245 11.946 1.00 8.60 C +ATOM 3040 SD MET A 378 -9.077 7.947 13.142 1.00 8.40 S +ATOM 3041 CE MET A 378 -9.985 8.096 14.682 1.00 8.40 C +ATOM 3042 N LEU A 379 -9.669 12.073 9.371 1.00 8.55 N +ATOM 3043 CA LEU A 379 -9.959 12.443 7.987 1.00 8.48 C +ATOM 3044 C LEU A 379 -9.067 11.705 7.002 1.00 8.45 C +ATOM 3045 O LEU A 379 -9.482 11.410 5.878 1.00 8.49 O +ATOM 3046 CB LEU A 379 -9.829 13.955 7.797 1.00 8.58 C +ATOM 3047 CG LEU A 379 -10.868 14.790 8.547 1.00 8.68 C +ATOM 3048 CD1 LEU A 379 -10.397 16.234 8.607 1.00 8.90 C +ATOM 3049 CD2 LEU A 379 -12.257 14.695 7.922 1.00 8.78 C +ATOM 3050 N TRP A 380 -7.848 11.406 7.434 1.00 8.40 N +ATOM 3051 CA TRP A 380 -6.920 10.565 6.671 1.00 8.34 C +ATOM 3052 C TRP A 380 -7.502 9.169 6.348 1.00 8.11 C +ATOM 3053 O TRP A 380 -7.102 8.538 5.363 1.00 8.03 O +ATOM 3054 CB TRP A 380 -5.601 10.428 7.439 1.00 8.63 C +ATOM 3055 CG TRP A 380 -5.783 9.879 8.820 1.00 8.96 C +ATOM 3056 CD1 TRP A 380 -5.993 10.587 9.967 1.00 9.23 C +ATOM 3057 CD2 TRP A 380 -5.807 8.501 9.189 1.00 9.21 C +ATOM 3058 NE1 TRP A 380 -6.146 9.730 11.031 1.00 9.26 N +ATOM 3059 CE2 TRP A 380 -6.026 8.442 10.579 1.00 9.40 C +ATOM 3060 CE3 TRP A 380 -5.658 7.307 8.477 1.00 9.40 C +ATOM 3061 CZ2 TRP A 380 -6.098 7.231 11.271 1.00 9.35 C +ATOM 3062 CZ3 TRP A 380 -5.733 6.107 9.165 1.00 9.48 C +ATOM 3063 CH2 TRP A 380 -5.946 6.080 10.545 1.00 9.45 C +ATOM 3064 N LEU A 381 -8.424 8.689 7.183 1.00 7.82 N +ATOM 3065 CA LEU A 381 -9.068 7.392 6.973 1.00 7.73 C +ATOM 3066 C LEU A 381 -10.313 7.477 6.109 1.00 7.81 C +ATOM 3067 O LEU A 381 -10.523 6.616 5.253 1.00 7.68 O +ATOM 3068 CB LEU A 381 -9.435 6.746 8.317 1.00 7.74 C +ATOM 3069 CG LEU A 381 -10.076 5.350 8.285 1.00 7.74 C +ATOM 3070 CD1 LEU A 381 -9.172 4.346 7.580 1.00 7.81 C +ATOM 3071 CD2 LEU A 381 -10.429 4.889 9.698 1.00 7.77 C +ATOM 3072 N ASP A 382 -11.156 8.483 6.344 1.00 7.94 N +ATOM 3073 CA ASP A 382 -12.518 8.435 5.809 1.00 8.11 C +ATOM 3074 C ASP A 382 -13.040 9.688 5.097 1.00 8.25 C +ATOM 3075 O ASP A 382 -14.209 9.723 4.727 1.00 8.30 O +ATOM 3076 CB ASP A 382 -13.499 7.998 6.918 1.00 8.18 C +ATOM 3077 CG ASP A 382 -13.569 8.978 8.087 1.00 8.26 C +ATOM 3078 OD1 ASP A 382 -13.313 10.186 7.883 1.00 8.29 O +ATOM 3079 OD2 ASP A 382 -13.913 8.533 9.211 1.00 8.15 O +ATOM 3080 N SER A 383 -12.196 10.694 4.885 1.00 8.56 N +ATOM 3081 CA SER A 383 -12.671 11.955 4.314 1.00 8.84 C +ATOM 3082 C SER A 383 -12.770 11.913 2.792 1.00 9.09 C +ATOM 3083 O SER A 383 -11.968 11.267 2.121 1.00 9.07 O +ATOM 3084 CB SER A 383 -11.760 13.117 4.713 1.00 8.98 C +ATOM 3085 OG SER A 383 -12.303 14.364 4.286 1.00 9.31 O +ATOM 3086 N VAL A 384 -13.746 12.643 2.256 1.00 9.29 N +ATOM 3087 CA VAL A 384 -13.788 12.934 0.821 1.00 9.64 C +ATOM 3088 C VAL A 384 -12.507 13.627 0.346 1.00 9.74 C +ATOM 3089 O VAL A 384 -12.168 13.564 -0.841 1.00 10.12 O +ATOM 3090 CB VAL A 384 -15.019 13.785 0.421 1.00 9.68 C +ATOM 3091 CG1 VAL A 384 -16.310 13.039 0.723 1.00 9.84 C +ATOM 3092 CG2 VAL A 384 -15.001 15.155 1.095 1.00 9.74 C +ATOM 3093 N ALA A 385 -11.795 14.286 1.258 1.00 10.00 N +ATOM 3094 CA ALA A 385 -10.496 14.860 0.938 1.00 10.37 C +ATOM 3095 C ALA A 385 -9.593 15.001 2.166 1.00 10.68 C +ATOM 3096 O ALA A 385 -9.991 15.577 3.179 1.00 10.64 O +ATOM 3097 CB ALA A 385 -10.689 16.216 0.271 1.00 10.38 C +ATOM 3098 N TYR A 386 -8.371 14.477 2.063 1.00 11.11 N +ATOM 3099 CA TYR A 386 -7.327 14.761 3.043 1.00 11.97 C +ATOM 3100 C TYR A 386 -5.998 15.015 2.318 1.00 12.42 C +ATOM 3101 O TYR A 386 -5.585 14.187 1.512 1.00 12.73 O +ATOM 3102 CB TYR A 386 -7.164 13.624 4.058 1.00 12.02 C +ATOM 3103 CG TYR A 386 -6.252 14.017 5.206 1.00 12.18 C +ATOM 3104 CD1 TYR A 386 -6.708 14.852 6.221 1.00 12.41 C +ATOM 3105 CD2 TYR A 386 -4.927 13.589 5.256 1.00 12.50 C +ATOM 3106 CE1 TYR A 386 -5.882 15.236 7.264 1.00 12.80 C +ATOM 3107 CE2 TYR A 386 -4.093 13.966 6.297 1.00 12.72 C +ATOM 3108 CZ TYR A 386 -4.572 14.789 7.297 1.00 13.00 C +ATOM 3109 OH TYR A 386 -3.751 15.177 8.339 1.00 14.02 O +ATOM 3110 N PRO A 387 -5.345 16.155 2.568 1.00 13.71 N +ATOM 3111 CA PRO A 387 -5.854 17.225 3.433 1.00 14.02 C +ATOM 3112 C PRO A 387 -7.162 17.828 2.911 1.00 14.13 C +ATOM 3113 O PRO A 387 -7.496 17.657 1.736 1.00 13.86 O +ATOM 3114 CB PRO A 387 -4.718 18.260 3.432 1.00 14.29 C +ATOM 3115 CG PRO A 387 -3.865 17.925 2.263 1.00 14.31 C +ATOM 3116 CD PRO A 387 -3.994 16.449 2.060 1.00 14.10 C +ATOM 3117 N THR A 388 -7.895 18.511 3.786 1.00 14.80 N +ATOM 3118 CA THR A 388 -9.260 18.947 3.470 1.00 15.32 C +ATOM 3119 C THR A 388 -9.327 19.995 2.362 1.00 16.05 C +ATOM 3120 O THR A 388 -10.378 20.166 1.742 1.00 16.15 O +ATOM 3121 CB THR A 388 -9.992 19.491 4.711 1.00 15.67 C +ATOM 3122 OG1 THR A 388 -9.245 20.572 5.278 1.00 15.96 O +ATOM 3123 CG2 THR A 388 -10.180 18.390 5.738 1.00 15.63 C +ATOM 3124 N ASP A 389 -8.213 20.684 2.121 1.00 16.84 N +ATOM 3125 CA ASP A 389 -8.124 21.704 1.071 1.00 17.68 C +ATOM 3126 C ASP A 389 -7.555 21.183 -0.259 1.00 17.58 C +ATOM 3127 O ASP A 389 -7.390 21.954 -1.203 1.00 16.98 O +ATOM 3128 CB ASP A 389 -7.300 22.905 1.566 1.00 18.69 C +ATOM 3129 CG ASP A 389 -5.866 22.539 1.944 1.00 19.74 C +ATOM 3130 OD1 ASP A 389 -5.548 21.338 2.030 1.00 20.80 O +ATOM 3131 OD2 ASP A 389 -5.046 23.461 2.162 1.00 21.54 O +ATOM 3132 N ALA A 390 -7.255 19.885 -0.334 1.00 17.44 N +ATOM 3133 CA ALA A 390 -6.704 19.295 -1.548 1.00 17.94 C +ATOM 3134 C ALA A 390 -7.814 18.914 -2.514 1.00 18.53 C +ATOM 3135 O ALA A 390 -8.968 18.750 -2.119 1.00 18.47 O +ATOM 3136 CB ALA A 390 -5.859 18.078 -1.209 1.00 17.87 C +ATOM 3137 N ASP A 391 -7.445 18.760 -3.780 1.00 19.77 N +ATOM 3138 CA ASP A 391 -8.382 18.427 -4.844 1.00 20.81 C +ATOM 3139 C ASP A 391 -8.605 16.911 -4.894 1.00 20.98 C +ATOM 3140 O ASP A 391 -7.650 16.170 -5.103 1.00 19.85 O +ATOM 3141 CB ASP A 391 -7.800 18.914 -6.174 1.00 21.67 C +ATOM 3142 CG ASP A 391 -8.798 18.861 -7.318 1.00 22.73 C +ATOM 3143 OD1 ASP A 391 -9.870 18.227 -7.181 1.00 23.75 O +ATOM 3144 OD2 ASP A 391 -8.493 19.459 -8.369 1.00 24.40 O +ATOM 3145 N PRO A 392 -9.861 16.442 -4.719 1.00 21.56 N +ATOM 3146 CA PRO A 392 -10.134 15.000 -4.854 1.00 21.53 C +ATOM 3147 C PRO A 392 -9.790 14.399 -6.228 1.00 21.47 C +ATOM 3148 O PRO A 392 -9.615 13.182 -6.330 1.00 22.07 O +ATOM 3149 CB PRO A 392 -11.642 14.897 -4.587 1.00 22.05 C +ATOM 3150 CG PRO A 392 -11.965 16.094 -3.770 1.00 21.99 C +ATOM 3151 CD PRO A 392 -11.061 17.178 -4.276 1.00 21.98 C +ATOM 3152 N SER A 393 -9.694 15.240 -7.261 1.00 20.45 N +ATOM 3153 CA SER A 393 -9.184 14.821 -8.577 1.00 20.01 C +ATOM 3154 C SER A 393 -7.731 14.363 -8.539 1.00 18.65 C +ATOM 3155 O SER A 393 -7.275 13.669 -9.449 1.00 18.69 O +ATOM 3156 CB SER A 393 -9.289 15.960 -9.595 1.00 20.96 C +ATOM 3157 OG SER A 393 -10.629 16.198 -9.959 1.00 22.09 O +ATOM 3158 N THR A 394 -6.993 14.793 -7.523 1.00 16.62 N +ATOM 3159 CA THR A 394 -5.622 14.356 -7.338 1.00 15.57 C +ATOM 3160 C THR A 394 -5.645 12.966 -6.710 1.00 14.26 C +ATOM 3161 O THR A 394 -6.258 12.779 -5.660 1.00 13.80 O +ATOM 3162 CB THR A 394 -4.856 15.318 -6.419 1.00 15.74 C +ATOM 3163 OG1 THR A 394 -4.940 16.648 -6.946 1.00 16.52 O +ATOM 3164 CG2 THR A 394 -3.396 14.906 -6.300 1.00 15.90 C +ATOM 3165 N PRO A 395 -4.994 11.982 -7.353 1.00 13.36 N +ATOM 3166 CA PRO A 395 -4.949 10.644 -6.770 1.00 12.79 C +ATOM 3167 C PRO A 395 -4.384 10.637 -5.350 1.00 11.87 C +ATOM 3168 O PRO A 395 -3.361 11.274 -5.089 1.00 11.65 O +ATOM 3169 CB PRO A 395 -4.019 9.884 -7.712 1.00 13.12 C +ATOM 3170 CG PRO A 395 -4.187 10.567 -9.027 1.00 13.40 C +ATOM 3171 CD PRO A 395 -4.364 12.017 -8.686 1.00 13.33 C +ATOM 3172 N GLY A 396 -5.060 9.924 -4.452 1.00 11.16 N +ATOM 3173 CA GLY A 396 -4.623 9.784 -3.066 1.00 10.67 C +ATOM 3174 C GLY A 396 -5.300 10.718 -2.082 1.00 10.35 C +ATOM 3175 O GLY A 396 -5.155 10.554 -0.869 1.00 10.14 O +ATOM 3176 N VAL A 397 -6.040 11.698 -2.588 1.00 9.93 N +ATOM 3177 CA VAL A 397 -6.681 12.684 -1.722 1.00 9.69 C +ATOM 3178 C VAL A 397 -7.960 12.149 -1.059 1.00 9.46 C +ATOM 3179 O VAL A 397 -8.145 12.334 0.145 1.00 9.40 O +ATOM 3180 CB VAL A 397 -6.951 13.999 -2.493 1.00 9.62 C +ATOM 3181 CG1 VAL A 397 -7.921 14.901 -1.735 1.00 9.56 C +ATOM 3182 CG2 VAL A 397 -5.634 14.720 -2.745 1.00 9.68 C +ATOM 3183 N ALA A 398 -8.836 11.497 -1.824 1.00 9.42 N +ATOM 3184 CA ALA A 398 -10.094 10.958 -1.283 1.00 9.34 C +ATOM 3185 C ALA A 398 -9.871 9.616 -0.588 1.00 9.16 C +ATOM 3186 O ALA A 398 -9.215 8.732 -1.141 1.00 9.52 O +ATOM 3187 CB ALA A 398 -11.132 10.808 -2.392 1.00 9.39 C +ATOM 3188 N ARG A 399 -10.399 9.468 0.625 1.00 9.00 N +ATOM 3189 CA ARG A 399 -10.257 8.210 1.373 1.00 8.95 C +ATOM 3190 C ARG A 399 -11.574 7.585 1.830 1.00 8.63 C +ATOM 3191 O ARG A 399 -11.597 6.431 2.241 1.00 8.13 O +ATOM 3192 CB ARG A 399 -9.343 8.412 2.579 1.00 9.26 C +ATOM 3193 CG ARG A 399 -7.922 8.832 2.214 1.00 9.52 C +ATOM 3194 CD ARG A 399 -7.715 10.282 2.566 1.00 9.68 C +ATOM 3195 NE ARG A 399 -6.451 10.821 2.069 1.00 9.62 N +ATOM 3196 CZ ARG A 399 -5.246 10.589 2.590 1.00 9.50 C +ATOM 3197 NH1 ARG A 399 -5.087 9.788 3.645 1.00 9.54 N +ATOM 3198 NH2 ARG A 399 -4.181 11.180 2.056 1.00 9.65 N +ATOM 3199 N GLY A 400 -12.661 8.344 1.757 1.00 8.62 N +ATOM 3200 CA GLY A 400 -13.982 7.852 2.128 1.00 8.82 C +ATOM 3201 C GLY A 400 -15.032 8.881 1.774 1.00 9.05 C +ATOM 3202 O GLY A 400 -14.760 9.808 1.016 1.00 8.92 O +ATOM 3203 N THR A 401 -16.227 8.723 2.331 1.00 9.25 N +ATOM 3204 CA THR A 401 -17.366 9.572 1.996 1.00 9.65 C +ATOM 3205 C THR A 401 -17.679 10.620 3.073 1.00 9.93 C +ATOM 3206 O THR A 401 -18.648 11.371 2.943 1.00 9.84 O +ATOM 3207 CB THR A 401 -18.623 8.714 1.769 1.00 9.68 C +ATOM 3208 OG1 THR A 401 -18.978 8.048 2.988 1.00 9.87 O +ATOM 3209 CG2 THR A 401 -18.378 7.684 0.673 1.00 9.80 C +ATOM 3210 N CYS A 402 -16.864 10.692 4.124 1.00 10.33 N +ATOM 3211 CA CYS A 402 -17.151 11.606 5.230 1.00 10.56 C +ATOM 3212 C CYS A 402 -16.808 13.040 4.846 1.00 11.17 C +ATOM 3213 O CYS A 402 -15.843 13.287 4.128 1.00 10.98 O +ATOM 3214 CB CYS A 402 -16.376 11.200 6.484 1.00 10.62 C +ATOM 3215 SG CYS A 402 -16.760 9.528 7.053 1.00 10.58 S +ATOM 3216 N SER A 403 -17.595 13.991 5.333 1.00 11.85 N +ATOM 3217 CA SER A 403 -17.321 15.394 5.047 1.00 12.50 C +ATOM 3218 C SER A 403 -16.013 15.832 5.696 1.00 12.57 C +ATOM 3219 O SER A 403 -15.545 15.219 6.666 1.00 12.43 O +ATOM 3220 CB SER A 403 -18.465 16.281 5.538 1.00 13.04 C +ATOM 3221 OG SER A 403 -18.418 16.443 6.939 1.00 14.25 O +ATOM 3222 N THR A 404 -15.433 16.902 5.161 1.00 12.87 N +ATOM 3223 CA THR A 404 -14.196 17.460 5.700 1.00 13.12 C +ATOM 3224 C THR A 404 -14.363 18.072 7.093 1.00 13.21 C +ATOM 3225 O THR A 404 -13.368 18.329 7.764 1.00 13.27 O +ATOM 3226 CB THR A 404 -13.623 18.550 4.774 1.00 13.47 C +ATOM 3227 OG1 THR A 404 -14.628 19.543 4.530 1.00 13.88 O +ATOM 3228 CG2 THR A 404 -13.158 17.946 3.457 1.00 13.48 C +ATOM 3229 N THR A 405 -15.608 18.321 7.504 1.00 13.38 N +ATOM 3230 CA THR A 405 -15.908 18.858 8.830 1.00 13.58 C +ATOM 3231 C THR A 405 -16.300 17.764 9.832 1.00 13.36 C +ATOM 3232 O THR A 405 -16.711 18.065 10.955 1.00 13.67 O +ATOM 3233 CB THR A 405 -17.051 19.892 8.750 1.00 14.06 C +ATOM 3234 OG1 THR A 405 -18.230 19.260 8.240 1.00 14.63 O +ATOM 3235 CG2 THR A 405 -16.666 21.052 7.842 1.00 14.45 C +ATOM 3236 N SER A 406 -16.158 16.501 9.435 1.00 12.72 N +ATOM 3237 CA SER A 406 -16.581 15.371 10.256 1.00 12.50 C +ATOM 3238 C SER A 406 -15.505 14.947 11.253 1.00 12.30 C +ATOM 3239 O SER A 406 -14.332 15.278 11.102 1.00 12.36 O +ATOM 3240 CB SER A 406 -16.938 14.179 9.359 1.00 12.46 C +ATOM 3241 OG SER A 406 -15.770 13.584 8.819 1.00 12.13 O +ATOM 3242 N GLY A 407 -15.923 14.211 12.275 1.00 12.56 N +ATOM 3243 CA GLY A 407 -14.994 13.576 13.208 1.00 12.51 C +ATOM 3244 C GLY A 407 -14.308 14.447 14.249 1.00 12.77 C +ATOM 3245 O GLY A 407 -13.357 14.000 14.882 1.00 12.33 O +ATOM 3246 N VAL A 408 -14.779 15.675 14.459 1.00 13.07 N +ATOM 3247 CA VAL A 408 -14.220 16.509 15.526 1.00 13.52 C +ATOM 3248 C VAL A 408 -14.583 15.855 16.865 1.00 13.89 C +ATOM 3249 O VAL A 408 -15.759 15.591 17.105 1.00 14.13 O +ATOM 3250 CB VAL A 408 -14.770 17.951 15.478 1.00 13.64 C +ATOM 3251 CG1 VAL A 408 -14.265 18.763 16.664 1.00 13.79 C +ATOM 3252 CG2 VAL A 408 -14.394 18.626 14.164 1.00 13.75 C +ATOM 3253 N PRO A 409 -13.583 15.577 17.730 1.00 14.37 N +ATOM 3254 CA PRO A 409 -13.882 14.860 18.977 1.00 14.86 C +ATOM 3255 C PRO A 409 -15.046 15.425 19.793 1.00 15.58 C +ATOM 3256 O PRO A 409 -15.921 14.672 20.214 1.00 15.65 O +ATOM 3257 CB PRO A 409 -12.575 14.969 19.758 1.00 14.75 C +ATOM 3258 CG PRO A 409 -11.532 14.986 18.701 1.00 14.61 C +ATOM 3259 CD PRO A 409 -12.129 15.732 17.536 1.00 14.45 C +ATOM 3260 N SER A 410 -15.065 16.740 19.993 1.00 16.42 N +ATOM 3261 CA SER A 410 -16.124 17.370 20.785 1.00 17.47 C +ATOM 3262 C SER A 410 -17.506 17.174 20.161 1.00 17.75 C +ATOM 3263 O SER A 410 -18.508 17.106 20.878 1.00 18.50 O +ATOM 3264 CB SER A 410 -15.830 18.860 20.988 1.00 17.83 C +ATOM 3265 OG SER A 410 -15.766 19.546 19.753 1.00 18.46 O +ATOM 3266 N ASP A 411 -17.562 17.082 18.832 1.00 17.75 N +ATOM 3267 CA ASP A 411 -18.813 16.781 18.131 1.00 17.86 C +ATOM 3268 C ASP A 411 -19.196 15.310 18.313 1.00 17.32 C +ATOM 3269 O ASP A 411 -20.268 15.001 18.834 1.00 17.47 O +ATOM 3270 CB ASP A 411 -18.704 17.104 16.632 1.00 18.72 C +ATOM 3271 CG ASP A 411 -18.552 18.598 16.345 1.00 19.41 C +ATOM 3272 OD1 ASP A 411 -18.844 19.435 17.226 1.00 20.44 O +ATOM 3273 OD2 ASP A 411 -18.152 18.940 15.214 1.00 20.03 O +ATOM 3274 N ILE A 412 -18.313 14.403 17.897 1.00 16.74 N +ATOM 3275 CA ILE A 412 -18.664 12.979 17.845 1.00 16.28 C +ATOM 3276 C ILE A 412 -18.751 12.290 19.206 1.00 16.43 C +ATOM 3277 O ILE A 412 -19.477 11.312 19.344 1.00 16.15 O +ATOM 3278 CB ILE A 412 -17.758 12.165 16.886 1.00 16.01 C +ATOM 3279 CG1 ILE A 412 -16.291 12.189 17.328 1.00 15.80 C +ATOM 3280 CG2 ILE A 412 -17.916 12.671 15.455 1.00 16.22 C +ATOM 3281 CD1 ILE A 412 -15.422 11.205 16.574 1.00 15.62 C +ATOM 3282 N GLU A 413 -18.045 12.801 20.213 1.00 16.67 N +ATOM 3283 CA GLU A 413 -18.196 12.270 21.573 1.00 17.22 C +ATOM 3284 C GLU A 413 -19.604 12.499 22.142 1.00 18.24 C +ATOM 3285 O GLU A 413 -20.019 11.800 23.065 1.00 18.54 O +ATOM 3286 CB GLU A 413 -17.122 12.822 22.505 1.00 16.85 C +ATOM 3287 CG GLU A 413 -15.758 12.201 22.244 1.00 16.60 C +ATOM 3288 CD GLU A 413 -14.617 12.939 22.909 1.00 16.52 C +ATOM 3289 OE1 GLU A 413 -14.870 13.709 23.860 1.00 16.71 O +ATOM 3290 OE2 GLU A 413 -13.460 12.737 22.486 1.00 16.02 O +ATOM 3291 N ASER A 414 -20.319 13.479 21.592 0.50 18.73 N +ATOM 3292 N BSER A 414 -20.323 13.474 21.590 0.50 18.76 N +ATOM 3293 CA ASER A 414 -21.728 13.681 21.906 0.50 19.46 C +ATOM 3294 CA BSER A 414 -21.731 13.674 21.910 0.50 19.45 C +ATOM 3295 C ASER A 414 -22.609 12.904 20.930 0.50 19.62 C +ATOM 3296 C BSER A 414 -22.620 12.910 20.931 0.50 19.63 C +ATOM 3297 O ASER A 414 -23.368 12.018 21.334 0.50 20.32 O +ATOM 3298 O BSER A 414 -23.396 12.039 21.333 0.50 20.35 O +ATOM 3299 CB ASER A 414 -22.071 15.168 21.849 0.50 19.64 C +ATOM 3300 CB BSER A 414 -22.067 15.162 21.877 0.50 19.62 C +ATOM 3301 OG ASER A 414 -23.443 15.376 22.126 0.50 19.97 O +ATOM 3302 OG BSER A 414 -21.446 15.838 22.955 0.50 19.90 O +ATOM 3303 N SER A 415 -22.484 13.225 19.644 1.00 19.37 N +ATOM 3304 CA SER A 415 -23.363 12.671 18.604 1.00 19.18 C +ATOM 3305 C SER A 415 -23.225 11.163 18.347 1.00 18.54 C +ATOM 3306 O SER A 415 -24.153 10.542 17.825 1.00 19.14 O +ATOM 3307 CB SER A 415 -23.173 13.432 17.284 1.00 19.33 C +ATOM 3308 OG SER A 415 -21.931 13.125 16.672 1.00 19.57 O +ATOM 3309 N ALA A 416 -22.078 10.584 18.699 1.00 17.32 N +ATOM 3310 CA ALA A 416 -21.830 9.153 18.496 1.00 16.80 C +ATOM 3311 C ALA A 416 -21.422 8.463 19.796 1.00 16.28 C +ATOM 3312 O ALA A 416 -20.651 7.498 19.785 1.00 15.84 O +ATOM 3313 CB ALA A 416 -20.761 8.953 17.432 1.00 16.92 C +ATOM 3314 N ALA A 417 -21.968 8.939 20.913 1.00 15.80 N +ATOM 3315 CA ALA A 417 -21.624 8.406 22.229 1.00 15.67 C +ATOM 3316 C ALA A 417 -21.908 6.910 22.371 1.00 15.50 C +ATOM 3317 O ALA A 417 -21.243 6.238 23.148 1.00 16.01 O +ATOM 3318 CB ALA A 417 -22.349 9.181 23.322 1.00 15.77 C +ATOM 3319 N SER A 418 -22.885 6.392 21.625 1.00 14.84 N +ATOM 3320 CA SER A 418 -23.230 4.965 21.686 1.00 14.51 C +ATOM 3321 C SER A 418 -22.365 4.080 20.785 1.00 13.17 C +ATOM 3322 O SER A 418 -22.584 2.873 20.716 1.00 13.08 O +ATOM 3323 CB SER A 418 -24.697 4.757 21.311 1.00 15.19 C +ATOM 3324 OG SER A 418 -25.539 5.538 22.133 1.00 16.54 O +ATOM 3325 N ALA A 419 -21.388 4.663 20.098 1.00 12.11 N +ATOM 3326 CA ALA A 419 -20.546 3.888 19.195 1.00 11.38 C +ATOM 3327 C ALA A 419 -19.761 2.812 19.948 1.00 10.70 C +ATOM 3328 O ALA A 419 -19.461 2.961 21.136 1.00 10.50 O +ATOM 3329 CB ALA A 419 -19.605 4.803 18.438 1.00 11.38 C +ATOM 3330 N TYR A 420 -19.465 1.723 19.247 1.00 10.01 N +ATOM 3331 CA TYR A 420 -18.771 0.573 19.814 1.00 9.79 C +ATOM 3332 C TYR A 420 -18.168 -0.249 18.677 1.00 9.09 C +ATOM 3333 O TYR A 420 -18.536 -0.075 17.516 1.00 8.68 O +ATOM 3334 CB TYR A 420 -19.754 -0.302 20.598 1.00 10.25 C +ATOM 3335 CG TYR A 420 -20.702 -1.033 19.680 1.00 10.85 C +ATOM 3336 CD1 TYR A 420 -21.811 -0.391 19.145 1.00 11.21 C +ATOM 3337 CD2 TYR A 420 -20.455 -2.350 19.296 1.00 11.22 C +ATOM 3338 CE1 TYR A 420 -22.664 -1.048 18.272 1.00 11.57 C +ATOM 3339 CE2 TYR A 420 -21.299 -3.013 18.420 1.00 11.69 C +ATOM 3340 CZ TYR A 420 -22.404 -2.358 17.918 1.00 11.87 C +ATOM 3341 OH TYR A 420 -23.239 -3.016 17.047 1.00 12.64 O +ATOM 3342 N VAL A 421 -17.255 -1.153 19.018 1.00 8.55 N +ATOM 3343 CA VAL A 421 -16.719 -2.124 18.063 1.00 8.36 C +ATOM 3344 C VAL A 421 -16.675 -3.476 18.771 1.00 8.28 C +ATOM 3345 O VAL A 421 -16.518 -3.533 19.990 1.00 8.28 O +ATOM 3346 CB VAL A 421 -15.312 -1.719 17.548 1.00 8.26 C +ATOM 3347 CG1 VAL A 421 -14.297 -1.672 18.688 1.00 8.17 C +ATOM 3348 CG2 VAL A 421 -14.833 -2.649 16.436 1.00 8.26 C +ATOM 3349 N ILE A 422 -16.854 -4.556 18.018 1.00 8.31 N +ATOM 3350 CA ILE A 422 -16.680 -5.905 18.562 1.00 8.41 C +ATOM 3351 C ILE A 422 -15.719 -6.673 17.676 1.00 8.32 C +ATOM 3352 O ILE A 422 -15.955 -6.805 16.474 1.00 8.39 O +ATOM 3353 CB ILE A 422 -18.007 -6.688 18.662 1.00 8.67 C +ATOM 3354 CG1 ILE A 422 -19.013 -5.918 19.523 1.00 8.85 C +ATOM 3355 CG2 ILE A 422 -17.753 -8.090 19.218 1.00 8.77 C +ATOM 3356 CD1 ILE A 422 -20.392 -6.549 19.582 1.00 8.97 C +ATOM 3357 N TYR A 423 -14.642 -7.164 18.281 1.00 8.18 N +ATOM 3358 CA TYR A 423 -13.696 -8.062 17.625 1.00 8.26 C +ATOM 3359 C TYR A 423 -13.981 -9.457 18.145 1.00 8.40 C +ATOM 3360 O TYR A 423 -14.169 -9.645 19.353 1.00 8.30 O +ATOM 3361 CB TYR A 423 -12.254 -7.695 17.963 1.00 8.23 C +ATOM 3362 CG TYR A 423 -11.894 -6.253 17.719 1.00 8.20 C +ATOM 3363 CD1 TYR A 423 -11.745 -5.769 16.426 1.00 8.34 C +ATOM 3364 CD2 TYR A 423 -11.695 -5.379 18.780 1.00 8.27 C +ATOM 3365 CE1 TYR A 423 -11.417 -4.446 16.194 1.00 8.20 C +ATOM 3366 CE2 TYR A 423 -11.367 -4.055 18.557 1.00 8.22 C +ATOM 3367 CZ TYR A 423 -11.226 -3.599 17.262 1.00 8.25 C +ATOM 3368 OH TYR A 423 -10.898 -2.285 17.036 1.00 8.45 O +ATOM 3369 N SER A 424 -14.016 -10.441 17.258 1.00 8.50 N +ATOM 3370 CA SER A 424 -14.272 -11.802 17.711 1.00 8.89 C +ATOM 3371 C SER A 424 -13.587 -12.852 16.860 1.00 9.15 C +ATOM 3372 O SER A 424 -13.108 -12.578 15.755 1.00 9.08 O +ATOM 3373 CB SER A 424 -15.781 -12.066 17.773 1.00 8.92 C +ATOM 3374 OG SER A 424 -16.388 -11.920 16.504 1.00 9.12 O +ATOM 3375 N ASN A 425 -13.511 -14.055 17.416 1.00 9.58 N +ATOM 3376 CA ASN A 425 -13.056 -15.226 16.681 1.00 10.08 C +ATOM 3377 C ASN A 425 -11.695 -15.030 16.023 1.00 9.64 C +ATOM 3378 O ASN A 425 -11.519 -15.262 14.823 1.00 9.40 O +ATOM 3379 CB ASN A 425 -14.116 -15.639 15.654 1.00 10.88 C +ATOM 3380 CG ASN A 425 -15.445 -15.985 16.302 1.00 11.99 C +ATOM 3381 OD1 ASN A 425 -15.483 -16.642 17.345 1.00 13.28 O +ATOM 3382 ND2 ASN A 425 -16.543 -15.543 15.691 1.00 12.81 N +ATOM 3383 N ILE A 426 -10.734 -14.594 16.830 1.00 9.52 N +ATOM 3384 CA ILE A 426 -9.365 -14.429 16.375 1.00 9.57 C +ATOM 3385 C ILE A 426 -8.766 -15.797 16.087 1.00 9.61 C +ATOM 3386 O ILE A 426 -8.862 -16.713 16.913 1.00 9.45 O +ATOM 3387 CB ILE A 426 -8.514 -13.694 17.429 1.00 9.50 C +ATOM 3388 CG1 ILE A 426 -8.988 -12.244 17.553 1.00 9.54 C +ATOM 3389 CG2 ILE A 426 -7.035 -13.733 17.066 1.00 9.54 C +ATOM 3390 CD1 ILE A 426 -8.561 -11.559 18.828 1.00 9.64 C +ATOM 3391 N LYS A 427 -8.167 -15.936 14.908 1.00 10.04 N +ATOM 3392 CA LYS A 427 -7.531 -17.188 14.499 1.00 10.49 C +ATOM 3393 C LYS A 427 -6.201 -16.889 13.838 1.00 10.30 C +ATOM 3394 O LYS A 427 -6.095 -15.932 13.067 1.00 10.25 O +ATOM 3395 CB LYS A 427 -8.416 -17.952 13.511 1.00 11.28 C +ATOM 3396 CG LYS A 427 -9.806 -18.275 14.034 1.00 11.96 C +ATOM 3397 CD LYS A 427 -10.707 -18.848 12.955 1.00 12.94 C +ATOM 3398 CE LYS A 427 -10.311 -20.257 12.566 1.00 13.71 C +ATOM 3399 NZ LYS A 427 -11.315 -20.874 11.654 1.00 14.53 N +ATOM 3400 N AVAL A 428 -5.200 -17.714 14.137 0.50 10.14 N +ATOM 3401 N BVAL A 428 -5.185 -17.688 14.151 0.50 10.15 N +ATOM 3402 CA AVAL A 428 -3.871 -17.584 13.554 0.50 10.18 C +ATOM 3403 CA BVAL A 428 -3.885 -17.566 13.500 0.50 10.20 C +ATOM 3404 C AVAL A 428 -3.390 -18.951 13.080 0.50 10.35 C +ATOM 3405 C BVAL A 428 -3.390 -18.939 13.076 0.50 10.36 C +ATOM 3406 O AVAL A 428 -3.659 -19.964 13.726 0.50 10.49 O +ATOM 3407 O BVAL A 428 -3.643 -19.938 13.751 0.50 10.51 O +ATOM 3408 CB AVAL A 428 -2.866 -17.018 14.572 0.50 10.19 C +ATOM 3409 CB BVAL A 428 -2.831 -16.907 14.409 0.50 10.22 C +ATOM 3410 CG1AVAL A 428 -1.512 -16.799 13.912 0.50 10.13 C +ATOM 3411 CG1BVAL A 428 -3.325 -15.559 14.911 0.50 10.23 C +ATOM 3412 CG2AVAL A 428 -3.392 -15.721 15.169 0.50 10.21 C +ATOM 3413 CG2BVAL A 428 -2.478 -17.822 15.566 0.50 10.17 C +ATOM 3414 N GLY A 429 -2.695 -18.983 11.948 1.00 10.31 N +ATOM 3415 CA GLY A 429 -2.180 -20.240 11.414 1.00 10.56 C +ATOM 3416 C GLY A 429 -1.549 -20.083 10.049 1.00 10.72 C +ATOM 3417 O GLY A 429 -1.412 -18.967 9.546 1.00 10.29 O +ATOM 3418 N PRO A 430 -1.154 -21.204 9.431 1.00 10.96 N +ATOM 3419 CA PRO A 430 -0.601 -21.158 8.079 1.00 11.27 C +ATOM 3420 C PRO A 430 -1.561 -20.548 7.061 1.00 11.58 C +ATOM 3421 O PRO A 430 -2.757 -20.406 7.333 1.00 11.27 O +ATOM 3422 CB PRO A 430 -0.341 -22.634 7.747 1.00 11.19 C +ATOM 3423 CG PRO A 430 -0.262 -23.327 9.060 1.00 11.24 C +ATOM 3424 CD PRO A 430 -1.161 -22.570 9.988 1.00 11.09 C +ATOM 3425 N ILE A 431 -1.034 -20.215 5.888 1.00 12.52 N +ATOM 3426 CA ILE A 431 -1.834 -19.618 4.830 1.00 13.59 C +ATOM 3427 C ILE A 431 -3.010 -20.537 4.485 1.00 14.40 C +ATOM 3428 O ILE A 431 -2.828 -21.740 4.288 1.00 14.60 O +ATOM 3429 CB ILE A 431 -0.995 -19.334 3.562 1.00 13.90 C +ATOM 3430 CG1 ILE A 431 0.193 -18.410 3.874 1.00 14.21 C +ATOM 3431 CG2 ILE A 431 -1.866 -18.740 2.463 1.00 14.11 C +ATOM 3432 CD1 ILE A 431 -0.143 -17.208 4.726 1.00 13.97 C +ATOM 3433 N ASN A 432 -4.197 -19.941 4.417 1.00 15.43 N +ATOM 3434 CA ASN A 432 -5.471 -20.620 4.146 1.00 16.21 C +ATOM 3435 C ASN A 432 -5.963 -21.623 5.201 1.00 15.68 C +ATOM 3436 O ASN A 432 -6.834 -22.445 4.916 1.00 16.85 O +ATOM 3437 CB ASN A 432 -5.455 -21.240 2.736 1.00 17.80 C +ATOM 3438 CG ASN A 432 -5.337 -20.187 1.646 1.00 19.67 C +ATOM 3439 OD1 ASN A 432 -5.509 -18.992 1.901 1.00 19.41 O +ATOM 3440 ND2 ASN A 432 -5.046 -20.622 0.427 1.00 22.87 N +ATOM 3441 N SER A 433 -5.453 -21.514 6.424 1.00 14.65 N +ATOM 3442 CA SER A 433 -5.849 -22.400 7.522 1.00 13.97 C +ATOM 3443 C SER A 433 -7.028 -21.877 8.343 1.00 13.73 C +ATOM 3444 O SER A 433 -7.664 -22.640 9.062 1.00 13.40 O +ATOM 3445 CB SER A 433 -4.677 -22.607 8.477 1.00 13.69 C +ATOM 3446 OG SER A 433 -4.329 -21.402 9.140 1.00 13.49 O +ATOM 3447 N THR A 434 -7.291 -20.576 8.263 1.00 13.39 N +ATOM 3448 CA THR A 434 -8.189 -19.921 9.208 1.00 13.33 C +ATOM 3449 C THR A 434 -9.555 -19.589 8.629 1.00 13.84 C +ATOM 3450 O THR A 434 -10.432 -19.122 9.356 1.00 14.13 O +ATOM 3451 CB THR A 434 -7.576 -18.605 9.707 1.00 13.10 C +ATOM 3452 OG1 THR A 434 -7.471 -17.689 8.610 1.00 12.67 O +ATOM 3453 CG2 THR A 434 -6.200 -18.848 10.312 1.00 13.18 C +ATOM 3454 N PHE A 435 -9.736 -19.815 7.333 1.00 14.50 N +ATOM 3455 CA PHE A 435 -10.978 -19.444 6.676 1.00 15.42 C +ATOM 3456 C PHE A 435 -11.284 -20.339 5.489 1.00 16.57 C +ATOM 3457 O PHE A 435 -10.420 -21.048 4.973 1.00 16.27 O +ATOM 3458 CB PHE A 435 -10.918 -17.982 6.217 1.00 15.30 C +ATOM 3459 CG PHE A 435 -10.037 -17.756 5.017 1.00 14.79 C +ATOM 3460 CD1 PHE A 435 -8.657 -17.792 5.139 1.00 14.65 C +ATOM 3461 CD2 PHE A 435 -10.587 -17.504 3.766 1.00 14.90 C +ATOM 3462 CE1 PHE A 435 -7.841 -17.588 4.042 1.00 14.50 C +ATOM 3463 CE2 PHE A 435 -9.774 -17.293 2.663 1.00 14.84 C +ATOM 3464 CZ PHE A 435 -8.397 -17.335 2.803 1.00 14.68 C +ATOM 3465 N SER A 436 -12.541 -20.287 5.074 1.00 18.60 N +ATOM 3466 CA SER A 436 -12.988 -20.931 3.854 1.00 20.03 C +ATOM 3467 C SER A 436 -14.364 -20.389 3.515 1.00 20.98 C +ATOM 3468 O SER A 436 -14.953 -19.632 4.294 1.00 21.25 O +ATOM 3469 CB SER A 436 -13.042 -22.453 4.015 1.00 20.41 C +ATOM 3470 OG SER A 436 -13.953 -22.822 5.031 1.00 20.88 O +ATOM 3471 N GLY A 437 -14.862 -20.771 2.346 1.00 22.28 N +ATOM 3472 CA GLY A 437 -16.181 -20.349 1.888 1.00 23.45 C +ATOM 3473 C GLY A 437 -16.290 -20.495 0.386 1.00 24.45 C +ATOM 3474 O GLY A 437 -15.400 -21.054 -0.258 1.00 25.07 O +ATOM 3475 N THR A 438 -17.382 -19.983 -0.171 1.00 25.86 N +ATOM 3476 CA THR A 438 -17.604 -20.006 -1.612 1.00 27.14 C +ATOM 3477 C THR A 438 -16.784 -18.899 -2.275 1.00 27.15 C +ATOM 3478 O THR A 438 -16.779 -17.762 -1.813 1.00 25.92 O +ATOM 3479 CB THR A 438 -19.099 -19.812 -1.940 1.00 28.17 C +ATOM 3480 OG1 THR A 438 -19.878 -20.764 -1.202 1.00 29.08 O +ATOM 3481 CG2 THR A 438 -19.362 -19.984 -3.439 1.00 28.73 C +TER 3482 THR A 438 +HETATM 3483 C1 NAG B 1 13.052 13.559 27.887 0.50 16.64 C +HETATM 3484 C2 NAG B 1 14.555 13.364 27.986 0.50 17.70 C +HETATM 3485 C3 NAG B 1 15.191 14.294 29.017 0.50 17.97 C +HETATM 3486 C4 NAG B 1 14.634 15.712 28.956 0.50 18.38 C +HETATM 3487 C5 NAG B 1 13.122 15.684 28.852 0.50 17.87 C +HETATM 3488 C6 NAG B 1 12.577 17.084 28.644 0.50 17.99 C +HETATM 3489 C7 NAG B 1 15.415 11.169 27.425 0.50 18.17 C +HETATM 3490 C8 NAG B 1 15.717 9.777 27.899 0.50 18.22 C +HETATM 3491 N2 NAG B 1 14.880 11.992 28.323 0.50 17.85 N +HETATM 3492 O3 NAG B 1 16.574 14.342 28.768 0.50 18.02 O +HETATM 3493 O4 NAG B 1 14.981 16.434 30.117 0.50 19.18 O +HETATM 3494 O5 NAG B 1 12.792 14.927 27.724 0.50 17.44 O +HETATM 3495 O6 NAG B 1 12.870 17.478 27.323 0.50 18.01 O +HETATM 3496 O7 NAG B 1 15.653 11.504 26.263 0.50 18.40 O +HETATM 3497 C1 NAG B 2 15.950 17.446 29.788 0.50 20.23 C +HETATM 3498 C2 NAG B 2 15.613 18.731 30.539 0.50 20.37 C +HETATM 3499 C3 NAG B 2 16.681 19.799 30.344 0.50 20.77 C +HETATM 3500 C4 NAG B 2 18.063 19.227 30.617 0.50 20.97 C +HETATM 3501 C5 NAG B 2 18.255 17.956 29.800 0.50 21.07 C +HETATM 3502 C6 NAG B 2 19.617 17.329 30.069 0.50 21.38 C +HETATM 3503 C7 NAG B 2 13.308 19.363 30.943 0.50 20.32 C +HETATM 3504 C8 NAG B 2 12.048 19.953 30.384 0.50 20.36 C +HETATM 3505 N2 NAG B 2 14.341 19.278 30.112 0.50 20.45 N +HETATM 3506 O3 NAG B 2 16.418 20.873 31.218 0.50 20.96 O +HETATM 3507 O4 NAG B 2 19.047 20.181 30.277 0.50 21.11 O +HETATM 3508 O5 NAG B 2 17.248 17.021 30.128 0.50 20.72 O +HETATM 3509 O6 NAG B 2 19.511 15.924 30.005 0.50 21.86 O +HETATM 3510 O7 NAG B 2 13.355 18.980 32.111 0.50 20.27 O +HETATM 3511 C2 BGC C 1 -0.988 11.799 4.885 1.00 22.09 C +HETATM 3512 C3 BGC C 1 -0.624 11.000 6.131 1.00 21.69 C +HETATM 3513 C4 BGC C 1 -1.351 9.658 6.164 1.00 21.49 C +HETATM 3514 C5 BGC C 1 -1.320 8.938 4.816 1.00 21.37 C +HETATM 3515 C6 BGC C 1 -2.179 7.676 4.810 1.00 21.00 C +HETATM 3516 C1 BGC C 1 -0.865 10.926 3.642 1.00 22.20 C +HETATM 3517 O1 BGC C 1 -1.201 11.661 2.466 1.00 22.63 O +HETATM 3518 O2 BGC C 1 -0.112 12.923 4.781 1.00 22.73 O +HETATM 3519 O3 BGC C 1 -0.945 11.758 7.307 1.00 21.58 O +HETATM 3520 O4 BGC C 1 -0.702 8.820 7.117 1.00 20.90 O +HETATM 3521 O5 BGC C 1 -1.757 9.822 3.784 1.00 22.02 O +HETATM 3522 O6 BGC C 1 -3.516 7.974 5.227 1.00 20.59 O +HETATM 3523 C2 BGC C 2 -1.018 7.252 8.892 1.00 20.34 C +HETATM 3524 C3 BGC C 2 -1.771 7.003 10.191 1.00 20.51 C +HETATM 3525 C4 BGC C 2 -1.789 8.250 11.068 1.00 20.75 C +HETATM 3526 C5 BGC C 2 -2.258 9.474 10.284 1.00 20.94 C +HETATM 3527 C6 BGC C 2 -2.250 10.763 11.105 1.00 21.49 C +HETATM 3528 C1 BGC C 2 -1.509 8.539 8.247 1.00 20.34 C +HETATM 3529 O2 BGC C 2 -1.200 6.149 7.993 1.00 19.11 O +HETATM 3530 O3 BGC C 2 -1.133 5.943 10.905 1.00 20.54 O +HETATM 3531 O4 BGC C 2 -2.653 8.022 12.185 1.00 21.10 O +HETATM 3532 O5 BGC C 2 -1.410 9.642 9.151 1.00 20.74 O +HETATM 3533 O6 BGC C 2 -0.931 11.038 11.590 1.00 21.82 O +HETATM 3534 C1 NAG A 704 0.532 16.662 45.456 1.00 17.73 C +HETATM 3535 C2 NAG A 704 -0.756 17.162 46.089 1.00 19.12 C +HETATM 3536 C3 NAG A 704 -0.578 17.533 47.556 1.00 19.46 C +HETATM 3537 C4 NAG A 704 0.205 16.460 48.307 1.00 19.53 C +HETATM 3538 C5 NAG A 704 1.451 16.046 47.530 1.00 19.16 C +HETATM 3539 C6 NAG A 704 2.203 14.908 48.215 1.00 19.48 C +HETATM 3540 C7 NAG A 704 -2.427 18.356 44.771 1.00 21.41 C +HETATM 3541 C8 NAG A 704 -2.762 19.604 44.010 1.00 21.88 C +HETATM 3542 N2 NAG A 704 -1.220 18.305 45.326 1.00 20.06 N +HETATM 3543 O3 NAG A 704 -1.857 17.681 48.131 1.00 19.67 O +HETATM 3544 O4 NAG A 704 0.605 16.977 49.554 1.00 19.99 O +HETATM 3545 O5 NAG A 704 1.078 15.624 46.235 1.00 18.06 O +HETATM 3546 O6 NAG A 704 1.329 13.816 48.402 1.00 20.39 O +HETATM 3547 O7 NAG A 704 -3.255 17.454 44.867 1.00 22.86 O +HETATM 3548 C1 NAG A 705 -4.914 -19.708 -0.683 1.00 26.98 C +HETATM 3549 C2 NAG A 705 -4.036 -20.286 -1.787 1.00 29.31 C +HETATM 3550 C3 NAG A 705 -3.919 -19.309 -2.952 1.00 29.94 C +HETATM 3551 C4 NAG A 705 -5.288 -18.783 -3.374 1.00 30.11 C +HETATM 3552 C5 NAG A 705 -6.092 -18.304 -2.166 1.00 29.61 C +HETATM 3553 C6 NAG A 705 -7.501 -17.871 -2.558 1.00 29.90 C +HETATM 3554 C7 NAG A 705 -2.399 -21.801 -0.784 1.00 30.94 C +HETATM 3555 C8 NAG A 705 -1.007 -21.976 -0.250 1.00 31.45 C +HETATM 3556 N2 NAG A 705 -2.720 -20.591 -1.250 1.00 30.06 N +HETATM 3557 O3 NAG A 705 -3.301 -19.949 -4.048 1.00 30.68 O +HETATM 3558 O4 NAG A 705 -5.107 -17.712 -4.274 1.00 30.88 O +HETATM 3559 O5 NAG A 705 -6.175 -19.340 -1.206 1.00 28.02 O +HETATM 3560 O6 NAG A 705 -8.184 -18.945 -3.167 1.00 30.57 O +HETATM 3561 O7 NAG A 705 -3.186 -22.747 -0.775 1.00 31.70 O +HETATM 3562 C1 MAN A 706 -6.554 22.953 20.422 1.00 39.48 C +HETATM 3563 C2 MAN A 706 -7.940 22.646 19.858 1.00 41.34 C +HETATM 3564 C3 MAN A 706 -7.852 21.874 18.545 1.00 41.90 C +HETATM 3565 C4 MAN A 706 -6.826 22.483 17.590 1.00 41.82 C +HETATM 3566 C5 MAN A 706 -5.522 22.846 18.297 1.00 41.85 C +HETATM 3567 C6 MAN A 706 -4.600 23.629 17.365 1.00 42.37 C +HETATM 3568 O2 MAN A 706 -8.654 23.851 19.670 1.00 43.49 O +HETATM 3569 O3 MAN A 706 -9.125 21.860 17.935 1.00 42.13 O +HETATM 3570 O4 MAN A 706 -6.546 21.567 16.552 1.00 42.03 O +HETATM 3571 O5 MAN A 706 -5.795 23.630 19.439 1.00 40.66 O +HETATM 3572 O6 MAN A 706 -3.414 23.983 18.042 1.00 42.95 O +HETATM 3573 C1 GOL A 901 -9.641 7.653 -5.382 1.00 19.62 C +HETATM 3574 O1 GOL A 901 -10.910 7.589 -4.706 1.00 19.93 O +HETATM 3575 C2 GOL A 901 -8.730 8.716 -4.773 1.00 19.52 C +HETATM 3576 O2 GOL A 901 -7.359 8.295 -4.842 1.00 19.16 O +HETATM 3577 C3 GOL A 901 -8.874 10.040 -5.520 1.00 19.49 C +HETATM 3578 O3 GOL A 901 -8.435 11.135 -4.700 1.00 18.80 O +HETATM 3579 C1 GOL A 902 -5.307 3.809 19.932 1.00 32.29 C +HETATM 3580 O1 GOL A 902 -4.970 2.737 19.047 1.00 31.73 O +HETATM 3581 C2 GOL A 902 -4.502 5.046 19.557 1.00 32.75 C +HETATM 3582 O2 GOL A 902 -3.101 4.744 19.598 1.00 32.94 O +HETATM 3583 C3 GOL A 902 -4.825 6.174 20.528 1.00 33.32 C +HETATM 3584 O3 GOL A 902 -3.933 7.269 20.303 1.00 34.37 O +HETATM 3585 C1 GOL A 903 1.436 -5.418 -6.869 1.00 30.82 C +HETATM 3586 O1 GOL A 903 2.747 -5.339 -7.441 1.00 31.23 O +HETATM 3587 C2 GOL A 903 0.738 -6.726 -7.248 1.00 30.53 C +HETATM 3588 O2 GOL A 903 1.671 -7.623 -7.863 1.00 31.41 O +HETATM 3589 C3 GOL A 903 0.128 -7.393 -6.017 1.00 30.33 C +HETATM 3590 O3 GOL A 903 -1.235 -7.783 -6.251 1.00 29.04 O +HETATM 3591 C1 PEG A 911 -21.449 7.124 9.005 1.00 27.68 C +HETATM 3592 O1 PEG A 911 -21.169 8.393 9.598 1.00 26.47 O +HETATM 3593 C2 PEG A 911 -22.776 6.574 9.501 1.00 28.68 C +HETATM 3594 O2 PEG A 911 -22.725 5.148 9.406 1.00 29.98 O +HETATM 3595 C3 PEG A 911 -23.984 4.538 9.106 1.00 30.43 C +HETATM 3596 C4 PEG A 911 -24.039 4.136 7.634 1.00 30.71 C +HETATM 3597 O4 PEG A 911 -23.847 5.282 6.797 1.00 31.40 O +HETATM 3598 C1 PEG A 912 -5.831 8.763 26.464 1.00 34.26 C +HETATM 3599 O1 PEG A 912 -4.437 8.474 26.270 1.00 33.91 O +HETATM 3600 C2 PEG A 912 -6.104 9.131 27.921 1.00 34.39 C +HETATM 3601 O2 PEG A 912 -7.323 8.528 28.362 1.00 34.51 O +HETATM 3602 C3 PEG A 912 -8.471 9.364 28.187 1.00 33.92 C +HETATM 3603 C4 PEG A 912 -9.738 8.566 28.483 1.00 33.68 C +HETATM 3604 O4 PEG A 912 -10.890 9.421 28.484 1.00 33.21 O +HETATM 3605 MG MG A1439 11.994 12.179 30.064 0.50 8.16 MG +HETATM 3606 MG MG A1440 -24.564 1.214 8.861 0.50 9.59 MG +HETATM 3607 O HOH A2001 7.506 2.471 31.538 1.00 10.72 O +HETATM 3608 O HOH A2002 2.181 -5.460 44.755 1.00 27.87 O +HETATM 3609 O HOH A2003 5.647 -4.267 43.892 1.00 33.13 O +HETATM 3610 O BHOH A2004 10.488 0.430 42.142 0.50 17.26 O +HETATM 3611 O HOH A2005 9.077 2.784 44.139 1.00 12.96 O +HETATM 3612 O AHOH A2006 10.978 1.973 42.048 0.50 10.32 O +HETATM 3613 O HOH A2007 -3.765 -5.614 43.614 1.00 29.18 O +HETATM 3614 O HOH A2008 1.774 1.153 45.264 1.00 14.38 O +HETATM 3615 O HOH A2009 3.044 -2.602 44.970 1.00 20.63 O +HETATM 3616 O HOH A2010 -13.068 -5.101 38.837 1.00 40.11 O +HETATM 3617 O HOH A2011 -3.801 -3.434 41.570 1.00 12.54 O +HETATM 3618 O HOH A2012 -0.902 1.518 46.159 1.00 12.43 O +HETATM 3619 O HOH A2013 -3.943 -3.506 49.924 1.00 41.83 O +HETATM 3620 O HOH A2014 0.736 -1.009 48.611 1.00 34.80 O +HETATM 3621 O HOH A2015 -11.921 0.078 43.139 1.00 12.10 O +HETATM 3622 O HOH A2016 -8.344 1.871 40.675 1.00 20.88 O +HETATM 3623 O HOH A2017 -9.701 -5.299 37.600 1.00 13.02 O +HETATM 3624 O HOH A2018 -10.895 -7.017 39.630 1.00 38.65 O +HETATM 3625 O HOH A2019 -11.313 -27.555 5.325 1.00 36.19 O +HETATM 3626 O HOH A2020 -4.673 -7.606 41.580 1.00 21.73 O +HETATM 3627 O HOH A2021 -3.312 -9.187 37.457 1.00 18.80 O +HETATM 3628 O HOH A2022 -0.861 -20.064 25.904 1.00 36.42 O +HETATM 3629 O HOH A2023 -12.152 -7.911 34.849 1.00 25.02 O +HETATM 3630 O HOH A2024 -7.720 -11.196 39.927 1.00 35.28 O +HETATM 3631 O HOH A2025 -6.253 -11.549 35.827 1.00 18.72 O +HETATM 3632 O HOH A2026 -8.489 -13.319 34.721 1.00 33.36 O +HETATM 3633 O HOH A2027 -9.568 -17.081 28.095 1.00 29.42 O +HETATM 3634 O HOH A2028 -12.657 -16.453 27.224 1.00 19.90 O +HETATM 3635 O HOH A2029 -11.136 -17.383 18.493 1.00 16.58 O +HETATM 3636 O HOH A2030 -11.082 -14.322 19.649 1.00 11.63 O +HETATM 3637 O HOH A2031 -14.188 -19.321 25.663 1.00 29.73 O +HETATM 3638 O HOH A2032 -2.744 -15.704 24.736 1.00 19.73 O +HETATM 3639 O HOH A2033 -3.938 -26.310 16.168 1.00 25.69 O +HETATM 3640 O HOH A2034 8.738 17.351 49.580 1.00 32.09 O +HETATM 3641 O HOH A2035 -0.063 -23.433 13.769 1.00 28.52 O +HETATM 3642 O HOH A2036 -5.470 -30.662 10.505 1.00 37.09 O +HETATM 3643 O HOH A2037 -3.031 -29.665 9.377 1.00 32.27 O +HETATM 3644 O HOH A2038 -0.399 -29.073 9.893 1.00 28.35 O +HETATM 3645 O HOH A2039 -3.343 -24.483 4.388 1.00 29.66 O +HETATM 3646 O HOH A2040 -10.758 -29.993 7.010 1.00 27.81 O +HETATM 3647 O HOH A2041 -9.702 -29.591 9.575 1.00 30.62 O +HETATM 3648 O HOH A2042 -10.278 -22.850 10.069 1.00 25.00 O +HETATM 3649 O HOH A2043 -2.255 -27.333 18.655 1.00 28.08 O +HETATM 3650 O HOH A2044 -9.333 -26.631 21.444 1.00 24.74 O +HETATM 3651 O HOH A2045 -20.016 -9.442 16.766 1.00 16.15 O +HETATM 3652 O HOH A2046 -4.652 -21.878 26.907 1.00 22.58 O +HETATM 3653 O HOH A2047 -3.907 -16.713 30.240 1.00 31.46 O +HETATM 3654 O HOH A2048 -2.727 -17.946 26.889 1.00 33.49 O +HETATM 3655 O HOH A2049 7.912 -10.147 34.815 1.00 26.30 O +HETATM 3656 O HOH A2050 9.347 -12.063 28.792 1.00 25.95 O +HETATM 3657 O HOH A2051 1.670 1.579 27.776 1.00 6.74 O +HETATM 3658 O HOH A2052 -2.347 6.636 33.813 1.00 16.44 O +HETATM 3659 O HOH A2053 1.852 5.430 30.494 1.00 17.74 O +HETATM 3660 O HOH A2054 -2.044 7.001 24.622 1.00 29.32 O +HETATM 3661 O HOH A2055 -2.351 11.479 27.595 1.00 38.45 O +HETATM 3662 O HOH A2056 12.623 -19.858 4.377 1.00 42.62 O +HETATM 3663 O HOH A2057 -3.670 9.071 34.929 1.00 29.85 O +HETATM 3664 O HOH A2058 -6.879 2.401 36.993 1.00 16.53 O +HETATM 3665 O HOH A2059 -4.712 9.371 37.562 1.00 17.91 O +HETATM 3666 O HOH A2060 -1.635 3.626 47.957 1.00 25.55 O +HETATM 3667 O HOH A2061 4.547 8.813 46.540 1.00 18.07 O +HETATM 3668 O HOH A2062 11.641 -5.152 23.317 1.00 31.27 O +HETATM 3669 O HOH A2063 -0.603 2.622 50.515 1.00 39.28 O +HETATM 3670 O HOH A2064 5.094 5.534 49.774 1.00 17.75 O +HETATM 3671 O HOH A2065 2.858 0.890 47.856 1.00 26.05 O +HETATM 3672 O HOH A2066 12.302 -9.572 35.366 1.00 30.75 O +HETATM 3673 O HOH A2067 0.912 3.583 52.826 1.00 24.74 O +HETATM 3674 O HOH A2068 -2.264 3.751 52.667 1.00 49.23 O +HETATM 3675 O HOH A2069 4.823 10.220 49.249 1.00 36.54 O +HETATM 3676 O HOH A2070 10.036 -6.208 38.688 1.00 29.28 O +HETATM 3677 O HOH A2071 -1.226 9.660 49.441 1.00 20.91 O +HETATM 3678 O HOH A2072 -5.629 6.557 50.875 1.00 31.68 O +HETATM 3679 O HOH A2073 -4.277 9.378 50.796 1.00 34.67 O +HETATM 3680 O HOH A2074 -8.554 9.671 50.521 1.00 22.47 O +HETATM 3681 O HOH A2075 -5.068 14.209 44.568 1.00 21.62 O +HETATM 3682 O HOH A2076 -2.309 15.564 43.290 1.00 24.50 O +HETATM 3683 O HOH A2077 0.615 10.009 18.238 1.00 24.49 O +HETATM 3684 O HOH A2078 -4.873 13.243 30.039 1.00 27.63 O +HETATM 3685 O HOH A2079 -3.073 17.551 38.627 1.00 32.08 O +HETATM 3686 O HOH A2080 -7.423 10.825 37.824 1.00 28.47 O +HETATM 3687 O HOH A2081 -6.758 12.391 33.294 1.00 26.41 O +HETATM 3688 O HOH A2082 -3.299 17.988 27.421 1.00 23.38 O +HETATM 3689 O HOH A2083 2.343 19.171 34.498 1.00 18.32 O +HETATM 3690 O HOH A2084 1.723 20.360 41.213 1.00 28.62 O +HETATM 3691 O HOH A2085 7.453 13.271 47.548 1.00 36.59 O +HETATM 3692 O HOH A2086 9.198 16.981 46.141 1.00 33.70 O +HETATM 3693 O HOH A2087 7.971 18.483 37.731 1.00 27.02 O +HETATM 3694 O HOH A2088 14.873 12.073 35.820 1.00 27.37 O +HETATM 3695 O HOH A2089 10.034 13.561 29.870 1.00 12.44 O +HETATM 3696 O HOH A2090 10.603 10.042 30.003 1.00 22.95 O +HETATM 3697 O HOH A2091 13.604 10.453 30.832 1.00 31.43 O +HETATM 3698 O HOH A2092 14.756 12.232 32.838 1.00 29.76 O +HETATM 3699 O HOH A2093 14.856 10.809 43.096 1.00 30.29 O +HETATM 3700 O HOH A2094 11.288 8.913 45.674 1.00 24.03 O +HETATM 3701 O HOH A2095 16.655 8.596 42.354 1.00 26.81 O +HETATM 3702 O HOH A2096 10.268 11.800 46.412 1.00 26.67 O +HETATM 3703 O HOH A2097 -13.152 -5.323 35.835 1.00 15.77 O +HETATM 3704 O HOH A2098 -11.653 1.625 37.194 1.00 18.95 O +HETATM 3705 O HOH A2099 -15.600 -5.255 34.561 1.00 17.35 O +HETATM 3706 O BHOH A2100 -14.422 -7.083 30.702 0.50 13.29 O +HETATM 3707 O AHOH A2101 -15.398 -6.398 31.849 0.50 12.42 O +HETATM 3708 O HOH A2102 -20.291 0.135 30.552 1.00 24.69 O +HETATM 3709 O HOH A2103 -16.199 6.029 33.096 1.00 21.07 O +HETATM 3710 O HOH A2104 -16.020 4.620 37.362 1.00 28.31 O +HETATM 3711 O HOH A2105 -13.677 0.913 25.459 1.00 8.87 O +HETATM 3712 O HOH A2106 -15.572 3.974 27.000 1.00 11.16 O +HETATM 3713 O HOH A2107 -9.513 3.519 37.005 1.00 22.46 O +HETATM 3714 O HOH A2108 -18.589 -3.286 26.431 1.00 13.54 O +HETATM 3715 O BHOH A2109 -19.725 -8.946 23.133 0.50 19.07 O +HETATM 3716 O AHOH A2110 -18.519 -9.302 24.590 0.50 23.25 O +HETATM 3717 O HOH A2111 -23.148 -12.655 11.040 1.00 28.69 O +HETATM 3718 O HOH A2112 -16.753 -8.783 30.775 1.00 26.98 O +HETATM 3719 O HOH A2113 -17.702 -15.393 21.640 1.00 17.16 O +HETATM 3720 O HOH A2114 -17.846 -16.942 18.942 1.00 29.13 O +HETATM 3721 O HOH A2115 -19.527 -11.500 19.222 1.00 30.07 O +HETATM 3722 O HOH A2116 -0.490 -16.748 -3.943 1.00 38.57 O +HETATM 3723 O HOH A2117 -8.382 -14.864 -5.251 1.00 30.64 O +HETATM 3724 O HOH A2118 -21.621 -2.805 26.728 1.00 32.60 O +HETATM 3725 O HOH A2119 -25.301 -2.887 20.615 1.00 36.97 O +HETATM 3726 O HOH A2120 -22.518 -6.746 22.541 1.00 28.85 O +HETATM 3727 O HOH A2121 -24.835 0.032 21.296 1.00 36.75 O +HETATM 3728 O HOH A2122 -22.466 1.184 23.204 1.00 33.02 O +HETATM 3729 O HOH A2123 -19.904 1.896 28.254 1.00 15.79 O +HETATM 3730 O HOH A2124 -20.393 3.864 23.621 1.00 17.93 O +HETATM 3731 O HOH A2125 -11.579 -6.332 -10.643 1.00 32.83 O +HETATM 3732 O HOH A2126 -22.236 5.062 30.024 1.00 31.93 O +HETATM 3733 O HOH A2127 -22.898 10.342 27.055 1.00 35.61 O +HETATM 3734 O HOH A2128 -14.935 6.778 35.748 1.00 34.15 O +HETATM 3735 O HOH A2129 -19.614 10.635 39.856 1.00 32.56 O +HETATM 3736 O HOH A2130 -12.206 7.051 36.850 1.00 39.18 O +HETATM 3737 O HOH A2131 -11.060 7.374 32.270 1.00 30.85 O +HETATM 3738 O HOH A2132 -9.062 8.853 24.589 1.00 35.96 O +HETATM 3739 O HOH A2133 -0.578 -9.832 22.175 1.00 7.17 O +HETATM 3740 O HOH A2134 -13.874 20.810 11.219 1.00 33.10 O +HETATM 3741 O HOH A2135 -1.854 -15.948 34.697 1.00 21.96 O +HETATM 3742 O HOH A2136 -6.011 -15.060 36.451 1.00 33.95 O +HETATM 3743 O HOH A2137 -2.238 -14.554 38.677 1.00 37.61 O +HETATM 3744 O HOH A2138 6.094 -8.543 33.483 1.00 13.45 O +HETATM 3745 O HOH A2139 3.740 -7.517 34.504 1.00 11.79 O +HETATM 3746 O HOH A2140 6.686 -12.576 35.689 1.00 27.12 O +HETATM 3747 O HOH A2141 2.321 -14.314 35.892 1.00 30.82 O +HETATM 3748 O HOH A2142 9.831 -12.524 31.929 1.00 30.54 O +HETATM 3749 O HOH A2143 4.964 -14.037 25.739 1.00 29.44 O +HETATM 3750 O HOH A2144 2.332 -16.960 19.054 1.00 33.23 O +HETATM 3751 O HOH A2145 4.209 -15.270 23.392 1.00 22.26 O +HETATM 3752 O HOH A2146 1.265 -19.081 20.999 1.00 32.98 O +HETATM 3753 O HOH A2147 6.536 -14.522 18.863 1.00 27.95 O +HETATM 3754 O HOH A2148 3.593 -16.575 16.437 1.00 22.42 O +HETATM 3755 O HOH A2149 6.329 -17.746 11.661 1.00 27.85 O +HETATM 3756 O HOH A2150 10.957 -16.256 11.348 1.00 25.03 O +HETATM 3757 O HOH A2151 1.787 -20.938 5.426 1.00 19.61 O +HETATM 3758 O BHOH A2152 9.836 -18.838 4.726 0.50 21.50 O +HETATM 3759 O HOH A2153 3.513 -19.016 3.181 1.00 28.48 O +HETATM 3760 O HOH A2154 0.125 -20.375 14.693 1.00 36.62 O +HETATM 3761 O HOH A2155 -6.862 -9.974 9.660 1.00 5.86 O +HETATM 3762 O HOH A2156 -17.247 -9.423 15.868 1.00 12.40 O +HETATM 3763 O HOH A2157 -12.616 -15.443 12.224 1.00 12.36 O +HETATM 3764 O HOH A2158 -16.446 -16.952 11.865 1.00 25.58 O +HETATM 3765 O HOH A2159 -18.271 -13.481 15.864 1.00 33.28 O +HETATM 3766 O HOH A2160 -19.784 -1.595 15.620 1.00 11.05 O +HETATM 3767 O HOH A2161 -24.400 -5.782 13.101 1.00 32.04 O +HETATM 3768 O HOH A2162 -19.812 -4.394 10.414 1.00 8.27 O +HETATM 3769 O HOH A2163 -24.864 0.064 10.373 1.00 20.25 O +HETATM 3770 O HOH A2164 -22.536 3.858 12.139 1.00 24.94 O +HETATM 3771 O HOH A2165 -24.624 -1.584 15.311 1.00 13.05 O +HETATM 3772 O HOH A2166 -19.777 10.925 12.839 1.00 13.90 O +HETATM 3773 O HOH A2167 -13.758 11.830 9.867 1.00 8.17 O +HETATM 3774 O HOH A2168 -11.898 11.623 15.212 1.00 8.95 O +HETATM 3775 O HOH A2169 -12.897 -1.398 13.208 1.00 8.00 O +HETATM 3776 O HOH A2170 9.855 -2.903 22.477 1.00 14.58 O +HETATM 3777 O HOH A2171 8.430 -8.266 21.504 1.00 15.27 O +HETATM 3778 O HOH A2172 7.997 -2.048 24.938 1.00 12.92 O +HETATM 3779 O HOH A2173 10.271 -9.535 27.565 1.00 26.66 O +HETATM 3780 O HOH A2174 10.011 -9.176 24.291 1.00 19.19 O +HETATM 3781 O HOH A2175 12.011 -6.285 28.991 1.00 17.97 O +HETATM 3782 O HOH A2176 10.365 -10.014 33.089 1.00 25.06 O +HETATM 3783 O HOH A2177 8.232 -0.014 29.665 1.00 14.79 O +HETATM 3784 O HOH A2178 11.633 -4.054 37.297 1.00 17.92 O +HETATM 3785 O HOH A2179 12.647 -3.793 27.927 1.00 24.67 O +HETATM 3786 O HOH A2180 14.097 -0.798 28.558 1.00 25.12 O +HETATM 3787 O HOH A2181 9.524 -1.229 27.188 1.00 25.44 O +HETATM 3788 O HOH A2182 13.169 2.157 35.285 1.00 15.40 O +HETATM 3789 O HOH A2183 12.995 5.795 36.154 1.00 18.91 O +HETATM 3790 O HOH A2184 3.725 -6.786 37.254 1.00 13.53 O +HETATM 3791 O HOH A2185 7.117 -6.431 39.029 1.00 22.24 O +HETATM 3792 O HOH A2186 1.956 -8.718 40.892 1.00 35.76 O +HETATM 3793 O HOH A2187 -1.109 -10.563 40.724 1.00 36.72 O +HETATM 3794 O HOH A2188 -1.100 -6.920 41.482 1.00 28.50 O +HETATM 3795 O HOH A2189 3.237 2.966 29.477 1.00 14.83 O +HETATM 3796 O HOH A2190 5.215 3.238 27.127 1.00 18.56 O +HETATM 3797 O CHOH A2191 -0.231 4.411 15.503 0.33 7.21 O +HETATM 3798 O BHOH A2192 -1.332 3.837 16.393 0.33 8.66 O +HETATM 3799 O HOH A2193 0.166 7.174 18.512 1.00 23.12 O +HETATM 3800 O AHOH A2194 -1.063 5.460 16.358 0.33 10.74 O +HETATM 3801 O HOH A2195 6.022 12.551 18.290 1.00 16.98 O +HETATM 3802 O HOH A2196 3.033 11.590 17.585 1.00 32.99 O +HETATM 3803 O HOH A2197 12.144 9.090 16.088 1.00 12.79 O +HETATM 3804 O HOH A2198 5.809 19.609 18.742 1.00 41.00 O +HETATM 3805 O HOH A2199 8.177 18.998 25.478 1.00 25.64 O +HETATM 3806 O HOH A2200 -0.670 7.534 21.877 1.00 32.87 O +HETATM 3807 O HOH A2201 -6.223 9.345 33.315 1.00 42.04 O +HETATM 3808 O HOH A2202 11.863 7.727 29.050 1.00 20.23 O +HETATM 3809 O HOH A2203 7.624 1.912 27.918 1.00 19.91 O +HETATM 3810 O HOH A2204 15.137 2.328 33.145 1.00 33.85 O +HETATM 3811 O HOH A2205 9.226 18.625 35.059 1.00 32.02 O +HETATM 3812 O HOH A2206 9.094 20.342 32.655 1.00 29.00 O +HETATM 3813 O HOH A2207 6.910 21.762 31.179 1.00 43.09 O +HETATM 3814 O HOH A2208 -3.424 24.086 22.904 1.00 19.85 O +HETATM 3815 O HOH A2209 -7.549 17.285 24.377 1.00 26.02 O +HETATM 3816 O HOH A2210 -4.566 19.305 15.513 1.00 32.11 O +HETATM 3817 O HOH A2211 -4.604 15.031 27.731 1.00 29.10 O +HETATM 3818 O HOH A2212 12.308 17.053 24.657 1.00 29.73 O +HETATM 3819 O HOH A2213 12.200 2.419 17.539 1.00 10.50 O +HETATM 3820 O HOH A2214 13.958 6.820 17.889 1.00 28.98 O +HETATM 3821 O HOH A2215 -4.148 0.825 8.616 1.00 11.44 O +HETATM 3822 O HOH A2216 -1.707 3.797 9.635 1.00 14.62 O +HETATM 3823 O HOH A2217 -2.971 5.377 12.719 1.00 19.71 O +HETATM 3824 O HOH A2218 -4.076 2.681 15.564 1.00 21.23 O +HETATM 3825 O HOH A2219 -18.102 3.739 2.201 1.00 9.08 O +HETATM 3826 O HOH A2220 -14.475 2.573 1.546 1.00 8.96 O +HETATM 3827 O HOH A2221 -12.022 1.654 2.477 1.00 7.35 O +HETATM 3828 O HOH A2222 -10.446 -0.694 2.336 1.00 7.50 O +HETATM 3829 O HOH A2223 -7.999 -2.000 3.729 1.00 12.57 O +HETATM 3830 O HOH A2224 -7.832 -2.908 6.312 1.00 10.78 O +HETATM 3831 O HOH A2225 -3.068 4.440 6.952 1.00 10.86 O +HETATM 3832 O HOH A2226 14.740 -1.473 9.684 1.00 18.27 O +HETATM 3833 O HOH A2227 13.515 3.500 15.126 1.00 10.52 O +HETATM 3834 O HOH A2228 16.447 7.394 9.646 1.00 22.67 O +HETATM 3835 O HOH A2229 15.652 -3.374 14.585 1.00 20.05 O +HETATM 3836 O HOH A2230 15.393 -4.289 17.951 1.00 32.41 O +HETATM 3837 O HOH A2231 14.708 -1.764 21.676 1.00 25.87 O +HETATM 3838 O HOH A2232 13.964 0.806 26.015 1.00 43.74 O +HETATM 3839 O HOH A2233 15.949 3.911 23.847 1.00 19.86 O +HETATM 3840 O HOH A2234 17.545 8.223 20.679 1.00 23.95 O +HETATM 3841 O HOH A2235 16.143 10.529 23.588 1.00 28.85 O +HETATM 3842 O HOH A2236 15.544 11.580 19.472 1.00 19.42 O +HETATM 3843 O HOH A2237 18.908 17.134 19.812 1.00 35.67 O +HETATM 3844 O HOH A2238 13.151 19.352 21.015 1.00 37.94 O +HETATM 3845 O HOH A2239 14.578 10.559 16.932 1.00 23.05 O +HETATM 3846 O HOH A2240 9.567 9.113 13.519 1.00 9.60 O +HETATM 3847 O HOH A2241 2.254 15.523 11.496 1.00 22.85 O +HETATM 3848 O HOH A2242 -1.461 9.634 14.166 1.00 28.76 O +HETATM 3849 O HOH A2243 5.772 18.345 9.493 1.00 30.42 O +HETATM 3850 O HOH A2244 9.682 10.643 11.238 1.00 10.43 O +HETATM 3851 O HOH A2245 10.631 9.612 8.815 1.00 12.27 O +HETATM 3852 O HOH A2246 14.152 10.810 9.144 1.00 21.71 O +HETATM 3853 O HOH A2247 3.996 13.071 2.307 1.00 18.67 O +HETATM 3854 O HOH A2248 16.614 10.175 10.626 1.00 32.97 O +HETATM 3855 O HOH A2249 5.633 6.112 3.961 1.00 9.30 O +HETATM 3856 O HOH A2250 0.465 6.289 3.960 1.00 13.48 O +HETATM 3857 O HOH A2251 4.035 8.823 2.995 1.00 11.17 O +HETATM 3858 O HOH A2252 -4.646 3.357 0.212 1.00 6.01 O +HETATM 3859 O HOH A2253 0.637 7.140 0.666 1.00 9.32 O +HETATM 3860 O HOH A2254 -4.397 5.465 4.683 1.00 15.79 O +HETATM 3861 O HOH A2255 -6.988 5.976 4.307 1.00 10.91 O +HETATM 3862 O HOH A2256 -9.168 -0.705 -4.384 1.00 8.41 O +HETATM 3863 O HOH A2257 -9.516 -3.587 1.775 1.00 10.21 O +HETATM 3864 O HOH A2258 -14.567 0.971 -1.075 1.00 12.28 O +HETATM 3865 O HOH A2259 -18.019 7.755 -3.457 1.00 29.57 O +HETATM 3866 O HOH A2260 -15.014 10.682 -2.980 1.00 27.62 O +HETATM 3867 O HOH A2261 -1.674 11.934 -0.713 1.00 24.02 O +HETATM 3868 O HOH A2262 -11.197 -2.481 -8.078 1.00 13.31 O +HETATM 3869 O HOH A2263 -17.117 -3.689 -5.495 1.00 21.27 O +HETATM 3870 O HOH A2264 -21.166 -2.290 -4.047 1.00 19.73 O +HETATM 3871 O HOH A2265 -18.641 -1.495 -8.998 1.00 13.59 O +HETATM 3872 O HOH A2266 -22.846 -6.971 -0.059 1.00 27.38 O +HETATM 3873 O HOH A2267 -21.593 -9.229 1.382 1.00 24.68 O +HETATM 3874 O HOH A2268 -20.447 -6.648 -4.879 1.00 30.85 O +HETATM 3875 O HOH A2269 -25.151 -6.598 1.477 1.00 15.62 O +HETATM 3876 O HOH A2270 -22.637 0.671 8.369 1.00 27.32 O +HETATM 3877 O HOH A2271 -26.513 1.425 3.654 1.00 25.08 O +HETATM 3878 O HOH A2272 -26.381 1.897 8.449 1.00 22.47 O +HETATM 3879 O HOH A2273 -24.104 -8.473 11.967 1.00 23.12 O +HETATM 3880 O HOH A2274 -22.679 -11.167 8.505 1.00 19.20 O +HETATM 3881 O HOH A2275 -20.511 -15.768 12.689 1.00 40.52 O +HETATM 3882 O HOH A2276 -18.224 -13.419 9.472 1.00 32.55 O +HETATM 3883 O HOH A2277 -16.821 -16.062 7.992 1.00 30.54 O +HETATM 3884 O HOH A2278 -3.119 -16.385 -0.768 1.00 14.64 O +HETATM 3885 O AHOH A2279 10.373 -18.898 2.784 0.50 15.07 O +HETATM 3886 O HOH A2280 11.497 -15.687 -3.735 1.00 29.39 O +HETATM 3887 O HOH A2281 14.206 -15.253 -2.459 1.00 34.40 O +HETATM 3888 O HOH A2282 14.288 -21.768 0.219 1.00 31.53 O +HETATM 3889 O HOH A2283 14.507 -14.039 7.009 1.00 32.25 O +HETATM 3890 O HOH A2284 10.677 -16.428 8.187 1.00 28.76 O +HETATM 3891 O HOH A2285 11.363 -8.954 0.932 1.00 26.94 O +HETATM 3892 O HOH A2286 7.539 -7.238 -2.492 1.00 14.20 O +HETATM 3893 O HOH A2287 4.608 -13.149 -2.429 1.00 18.83 O +HETATM 3894 O HOH A2288 10.297 -10.777 -3.509 1.00 22.83 O +HETATM 3895 O HOH A2289 1.318 -13.997 -4.621 1.00 31.10 O +HETATM 3896 O HOH A2290 -3.206 -11.095 -5.486 1.00 29.98 O +HETATM 3897 O HOH A2291 -6.358 -12.375 -4.588 1.00 8.99 O +HETATM 3898 O HOH A2292 -4.779 -9.144 -1.296 1.00 9.51 O +HETATM 3899 O HOH A2293 -7.011 -10.855 -2.053 1.00 9.79 O +HETATM 3900 O HOH A2294 -24.308 -8.420 4.611 1.00 33.41 O +HETATM 3901 O HOH A2295 -19.344 -15.622 6.455 1.00 23.97 O +HETATM 3902 O HOH A2296 -20.919 -13.245 7.484 1.00 24.33 O +HETATM 3903 O HOH A2297 -25.456 -15.553 5.781 1.00 39.30 O +HETATM 3904 O HOH A2298 -23.399 -17.762 5.925 1.00 35.50 O +HETATM 3905 O HOH A2299 -20.256 -21.021 2.700 1.00 28.51 O +HETATM 3906 O HOH A2300 -12.623 -15.933 -4.096 1.00 39.95 O +HETATM 3907 O HOH A2301 -13.182 -8.512 -4.936 1.00 19.58 O +HETATM 3908 O HOH A2302 -9.856 -8.353 -6.949 1.00 23.92 O +HETATM 3909 O HOH A2303 -11.460 -5.368 -7.873 1.00 17.86 O +HETATM 3910 O HOH A2304 -4.989 -3.619 -10.606 1.00 27.93 O +HETATM 3911 O HOH A2305 -4.617 0.534 -11.689 1.00 17.59 O +HETATM 3912 O HOH A2306 -6.299 3.069 -14.429 1.00 25.99 O +HETATM 3913 O HOH A2307 -8.511 5.391 -11.324 1.00 18.77 O +HETATM 3914 O BHOH A2308 -6.260 6.517 -12.517 0.50 11.61 O +HETATM 3915 O AHOH A2309 -5.956 7.611 -11.846 0.50 10.91 O +HETATM 3916 O HOH A2310 -2.695 8.315 -11.558 1.00 19.21 O +HETATM 3917 O HOH A2311 -1.873 1.397 -14.426 1.00 25.55 O +HETATM 3918 O HOH A2312 1.968 -0.533 -10.131 1.00 20.39 O +HETATM 3919 O HOH A2313 3.848 3.646 -11.536 1.00 29.24 O +HETATM 3920 O HOH A2314 -0.920 -4.381 -5.384 1.00 16.47 O +HETATM 3921 O HOH A2315 2.204 -2.636 -8.093 1.00 29.27 O +HETATM 3922 O HOH A2316 -0.350 -5.852 -10.387 1.00 32.29 O +HETATM 3923 O HOH A2317 6.724 -6.386 -5.651 1.00 18.38 O +HETATM 3924 O HOH A2318 11.078 -2.580 1.229 1.00 13.00 O +HETATM 3925 O HOH A2319 8.354 -1.245 -0.410 1.00 12.69 O +HETATM 3926 O HOH A2320 8.922 1.300 -1.720 1.00 10.61 O +HETATM 3927 O HOH A2321 8.572 5.600 -4.064 1.00 17.98 O +HETATM 3928 O HOH A2322 6.846 11.186 -3.639 1.00 30.64 O +HETATM 3929 O HOH A2323 -1.457 12.413 -7.015 1.00 26.43 O +HETATM 3930 O HOH A2324 -2.031 12.803 -3.231 1.00 24.29 O +HETATM 3931 O HOH A2325 0.668 15.058 -3.448 1.00 34.46 O +HETATM 3932 O HOH A2326 2.887 15.415 -1.997 1.00 9.83 O +HETATM 3933 O HOH A2327 13.060 -0.543 2.218 1.00 31.60 O +HETATM 3934 O HOH A2328 17.473 4.703 3.880 1.00 29.33 O +HETATM 3935 O HOH A2329 13.311 -4.130 2.485 1.00 20.40 O +HETATM 3936 O HOH A2330 15.822 -3.049 3.683 1.00 18.76 O +HETATM 3937 O HOH A2331 13.338 -7.313 2.275 1.00 33.09 O +HETATM 3938 O HOH A2332 15.790 -10.814 8.916 1.00 34.74 O +HETATM 3939 O HOH A2333 14.580 -8.527 15.194 1.00 22.96 O +HETATM 3940 O HOH A2334 15.722 -3.581 11.555 1.00 25.23 O +HETATM 3941 O HOH A2335 8.849 -13.653 17.574 1.00 25.29 O +HETATM 3942 O HOH A2336 12.220 -10.333 21.604 1.00 34.52 O +HETATM 3943 O HOH A2337 11.226 -7.528 21.682 1.00 24.24 O +HETATM 3944 O HOH A2338 -9.930 8.364 21.835 1.00 19.93 O +HETATM 3945 O HOH A2339 -6.242 11.422 19.494 1.00 18.17 O +HETATM 3946 O HOH A2340 -3.824 10.809 14.405 1.00 34.89 O +HETATM 3947 O HOH A2341 -10.947 13.038 25.789 1.00 40.72 O +HETATM 3948 O HOH A2342 -10.144 18.727 15.916 1.00 26.40 O +HETATM 3949 O HOH A2343 -13.108 17.792 10.526 1.00 18.04 O +HETATM 3950 O HOH A2344 -14.033 13.167 -2.865 1.00 24.03 O +HETATM 3951 O HOH A2345 -2.819 13.944 0.622 1.00 29.01 O +HETATM 3952 O HOH A2346 -1.224 14.378 8.187 1.00 24.26 O +HETATM 3953 O HOH A2347 -6.568 18.974 6.402 1.00 19.91 O +HETATM 3954 O HOH A2348 -11.144 19.908 -0.829 1.00 17.67 O +HETATM 3955 O HOH A2349 -5.087 23.631 -1.485 1.00 15.14 O +HETATM 3956 O HOH A2350 -4.731 18.796 -4.649 1.00 22.37 O +HETATM 3957 O HOH A2351 -8.148 12.268 -11.692 1.00 32.61 O +HETATM 3958 O HOH A2352 -20.717 9.499 4.860 1.00 26.52 O +HETATM 3959 O HOH A2353 -20.296 5.537 2.896 1.00 14.03 O +HETATM 3960 O HOH A2354 -19.994 13.280 7.021 1.00 20.71 O +HETATM 3961 O HOH A2355 -17.070 18.001 2.869 1.00 15.48 O +HETATM 3962 O HOH A2356 -14.021 22.227 5.747 1.00 28.97 O +HETATM 3963 O HOH A2357 -17.379 16.880 13.500 1.00 15.13 O +HETATM 3964 O HOH A2358 -18.681 13.538 12.197 1.00 16.60 O +HETATM 3965 O HOH A2359 -12.636 18.536 19.777 1.00 21.21 O +HETATM 3966 O HOH A2360 -21.146 12.301 25.677 1.00 33.97 O +HETATM 3967 O HOH A2361 -23.651 8.909 14.625 1.00 26.70 O +HETATM 3968 O HOH A2362 -25.958 11.381 14.966 1.00 37.01 O +HETATM 3969 O HOH A2363 -21.931 11.335 14.762 1.00 28.47 O +HETATM 3970 O HOH A2364 -21.359 15.249 15.181 1.00 29.80 O +HETATM 3971 O HOH A2365 -26.166 8.133 18.171 1.00 29.52 O +HETATM 3972 O HOH A2366 -19.093 -16.213 16.400 1.00 32.89 O +HETATM 3973 O HOH A2367 -9.089 -24.056 5.915 1.00 34.04 O +HETATM 3974 O HOH A2368 -12.864 -17.609 10.177 1.00 30.19 O +HETATM 3975 O HOH A2369 -14.310 -18.253 7.463 1.00 30.53 O +HETATM 3976 O HOH A2370 -12.521 -21.210 0.156 1.00 40.68 O +HETATM 3977 O HOH A2371 -17.187 -17.138 -5.204 1.00 36.77 O +HETATM 3978 O HOH A2372 17.094 14.348 26.021 1.00 37.08 O +HETATM 3979 O HOH A2373 -0.749 21.124 46.598 1.00 36.58 O +HETATM 3980 O HOH A2374 -0.580 -17.850 -1.095 1.00 19.93 O +HETATM 3981 O HOH A2375 -0.840 14.805 2.742 1.00 31.39 O +HETATM 3982 O HOH A2376 -21.433 10.446 10.522 1.00 26.22 O +CONECT 1 2 5 +CONECT 2 1 3 7 +CONECT 3 2 4 +CONECT 4 3 5 +CONECT 5 1 4 6 +CONECT 6 5 +CONECT 7 2 8 9 +CONECT 8 7 +CONECT 9 7 +CONECT 170 215 +CONECT 215 170 +CONECT 452 618 +CONECT 519 3534 +CONECT 547 590 +CONECT 570 3605 +CONECT 590 547 +CONECT 618 452 +CONECT 1167 3215 +CONECT 1418 1692 +CONECT 1453 1686 +CONECT 1612 3562 +CONECT 1686 1453 +CONECT 1692 1418 +CONECT 1914 1948 +CONECT 1948 1914 +CONECT 2089 2675 +CONECT 2675 2089 +CONECT 3215 1167 +CONECT 3440 3548 +CONECT 3483 3484 3494 +CONECT 3484 3483 3485 3491 +CONECT 3485 3484 3486 3492 +CONECT 3486 3485 3487 3493 +CONECT 3487 3486 3488 3494 +CONECT 3488 3487 3495 +CONECT 3489 3490 3491 3496 +CONECT 3490 3489 +CONECT 3491 3484 3489 +CONECT 3492 3485 +CONECT 3493 3486 3497 +CONECT 3494 3483 3487 +CONECT 3495 3488 +CONECT 3496 3489 +CONECT 3497 3493 3498 3508 +CONECT 3498 3497 3499 3505 +CONECT 3499 3498 3500 3506 +CONECT 3500 3499 3501 3507 +CONECT 3501 3500 3502 3508 +CONECT 3502 3501 3509 +CONECT 3503 3504 3505 3510 +CONECT 3504 3503 +CONECT 3505 3498 3503 +CONECT 3506 3499 +CONECT 3507 3500 +CONECT 3508 3497 3501 +CONECT 3509 3502 +CONECT 3510 3503 +CONECT 3511 3512 3516 3518 +CONECT 3512 3511 3513 3519 +CONECT 3513 3512 3514 3520 +CONECT 3514 3513 3515 3521 +CONECT 3515 3514 3522 +CONECT 3516 3511 3517 3521 +CONECT 3517 3516 +CONECT 3518 3511 +CONECT 3519 3512 +CONECT 3520 3513 3528 +CONECT 3521 3514 3516 +CONECT 3522 3515 +CONECT 3523 3524 3528 3529 +CONECT 3524 3523 3525 3530 +CONECT 3525 3524 3526 3531 +CONECT 3526 3525 3527 3532 +CONECT 3527 3526 3533 +CONECT 3528 3520 3523 3532 +CONECT 3529 3523 +CONECT 3530 3524 +CONECT 3531 3525 +CONECT 3532 3526 3528 +CONECT 3533 3527 +CONECT 3534 519 3535 3545 +CONECT 3535 3534 3536 3542 +CONECT 3536 3535 3537 3543 +CONECT 3537 3536 3538 3544 +CONECT 3538 3537 3539 3545 +CONECT 3539 3538 3546 +CONECT 3540 3541 3542 3547 +CONECT 3541 3540 +CONECT 3542 3535 3540 +CONECT 3543 3536 +CONECT 3544 3537 +CONECT 3545 3534 3538 +CONECT 3546 3539 +CONECT 3547 3540 +CONECT 3548 3440 3549 3559 +CONECT 3549 3548 3550 3556 +CONECT 3550 3549 3551 3557 +CONECT 3551 3550 3552 3558 +CONECT 3552 3551 3553 3559 +CONECT 3553 3552 3560 +CONECT 3554 3555 3556 3561 +CONECT 3555 3554 +CONECT 3556 3549 3554 +CONECT 3557 3550 +CONECT 3558 3551 +CONECT 3559 3548 3552 +CONECT 3560 3553 +CONECT 3561 3554 +CONECT 3562 1612 3563 3571 +CONECT 3563 3562 3564 3568 +CONECT 3564 3563 3565 3569 +CONECT 3565 3564 3566 3570 +CONECT 3566 3565 3567 3571 +CONECT 3567 3566 3572 +CONECT 3568 3563 +CONECT 3569 3564 +CONECT 3570 3565 +CONECT 3571 3562 3566 +CONECT 3572 3567 +CONECT 3573 3574 3575 +CONECT 3574 3573 +CONECT 3575 3573 3576 3577 +CONECT 3576 3575 +CONECT 3577 3575 3578 +CONECT 3578 3577 +CONECT 3579 3580 3581 +CONECT 3580 3579 +CONECT 3581 3579 3582 3583 +CONECT 3582 3581 +CONECT 3583 3581 3584 +CONECT 3584 3583 +CONECT 3585 3586 3587 +CONECT 3586 3585 +CONECT 3587 3585 3588 3589 +CONECT 3588 3587 +CONECT 3589 3587 3590 +CONECT 3590 3589 +CONECT 3591 3592 3593 +CONECT 3592 3591 +CONECT 3593 3591 3594 +CONECT 3594 3593 3595 +CONECT 3595 3594 3596 +CONECT 3596 3595 3597 +CONECT 3597 3596 +CONECT 3598 3599 3600 +CONECT 3599 3598 +CONECT 3600 3598 3601 +CONECT 3601 3600 3602 +CONECT 3602 3601 3603 +CONECT 3603 3602 3604 +CONECT 3604 3603 +CONECT 3605 570 3695 3696 3697 +CONECT 3606 3769 3876 3878 +CONECT 3695 3605 +CONECT 3696 3605 +CONECT 3697 3605 +CONECT 3769 3606 +CONECT 3876 3606 +CONECT 3878 3606 +MASTER 310 0 15 11 56 0 0 6 3739 1 159 34 +END diff --git a/test/Test_PrepareForLeap/RunTest.sh b/test/Test_PrepareForLeap/RunTest.sh index 20d1f6fecc..e823be6bfc 100755 --- a/test/Test_PrepareForLeap/RunTest.sh +++ b/test/Test_PrepareForLeap/RunTest.sh @@ -2,7 +2,8 @@ . ../MasterTest.sh -CleanFiles cpptraj.in 1qos.cpptraj.pdb leap.1qos.in +CleanFiles cpptraj.in 1qos.cpptraj.pdb leap.1qos.in \ + leap.4zzw.in 4zzw.cpptraj.pdb INPUT='-i cpptraj.in' @@ -22,4 +23,20 @@ RunCpptraj "Prepare PDB 1qos for LEaP" DoTest leap.1qos.in.save leap.1qos.in DoTest 1qos.cpptraj.pdb.save 1qos.cpptraj.pdb +cat > cpptraj.in < Date: Fri, 18 Feb 2022 09:37:39 -0500 Subject: [PATCH 340/368] Add highestocc keyword for keepaltloc --- src/Exec_PrepareForLeap.cpp | 46 +++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index df88d4bc2a..6d4037dc23 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2697,6 +2697,30 @@ const at != it->second.end(); ++at) if (topIn.AtomAltLoc()[*at] != altLocChar) atomsToKeep[*at] = false; + } else { + // Keep highest occupancy + if (topIn.Occupancy().empty()) { + mprintf("\tNo occupancy.\n"); // TODO error? + } else { + int highestOccAt = -1; + float highestOcc = 0; + for (std::vector::const_iterator at = it->second.begin(); + at != it->second.end(); ++at) + { + if (highestOccAt == -1) { + highestOccAt = *at; + highestOcc = topIn.Occupancy()[*at]; + } else if (topIn.Occupancy()[*at] > highestOcc) { + highestOccAt = *at; + highestOcc = topIn.Occupancy()[*at]; + } + } + // Set everything beside highest occ to false + for (std::vector::const_iterator at = it->second.begin(); + at != it->second.end(); ++at) + if (*at != highestOccAt) + atomsToKeep[*at] = false; + } } } } @@ -3084,7 +3108,7 @@ void Exec_PrepareForLeap::Help() const "\t[pdbout [terbymol]]\n" "\t[leapunitname ] [out [runleap ]]\n" "\t[skiperrors]\n" - "\t[nowat [watername ] [noh] [keepaltloc ]\n" + "\t[nowat [watername ] [noh] [keepaltloc {|highestocc}]\n" "\t[stripmask ] [solventresname ]\n" "\t[{nohisdetect |\n" "\t [nd1 ] [ne2 ] [hiename ]\n" @@ -3265,13 +3289,26 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) bool remove_h = argIn.hasKey("noh"); std::string altLocArg = argIn.GetStringKey("keepaltloc"); if (!altLocArg.empty()) { - if (altLocArg.size() > 1) { - mprinterr("Error: Alternate atom location identifier '%s' > 1 character.\n", altLocArg.c_str()); + if (altLocArg != "highestocc" && + altLocArg.size() > 1) + { + mprinterr("Error: Invalid keyword for 'keepaltloc' '%s'; must be 'highestocc' or 1 character.\n", + altLocArg.c_str()); return CpptrajState::ERR; } } std::string stripMask = argIn.GetStringKey("stripmask"); + // If keeping highest alt loc, check that alt locs and occupancies are present. + if (altLocArg == "highestocc") { + if (topIn.AtomAltLoc().empty()) { + mprintf("Warning: 'highestocc' specified but no atom alternate location info.\n"); + altLocArg.clear(); + } else if (topIn.Occupancy().empty()) { + mprintf("Warning: 'highestocc' specified but no atom occupancy info.\n"); + altLocArg.clear(); + } + } // Check if alternate atom location IDs are present if (!topIn.AtomAltLoc().empty()) { // For LEaP, must have only 1 atom alternate location @@ -3285,6 +3322,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) if (*altLocId != ' ') firstAltLoc = *altLocId; } else if (*altLocId != ' ' && *altLocId != firstAltLoc) { + // Choose a default if necessary if (altLocArg.empty()) { altLocArg.assign(1, firstAltLoc); mprintf("Warning: '%s' has atoms with multiple alternate location IDs, which\n" @@ -3611,7 +3649,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("Warning: Continuing on anyway, but final structure **NEEDS VALIDATION**.\n"); } } - + // Run leap if needed if (!leapffname.empty()) { if (RunLeap( leapffname, leapfilename )) { mprinterr("Error: Running leap failed.\n"); From 19553dd599d5f8bed2ada9b8e76b81746d80e982 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 18 Feb 2022 15:33:13 -0500 Subject: [PATCH 341/368] Start manual entry --- doc/cpptraj.lyx | 332 +++++++++++++++++++++++++++++++++++- src/Exec_PrepareForLeap.cpp | 4 +- 2 files changed, 333 insertions(+), 3 deletions(-) diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index 86ccfba770..cd232e5eb0 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -6009,7 +6009,7 @@ The following COORDS data set commands are available: \begin_layout Standard \align center \begin_inset Tabular - + @@ -6242,6 +6242,27 @@ Rotate specified dihedral(s) in given COORDS set by specific interval or \begin_inset Text +\begin_layout Plain Layout +prepareforleap +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Prepare a structure (usually loaded from a PDB) for processing with LEaP + from Amber. +\end_layout + +\end_inset + + + + +\begin_inset Text + \begin_layout Plain Layout reference \end_layout @@ -7106,6 +7127,315 @@ permutedihedrals crdset [TZ2] random rseed 1 check maxfactor 10 phi psi outtraj random.mol2 multi \end_layout +\begin_layout Subsection +prepareforleap +\end_layout + +\begin_layout LyX-Code +prepareforleap crdset [frame <#>] name +\end_layout + +\begin_layout LyX-Code + [pdbout [terbymol]] +\end_layout + +\begin_layout LyX-Code + [leapunitname ] [out [runleap + ]] +\end_layout + +\begin_layout LyX-Code + [skiperrors] +\end_layout + +\begin_layout LyX-Code + [nowat [watermask ] [noh] [keepaltloc {|highestocc}] +\end_layout + +\begin_layout LyX-Code + [stripmask ] [solventresname ] +\end_layout + +\begin_layout LyX-Code + [{nohisdetect | +\end_layout + +\begin_layout LyX-Code + [nd1 ] [ne2 ] [hiename ] +\end_layout + +\begin_layout LyX-Code + [hidname ] [hipname ] [disulfidecut ] [newcysname + ]}] +\end_layout + +\begin_layout LyX-Code + [{nosugars | +\end_layout + +\begin_layout LyX-Code + sugarmask [noc1search] [notermsearch] [resmapfi +le ] +\end_layout + +\begin_layout LyX-Code + [hasglycam] +\end_layout + +\begin_layout LyX-Code + }] +\end_layout + +\begin_layout LyX-Code + [molmask ...] [determinemolmask ] +\end_layout + +\begin_deeper +\begin_layout Description +crdset +\begin_inset space ~ +\end_inset + + COORDS data set containing coordinates and topology to prepare. +\end_layout + +\begin_layout Description +[frame +\begin_inset space ~ +\end_inset + +<#>] Frame to use from COORDS set (default first). +\end_layout + +\begin_layout Description +name +\begin_inset space ~ +\end_inset + + Output COORDS set containing prepared topology/coordinates. +\end_layout + +\begin_layout Description +[pdbout +\begin_inset space ~ +\end_inset + +] Output PDB name. +\end_layout + +\begin_deeper +\begin_layout Description +[terbymol] If specified, base TER cards on molecules instead of PDB chains. +\end_layout + +\end_deeper +\begin_layout Description +[leapunitname +\begin_inset space ~ +\end_inset + +] LEaP unit name to use when writing to (i.e. + the LEaP input file will contain ' +\begin_inset space ~ +\end_inset + += +\begin_inset space ~ +\end_inset + +loadpdb +\begin_inset space ~ +\end_inset + +'). +\end_layout + +\begin_layout Description +[out +\begin_inset space ~ +\end_inset + +] File containing LEaP input needed to read in the prepared system + (loadpdb, bond commands for disulfides, etc). +\end_layout + +\begin_layout Description +[runleap +\begin_inset space ~ +\end_inset + +] If specified, CPPTRAJ will attempt to run LEaP directly to generate + a topology and coordinates; should contain the appropriate 'source' commands for loading the desired + force field parameters. +\end_layout + +\begin_layout Description +[skiperrors] If specified, the command will try to ignore any errors encountered. + Can be useful for debugging. +\end_layout + +\begin_layout Description +[nowat] If specified, remove waters from the system. +\end_layout + +\begin_deeper +\begin_layout Description +[watermask +\begin_inset space ~ +\end_inset + +] Mask selecting waters to remove (default ':'). +\end_layout + +\end_deeper +\begin_layout Description +[noh] If specified, strip all hydrogen atoms from the system (recommended). +\end_layout + +\begin_layout Description +[keepaltloc +\begin_inset space ~ +\end_inset + +{|highestocc}] LEaP cannot handle alternate atom locations, so the command + will choose location 'A' by default. + This can be changed to either or the location with the highest occupancy if +\series bold +'highestocc' +\series default + is specified. +\end_layout + +\begin_layout Description +[stripmask +\begin_inset space ~ +\end_inset + +] Mask of atoms to remove from the system. +\end_layout + +\begin_layout Description +[solventresname +\begin_inset space ~ +\end_inset + +] Solvent residue name (default 'HOH'). +\end_layout + +\begin_layout Standard +Histidine Detection: +\end_layout + +\begin_layout Description +[nohisdetect] Disable renaming of histidine residues based on existing hydrogens. +\end_layout + +\begin_layout Description +[nd1 +\begin_inset space ~ +\end_inset + +] Delta nitrogen atom name (default ND1). +\end_layout + +\begin_layout Description +[ne2 +\begin_inset space ~ +\end_inset + +] Histidine residue name (default 'HIS'). +\end_layout + +\begin_layout Description +[hiename +\begin_inset space ~ +\end_inset + +] Epsilon-protonated histidine name (default 'HIE'). +\end_layout + +\begin_layout Description +[hidname +\begin_inset space ~ +\end_inset + +] Delta-protonated histidine name (default 'HID'). +\end_layout + +\begin_layout Description +[hipname +\begin_inset space ~ +\end_inset + +] Doubly-protonated histidine name (defualt 'HIP'). +\end_layout + +\end_deeper \begin_layout Subsection reference \end_layout diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6d4037dc23..b91ee2b5be 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3108,7 +3108,7 @@ void Exec_PrepareForLeap::Help() const "\t[pdbout [terbymol]]\n" "\t[leapunitname ] [out [runleap ]]\n" "\t[skiperrors]\n" - "\t[nowat [watername ] [noh] [keepaltloc {|highestocc}]\n" + "\t[nowat [watermask ] [noh] [keepaltloc {|highestocc}]\n" "\t[stripmask ] [solventresname ]\n" "\t[{nohisdetect |\n" "\t [nd1 ] [ne2 ] [hiename ]\n" @@ -3285,7 +3285,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); - std::string waterMask = argIn.GetStringKey("watername", ":" + solventResName_); + std::string waterMask = argIn.GetStringKey("watermask", ":" + solventResName_); bool remove_h = argIn.hasKey("noh"); std::string altLocArg = argIn.GetStringKey("keepaltloc"); if (!altLocArg.empty()) { From 2d9e46876b0f7fdc1ea6a3da6a4b66034a0dd361 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 22 Feb 2022 10:24:30 -0500 Subject: [PATCH 342/368] Change order in help text --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b91ee2b5be..6fd55726e9 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3110,6 +3110,7 @@ void Exec_PrepareForLeap::Help() const "\t[skiperrors]\n" "\t[nowat [watermask ] [noh] [keepaltloc {|highestocc}]\n" "\t[stripmask ] [solventresname ]\n" + "\t[molmask ...] [determinemolmask ]\n" "\t[{nohisdetect |\n" "\t [nd1 ] [ne2 ] [hiename ]\n" "\t [hidname ] [hipname [noc1search] [notermsearch] [resmapfile ]\n" "\t [hasglycam]\n" "\t }]\n" - "\t[molmask ...] [determinemolmask ]\n" " Prepare the structure in the given coords set for easier processing\n" " with the LEaP program from AmberTools. Any existing/potential\n" " disulfide bonds will be identified and the residue names changed\n" From e742ed6b347a261c141fe608f326c1690e5f9219 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 22 Feb 2022 11:42:34 -0500 Subject: [PATCH 343/368] Change notermsearch to nosplitres to better describe what it does. Change some variable names to better reflect what they are for. --- src/Exec_PrepareForLeap.cpp | 44 ++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 6fd55726e9..900e4bff53 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2037,15 +2037,16 @@ const mprinterr("Internal Error: Unhandled group in CheckForFunctionalGroups()\n"); return 1; } - // Create array with SO3 selected - AtomMask SO3(selected, topIn.Natom()); - // Split the sulfate into a new residue named SO3 for Glycam. + // Create array with group selected + AtomMask FxnGrpMask(selected, topIn.Natom()); + // Split the sulfate into a new residue named newResName for Glycam. // This may involve reordering atoms within the residue, but not // any other atoms, so we should not have to update other sugars. //mprintf("DEBUG: Before split: %s\n", topIn.AtomMaskName(sugar.RingOxygenAtom()).c_str()); Iarray atomMap; - if (topIn.SplitResidue(SO3, newResName, atomMap)) { - mprinterr("Error: Could not split sulfate from residue '%s'.\n", sugarName.c_str()); + if (topIn.SplitResidue(FxnGrpMask, newResName, atomMap)) { + mprinterr("Error: Could not split functional group from residue '%s'.\n", + sugarName.c_str()); return 1; } // Set the split residue as terminal @@ -2159,7 +2160,7 @@ const int Exec_PrepareForLeap::FixSugarsStructure(std::vector& sugarResidues, std::string const& sugarMaskStr, Topology& topIn, Frame& frameIn, - bool c1bondsearch, bool termsearch) + bool c1bondsearch, bool splitres) const { sugarResidues.clear(); @@ -2221,38 +2222,35 @@ const // sugar != sugarResidues.end(); ++sugar) // sugar->PrintInfo(topIn); - if (termsearch) { + if (splitres) { // Loop over sugar indices to see if residues have ROH that must be split off for (std::vector::iterator sugar = sugarResidues.begin(); sugar != sugarResidues.end(); ++sugar) { if (sugar->NotSet()) continue; if (CheckIfSugarIsTerminal(*sugar, topIn, frameIn)) { - mprinterr("Error: Checking if sugar %s is terminal failed.\n", + mprinterr("Error: Checking if sugar %s has terminal functional groups failed.\n", topIn.TruncResNameOnumId(sugar->ResNum(topIn)).c_str()); return 1; } } // End loop over sugar indices - } - //DEBUG - //for (std::vector::const_iterator sugar = sugarResidues.begin(); - // sugar != sugarResidues.end(); ++sugar) - // sugar->PrintInfo(topIn); - - // if (so3search) { // Loop over chain indices to see if residues need to be split for (std::vector::iterator sugar = sugarResidues.begin(); sugar != sugarResidues.end(); ++sugar) { if (sugar->NotSet()) continue; if (CheckForFunctionalGroups(*sugar, topIn, frameIn)) { - mprinterr("Error: Checking if sugar %s has sulfates failed.\n", + mprinterr("Error: Checking if sugar %s has functional groups failed.\n", topIn.TruncResNameOnumId( sugar->ResNum(topIn) ).c_str()); return 1; } } - //} + //DEBUG + //for (std::vector::const_iterator sugar = sugarResidues.begin(); + // sugar != sugarResidues.end(); ++sugar) + // sugar->PrintInfo(topIn); + } return 0; @@ -3118,7 +3116,7 @@ void Exec_PrepareForLeap::Help() const "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars |\n" - "\t sugarmask [noc1search] [notermsearch] [resmapfile ]\n" + "\t sugarmask [noc1search] [nosplitres] [resmapfile ]\n" "\t [hasglycam]\n" "\t }]\n" " Prepare the structure in the given coords set for easier processing\n" @@ -3416,11 +3414,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) } myMap_.DetermineAtomIDs(); - bool termsearch = !argIn.hasKey("notermsearch"); - if (termsearch) - mprintf("\tWill split hydroxyls on anomeric atoms of terminal sugars into separate residues.\n"); + bool splitres = !argIn.hasKey("nosplitres"); + if (splitres) + mprintf("\tWill split off recognized sugar functional groups into separate residues.\n"); else - mprintf("\tNot splitting hydroxyls on anomeric atoms of terminal sugars into separate residues.\n"); + mprintf("\tNot splitting recognized sugar functional groups into separate residues.\n"); bool c1bondsearch = !argIn.hasKey("noc1search"); if (c1bondsearch) mprintf("\tWill search for missing bonds to sugar anomeric atoms.\n"); @@ -3432,7 +3430,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // This is done before any identification takes place since we want // to identify based on the most up-to-date topology. if (FixSugarsStructure(sugarResidues, sugarmaskstr, topIn, frameIn, - c1bondsearch, termsearch)) + c1bondsearch, splitres)) { mprinterr("Error: Sugar structure modification failed.\n"); return CpptrajState::ERR; From 910a38f92ff82c7691d9789f4bbfa38f515b6def Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 22 Feb 2022 11:43:13 -0500 Subject: [PATCH 344/368] Finish initial manual entry for prepareforleap --- doc/cpptraj.lyx | 201 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 192 insertions(+), 9 deletions(-) diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index cd232e5eb0..46d81975bd 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -7157,6 +7157,10 @@ prepareforleap crdset [frame <#>] name [stripmask ] [solventresname ] \end_layout +\begin_layout LyX-Code + [molmask ...] [determinemolmask ] +\end_layout + \begin_layout LyX-Code [{nohisdetect | \end_layout @@ -7187,8 +7191,8 @@ prepareforleap crdset [frame <#>] name \end_layout \begin_layout LyX-Code - sugarmask [noc1search] [notermsearch] [resmapfi -le ] + sugarmask [noc1search] [nosplitres] [resmapfile + ] \end_layout \begin_layout LyX-Code @@ -7199,10 +7203,6 @@ le ] }] \end_layout -\begin_layout LyX-Code - [molmask ...] [determinemolmask ] -\end_layout - \begin_deeper \begin_layout Description crdset @@ -7308,6 +7308,7 @@ file>] If specified, CPPTRAJ will attempt to run LEaP directly to generate file> should contain the appropriate 'source' commands for loading the desired force field parameters. + Will attempt to produce topology .parm7 and coordinates .rst7. \end_layout \begin_layout Description @@ -7379,6 +7380,25 @@ id> or the location with the highest occupancy if ] Solvent residue name (default 'HOH'). \end_layout +\begin_layout Description +[molmask +\begin_inset space ~ +\end_inset + +] If specified, atoms in will be considered all part of one + molecule. + May be specified multiple times. +\end_layout + +\begin_layout Description +[dterminemolmask +\begin_inset space ~ +\end_inset + +] If specified, determine if atoms selected in are in the same + molecule via bonds. +\end_layout + \begin_layout Standard Histidine Detection: \end_layout @@ -7392,7 +7412,7 @@ Histidine Detection: \begin_inset space ~ \end_inset -] Delta nitrogen atom name (default ND1). +] Delta nitrogen atom name (default 'ND1'). \end_layout \begin_layout Description @@ -7400,7 +7420,7 @@ Histidine Detection: \begin_inset space ~ \end_inset -] Doubly-protonated histidine name (defualt 'HIP'). +] Doubly-protonated histidine name (default 'HIP'). +\end_layout + +\begin_layout Standard +Disulfide Handling: +\end_layout + +\begin_layout Description +[nodisulfides] Disable handling of disulfides. +\end_layout + +\begin_layout Description +[existingdisulfides] Only handle disulfides already present; do not search + for additional disulfides. +\end_layout + +\begin_layout Description +[cysmask +\begin_inset space ~ +\end_inset + +] Mask for selecting cysteine residues (default 'CYS'). +\end_layout + +\begin_layout Description +[disulfidecut +\begin_inset space ~ +\end_inset + +] Sulfur to sulfur atom distance cutoff for forming a disulfide (default + 2.5 Ang). +\end_layout + +\begin_layout Description +[newcysname +\begin_inset space ~ +\end_inset + +] Name to change cysteine residues that participate in a disulfide + bond to (default 'CYX'). +\end_layout + +\begin_layout Standard +Sugar Handling: +\end_layout + +\begin_layout Description +[nosugars] Disable handling of sugars. +\end_layout + +\begin_layout Description +[sugarmask +\begin_inset space ~ +\end_inset + +] Mask selecting sugars to be handled. + If not specified the default is all residues defined in +\series bold +resmapfile +\series default +. +\end_layout + +\begin_layout Description +[noc1search] If specified disable search for missing sugar C1 atom bonds. +\end_layout + +\begin_layout Description +[nosplitres] If specified do not attempt to split off functional groups + from sugars into separate residues. +\end_layout + +\begin_layout Description +[resmapfile +\begin_inset space ~ +\end_inset + +] File containing sugar residue/atom name mapping. + Default is '$CPPTRAJHOME/dat/Carbohydrate_PDB_Glycam_Names.txt'. +\end_layout + +\begin_layout Description +[hasglycam] If specified, assume sugars already have GLYCAM residue names; + just check sugar form/chirality/linkage. \end_layout \end_deeper +\begin_layout Standard +This command will prepare a structure (usually from a PDB) for processing + with the Amber program LEaP to generate topology and coordinates files + for MD simulations. + The command will handle things like choosing alternate atom locations, + renaming residues and generating 'bond' commands for disulfide bonds, change + histidine names based on any existing protonation, and renaming residues/atoms + and generating 'bond' commands for carbohydrates. + The command will try to report any potential problems that LEaP might encounter. +\end_layout + +\begin_layout Standard +By default, sugars will have their residue names changed to those compatible + with the GLYCAM force field based on their form, chirality, and linkage. + Any recognized functional groups that are part of sugar residues (hydroxyl, + acetyl, sulfate, etc) will be split into separate residues as required + by GLYCAM. + If this happens and 'runleap' has not been specified, CPPTRAJ will warn + about any residues/atoms that require charge to be adjusted. +\end_layout + +\begin_layout Subsubsection* +Sugar Residue/Atom Name Mapping File +\end_layout + +\begin_layout Standard +This file controls how CPPTRAJ will name sugars based on sugar form/chirality + linkage. + It consists of three sections separated by a blank line. + The first section defines sugar PDB residue names and how they are mapped + to GLYCAM residue characters: +\end_layout + +\begin_layout LyX-Code +Format: "" +\end_layout + +\begin_layout LyX-Code +Form: A=alpha, B=beta +\end_layout + +\begin_layout LyX-Code +RingType: P=pyranose, F=furanose +\end_layout + +\begin_layout LyX-Code +Example: 64K A A D P "alpha-D-arabinopyranose" +\end_layout + +\begin_layout Standard +The second section contains PDB to GLYCAM atom name maps for residues: +\end_layout + +\begin_layout LyX-Code +Format: ,[,] + … +\end_layout + +\begin_layout LyX-Code +If (A=alpha, B=beta) is specified, the atom name map is only valid + for that specific form. +\end_layout + +\begin_layout LyX-Code +Example: V,W,Y C7,C2N O7,O2N C8,CME +\end_layout + +\begin_layout Standard +The third section contains PDB to GLYCAM linkage residue (i.e. + non-sugar residues bonded to sugars) name maps: +\end_layout + +\begin_layout LyX-Code +Format: +\end_layout + +\begin_layout LyX-Code +Example: SER OLS +\end_layout + \begin_layout Subsection reference \end_layout From 3522471b9814e9625723679bea775d35163538a2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 22 Feb 2022 12:40:10 -0500 Subject: [PATCH 345/368] Add an example. --- doc/cpptraj.lyx | 57 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index 46d81975bd..8c10c13780 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -7543,11 +7543,24 @@ resmapfile This command will prepare a structure (usually from a PDB) for processing with the Amber program LEaP to generate topology and coordinates files for MD simulations. - The command will handle things like choosing alternate atom locations, - renaming residues and generating 'bond' commands for disulfide bonds, change - histidine names based on any existing protonation, and renaming residues/atoms - and generating 'bond' commands for carbohydrates. - The command will try to report any potential problems that LEaP might encounter. + It will handle things like choosing alternate atom locations, removing + waters/hydrogen atoms from the structure, renaming residues and generating + 'bond' commands for disulfide bonds, change histidine names based on any + existing protonation, and renaming residues/atoms and generating 'bond' + commands for carbohydrates. + +\end_layout + +\begin_layout Standard +If hydrogen atoms are present in the structure, the command will attempt + a simple and straightforward determination of the protonation state of + any histidine residues based on where hydrogens are bonded, and assign + the appropriate residue name. + The command will also identify any existing disulfide bonds as well as + potential disulfide bonds and generate the corresponding LEaP ‘bond’ commands + which can be applied after the structure is loaded in LEaP. + Potential disulfide bonding atoms can be identified via a user-specifiable + mask expression. \end_layout \begin_layout Standard @@ -7560,6 +7573,40 @@ By default, sugars will have their residue names changed to those compatible about any residues/atoms that require charge to be adjusted. \end_layout +\begin_layout Standard +The command will try to report any potential problems that LEaP might encounter. + These include residue names that may be unrecognized (and therefore may + not have parameters), mismatches between detected sugar form/chirality + and form/chirality based on the sugar residue name, unrecognized sugar + linkages, and so on. + +\end_layout + +\begin_layout Standard +For example, the following input prepares PDB 4zzw for processing with PDB, + putting the proper leap commands in leap.4zzw.in, writing the prepared PDB + to 4zzw.cpptraj.pdb, removing waters and hydrogen atoms, and keeping alternate + atom locations with the highest occupancy: +\end_layout + +\begin_layout LyX-Code +parm 4zzw.pdb +\end_layout + +\begin_layout LyX-Code +loadcrd 4zzw.pdb name MyCrd +\end_layout + +\begin_layout LyX-Code +prepareforleap crdset MyCrd name Final out leap.4zzw.in leapunitname m +\backslash + +\end_layout + +\begin_layout LyX-Code + pdbout 4zzw.cpptraj.pdb nowat noh keepaltloc highestocc +\end_layout + \begin_layout Subsubsection* Sugar Residue/Atom Name Mapping File \end_layout From fe61c4d7a55d008c943802e875afe82678942b66 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 22 Feb 2022 13:12:44 -0500 Subject: [PATCH 346/368] Hide some debug info --- src/Exec_PrepareForLeap.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 900e4bff53..477dd16688 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -2680,14 +2680,19 @@ const } } // END loop over atoms in residue if (!alocMap.empty()) { - mprintf("DEBUG: Alternate loc. for %s\n", topIn.TruncResNameOnumId(rnum).c_str()); + if (debug_ > 0) + mprintf("DEBUG: Alternate loc. for %s\n", topIn.TruncResNameOnumId(rnum).c_str()); + // Loop over atoms with alternate locations for (AlocMapType::const_iterator it = alocMap.begin(); it != alocMap.end(); ++it) { - // Print - mprintf("\t'%s'", *(it->first)); - for (std::vector::const_iterator at = it->second.begin(); - at != it->second.end(); ++at) - mprintf(" %s[%c]", *(topIn[*at].Name()), topIn.AtomAltLoc()[*at]); - mprintf("\n"); + if (debug_ > 0) { + // Print all alternate atoms + mprintf("\t'%s'", *(it->first)); + for (std::vector::const_iterator at = it->second.begin(); + at != it->second.end(); ++at) + mprintf(" %s[%c]", *(topIn[*at].Name()), topIn.AtomAltLoc()[*at]); + mprintf("\n"); + } + // For each, choose which location to keep. if (altLocStr.size() == 1) { // Keep only specified character char altLocChar = altLocStr[0]; @@ -2720,7 +2725,7 @@ const atomsToKeep[*at] = false; } } - } + } // END loop over atoms with alternate locations } } // END loop over residue numbers } From 6928ca4edfaf3ec8f58f932439f8b36125b85e75 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 23 Feb 2022 12:39:39 -0500 Subject: [PATCH 347/368] Indicate that sugars with no linkages are likely missing atoms and are incomplete. --- src/Exec_PrepareForLeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 477dd16688..0736c13553 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -1496,7 +1496,7 @@ const //} std::string linkcode; if (linkages.empty()) { - mprintf("\t No linkages.\n"); + mprintf("\t No linkages (may be missing atoms).\n"); resStatIn[rnum] = SUGAR_NO_LINKAGE; return linkcode; } else { @@ -3578,7 +3578,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; } else if ( *it == SUGAR_NO_LINKAGE ) { - mprintf("\t%s%s is a sugar with no linkages.\n", + mprintf("\t%s%s is an incomplete sugar with no linkages.\n", msg2, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); fatal_errors++; } else if ( *it == SUGAR_NO_CHAIN_FOR_LINK ) { From f905527ae5dea618d6f864f04de98f6aa117776d Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 24 Feb 2022 14:09:22 -0500 Subject: [PATCH 348/368] Add usesugarname keyword --- src/Exec_PrepareForLeap.cpp | 23 +++++++++++++++++++---- src/Exec_PrepareForLeap.h | 1 + 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 0736c13553..d281a73aa4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -237,6 +237,7 @@ std::string Exec_PrepareForLeap::SugarToken::SetFromLine(ArgList const& line) { Exec_PrepareForLeap::Exec_PrepareForLeap() : Exec(COORDS), errorsAreFatal_(true), hasGlycam_(false), + useSugarName_(false), debug_(0) { SetHidden(false); @@ -1626,7 +1627,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, formstr_[pdb_glycam->second.Form()]); if (sugarInfo.Form() != UNKNOWN_FORM) resStat_[rnum] = SUGAR_NAME_MISMATCH; - if (sugar.IsMissingAtoms()) { + if (useSugarName_) { + mprintf("\tSetting form based on residue name.\n"); + sugarInfo.SetForm( pdb_glycam->second.Form() ); + } else if (sugar.IsMissingAtoms()) { mprintf("Warning: Residue was missing atoms; setting form based on residue name.\n"); sugarInfo.SetForm( pdb_glycam->second.Form() ); } @@ -1639,7 +1643,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, chirstr_[pdb_glycam->second.Chirality()]); if (sugarInfo.Chirality() != UNKNOWN_CHIR) resStat_[rnum] = SUGAR_NAME_MISMATCH; - if (sugar.IsMissingAtoms()) { + if (useSugarName_) { + mprintf("\tSetting chirality based on residue name.\n"); + sugarInfo.SetChirality( pdb_glycam->second.Chirality() ); + } else if (sugar.IsMissingAtoms()) { mprintf("Warning: Residue was missing atoms; setting chirality based on residue name.\n"); sugarInfo.SetChirality( pdb_glycam->second.Chirality() ); } @@ -1652,7 +1659,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, ringstr_[pdb_glycam->second.RingType()]); if (sugarInfo.RingType() != UNKNOWN_RING) resStat_[rnum] = SUGAR_NAME_MISMATCH; - if (sugar.IsMissingAtoms()) { + if (useSugarName_) { + mprintf("Setting ring type bsaed on residue name.\n"); + sugarInfo.SetRingType( pdb_glycam->second.RingType() ); + } else if (sugar.IsMissingAtoms()) { mprintf("Warning: Residue was missing atoms; setting ring type based on residue name.\n"); sugarInfo.SetRingType( pdb_glycam->second.RingType() ); } @@ -3122,7 +3132,7 @@ void Exec_PrepareForLeap::Help() const "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars |\n" "\t sugarmask [noc1search] [nosplitres] [resmapfile ]\n" - "\t [hasglycam]\n" + "\t [hasglycam] [usesugarname]\n" "\t }]\n" " Prepare the structure in the given coords set for easier processing\n" " with the LEaP program from AmberTools. Any existing/potential\n" @@ -3404,6 +3414,11 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) hasGlycam_ = argIn.hasKey("hasglycam"); if (hasGlycam_) mprintf("\tAssuming sugars already have glycam residue names.\n"); + useSugarName_ = argIn.hasKey("usesugarname"); + if (useSugarName_) + mprintf("\tWill set up sugars based on residue names even if detected geometry differs.\n"); + else + mprintf("\tWill set up sugars based on detected geometry.\n"); // If preparing sugars, need to set up an atom map and potentially // search for terminal sugars/missing bonds. Do this here after all atom diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 1fff7d5be5..0be6e83c40 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -168,6 +168,7 @@ class Exec_PrepareForLeap : public Exec { std::string leapunitname_; bool errorsAreFatal_; ///< If false, try to skip errors. bool hasGlycam_; ///< If true, assume sugars already have glycam names + bool useSugarName_; ///< If true, base form/chirality on name instead of geometry int debug_; ///< Debug level std::string solventResName_; ///< Solvent residue name //std::string terminalHydroxylName_; ///< Terminal hydroxyl name FIXME this info should be in a separate file From cc40e91610667efac67862729696442e43680de8 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 24 Feb 2022 14:23:32 -0500 Subject: [PATCH 349/368] Add usesugarname keyword to manual --- doc/cpptraj.lyx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index 8c10c13780..16be7558f5 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -7196,7 +7196,7 @@ prepareforleap crdset [frame <#>] name \end_layout \begin_layout LyX-Code - [hasglycam] + [hasglycam] [usesugarname] \end_layout \begin_layout LyX-Code @@ -7538,6 +7538,12 @@ resmapfile just check sugar form/chirality/linkage. \end_layout +\begin_layout Description +[usesugarname] If a mismatch is detected between the sugar anomer type/configura +tion based on geometry and anomer type/configuration based on the residue + name, use the anomer type/configuration based on name. +\end_layout + \end_deeper \begin_layout Standard This command will prepare a structure (usually from a PDB) for processing @@ -7565,7 +7571,8 @@ If hydrogen atoms are present in the structure, the command will attempt \begin_layout Standard By default, sugars will have their residue names changed to those compatible - with the GLYCAM force field based on their form, chirality, and linkage. + with the GLYCAM force field based on their anomer type (form), configuration + (chirality), and linkage. Any recognized functional groups that are part of sugar residues (hydroxyl, acetyl, sulfate, etc) will be split into separate residues as required by GLYCAM. From a5b91b03ba011b060a138eb801e6e12eb2ae63ba Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 25 Feb 2022 08:33:51 -0500 Subject: [PATCH 350/368] Change usesugarname to determinesugarsby to make it a choice for the user. --- doc/cpptraj.lyx | 14 ++++++++++---- src/Exec_PrepareForLeap.cpp | 19 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index 16be7558f5..167b1ae3a8 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -7196,7 +7196,7 @@ prepareforleap crdset [frame <#>] name \end_layout \begin_layout LyX-Code - [hasglycam] [usesugarname] + [hasglycam] [determinesugarsby {geometry|name}] \end_layout \begin_layout LyX-Code @@ -7539,9 +7539,15 @@ resmapfile \end_layout \begin_layout Description -[usesugarname] If a mismatch is detected between the sugar anomer type/configura -tion based on geometry and anomer type/configuration based on the residue - name, use the anomer type/configuration based on name. +[determinesugarsby +\begin_inset space ~ +\end_inset + +{geometry|name}] Determine whether sugar anomer type/configuration should + be chosen based on sugar geometry (default) or the residue name. + CPPTRAJ will report when a mismatch is detected between the sugar anomer + type/configuration based on geometry and anomer type/configuration based + on the residue name. \end_layout \end_deeper diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index d281a73aa4..ad17631e90 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3132,7 +3132,7 @@ void Exec_PrepareForLeap::Help() const "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars |\n" "\t sugarmask [noc1search] [nosplitres] [resmapfile ]\n" - "\t [hasglycam] [usesugarname]\n" + "\t [hasglycam] [determinesugarsby {geom|name}]\n" "\t }]\n" " Prepare the structure in the given coords set for easier processing\n" " with the LEaP program from AmberTools. Any existing/potential\n" @@ -3414,11 +3414,18 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) hasGlycam_ = argIn.hasKey("hasglycam"); if (hasGlycam_) mprintf("\tAssuming sugars already have glycam residue names.\n"); - useSugarName_ = argIn.hasKey("usesugarname"); - if (useSugarName_) - mprintf("\tWill set up sugars based on residue names even if detected geometry differs.\n"); - else - mprintf("\tWill set up sugars based on detected geometry.\n"); + // Get how sugars should be determined (geometry/name) + std::string determineSugarsBy = argIn.GetStringKey("determinesugarsby", "geometry"); + if (determineSugarsBy == "geometry") { + useSugarName_ = false; + mprintf("\tWill determine sugar anomer type/configuration by geometry.\n"); + } else if (determineSugarsBy == "name") { + useSugarName_ = true; + mprintf("\tWill determine sugar anomer type/configuration from residue name.\n"); + } else { + mprinterr("Error: Invalid argument for 'determinesugarsby': %s\n", determineSugarsBy.c_str()); + return CpptrajState::ERR; + } // If preparing sugars, need to set up an atom map and potentially // search for terminal sugars/missing bonds. Do this here after all atom From c9baa46ef728cd871c33483323cf94e1189347a4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 1 Mar 2022 13:59:21 -0500 Subject: [PATCH 351/368] Change 'form' to 'anomer type' for all output text --- src/Exec_PrepareForLeap.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ad17631e90..b375c6a305 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -206,7 +206,7 @@ std::string Exec_PrepareForLeap::SugarToken::SetFromLine(ArgList const& line) { else if (line[2] == "B") form_ = BETA; else { - mprinterr("Error: Unrecognized form: %s\n" + mprinterr("Error: Unrecognized anomer type: %s\n" "Error: Line: %s\n", line[2].c_str(), lineIn); return std::string(""); } @@ -1596,10 +1596,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, // chirality, or both. // Try to fill in info based on the residue name (pdb_glycam->second). if (sugarInfo.Form() == UNKNOWN_FORM) { - mprintf("Warning: Could not determine form from coordinates.\n"); + mprintf("Warning: Could not determine anomer type from coordinates.\n"); if (pdb_glycam->second.Form() == UNKNOWN_FORM) return 0; - mprintf("Warning: Setting form based on residue name.\n"); + mprintf("Warning: Setting anomer type based on residue name.\n"); sugarInfo.SetForm( pdb_glycam->second.Form() ); } if (sugarInfo.Chirality() == UNKNOWN_CHIR) { @@ -1622,16 +1622,16 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, if (pdb_glycam->second.Form() != UNKNOWN_FORM && pdb_glycam->second.Form() != sugarInfo.Form()) { - mprintf("Warning: '%s' detected form is %s but form based on name is %s.\n", + mprintf("Warning: '%s' detected anomer type is %s but anomer type based on name is %s.\n", sugarName.c_str(), formstr_[sugarInfo.Form()], formstr_[pdb_glycam->second.Form()]); if (sugarInfo.Form() != UNKNOWN_FORM) resStat_[rnum] = SUGAR_NAME_MISMATCH; if (useSugarName_) { - mprintf("\tSetting form based on residue name.\n"); + mprintf("\tSetting anomer type based on residue name.\n"); sugarInfo.SetForm( pdb_glycam->second.Form() ); } else if (sugar.IsMissingAtoms()) { - mprintf("Warning: Residue was missing atoms; setting form based on residue name.\n"); + mprintf("Warning: Residue was missing atoms; setting anomer type based on residue name.\n"); sugarInfo.SetForm( pdb_glycam->second.Form() ); } } @@ -1683,11 +1683,11 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, } // Sanity check if (formStr.empty()) { - mprinterr("Internal Error: Could not set form string.\n"); + mprinterr("Internal Error: Could not set anomer type string.\n"); return 1; } - mprintf("\t %s detected form is %s(%s)-%s-%s\n", sugarName.c_str(), + mprintf("\t %s detected anomer type is %s(%s)-%s-%s\n", sugarName.c_str(), formstr_[sugarInfo.Form()], formStr.c_str(), chirstr_[sugarInfo.Chirality()], ringstr_[sugarInfo.RingType()]); @@ -3588,7 +3588,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else *it = VALIDATED; } else if ( *it == SUGAR_NAME_MISMATCH ) { - mprintf("\t%s%s sugar form and/or chirality is not consistent with name.\n", + mprintf("\t%s%s sugar anomer type and/or chirality is not consistent with name.\n", msg1, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); // ----- Fatal Errors ---- } else if ( *it == SUGAR_UNRECOGNIZED_LINK_RES ) { From fd82e23cc05020d89f97191de639a9c5c799cbf5 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 1 Mar 2022 14:01:52 -0500 Subject: [PATCH 352/368] Chirality -> configuration for output text --- src/Exec_PrepareForLeap.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b375c6a305..e9da73311d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -215,7 +215,7 @@ std::string Exec_PrepareForLeap::SugarToken::SetFromLine(ArgList const& line) { else if (line[3] == "L") chir_ = IS_L; else { - mprinterr("Error: Unrecognized chirality: %s\n" + mprinterr("Error: Unrecognized configuration: %s\n" "Error: Line: %s\n", line[3].c_str(), lineIn); return std::string(""); } @@ -1204,7 +1204,7 @@ const DetermineChirality(sugar.HighestStereocenter(), topIn, frameIn, cdebug); if (ctypeR == Cpptraj::Chirality::ERR) { - mprinterr("Error: Could not determine chirality for furanose.\n"); // TODO warn? + mprinterr("Error: Could not determine configuration for furanose.\n"); // TODO warn? return 1; } if (ctypeR == Cpptraj::Chirality::IS_R) @@ -1603,10 +1603,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, sugarInfo.SetForm( pdb_glycam->second.Form() ); } if (sugarInfo.Chirality() == UNKNOWN_CHIR) { - mprintf("Warning: Could not determine chirality from coordinates.\n"); + mprintf("Warning: Could not determine configuration from coordinates.\n"); if (pdb_glycam->second.Chirality() == UNKNOWN_CHIR) return 0; - mprintf("Warning: Setting chirality based on residue name.\n"); + mprintf("Warning: Setting configuration based on residue name.\n"); sugarInfo.SetChirality( pdb_glycam->second.Chirality() ); } if (sugarInfo.RingType() == UNKNOWN_RING) { @@ -1638,16 +1638,16 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, if (pdb_glycam->second.Chirality() != UNKNOWN_CHIR && pdb_glycam->second.Chirality() != sugarInfo.Chirality()) { - mprintf("Warning: '%s' detected chirality is %s but chirality based on name is %s.\n", + mprintf("Warning: '%s' detected configuration is %s but configuration based on name is %s.\n", sugarName.c_str(), chirstr_[sugarInfo.Chirality()], chirstr_[pdb_glycam->second.Chirality()]); if (sugarInfo.Chirality() != UNKNOWN_CHIR) resStat_[rnum] = SUGAR_NAME_MISMATCH; if (useSugarName_) { - mprintf("\tSetting chirality based on residue name.\n"); + mprintf("\tSetting configuration based on residue name.\n"); sugarInfo.SetChirality( pdb_glycam->second.Chirality() ); } else if (sugar.IsMissingAtoms()) { - mprintf("Warning: Residue was missing atoms; setting chirality based on residue name.\n"); + mprintf("Warning: Residue was missing atoms; setting configuration based on residue name.\n"); sugarInfo.SetChirality( pdb_glycam->second.Chirality() ); } } @@ -3588,7 +3588,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) else *it = VALIDATED; } else if ( *it == SUGAR_NAME_MISMATCH ) { - mprintf("\t%s%s sugar anomer type and/or chirality is not consistent with name.\n", + mprintf("\t%s%s sugar anomer type and/or configuration is not consistent with name.\n", msg1, topIn.TruncResNameOnumId(it-resStat_.begin()).c_str()); // ----- Fatal Errors ---- } else if ( *it == SUGAR_UNRECOGNIZED_LINK_RES ) { From e771c1adb73c155e3652d1f8a8d21003e6e0202e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 1 Mar 2022 14:09:24 -0500 Subject: [PATCH 353/368] Change form/chirality to anomer/config --- dat/Carbohydrate_PDB_Glycam_Names.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dat/Carbohydrate_PDB_Glycam_Names.txt b/dat/Carbohydrate_PDB_Glycam_Names.txt index 7a72948e73..e85dd1b46e 100644 --- a/dat/Carbohydrate_PDB_Glycam_Names.txt +++ b/dat/Carbohydrate_PDB_Glycam_Names.txt @@ -1,7 +1,7 @@ # This file contains the mapping from common PDB names to Glycam residue codes. # Information obtained from mining the PDB chemical database (components.cif). # Last updated 11/12/21 12:05:19 -#ResName GlycamCode Form Chirality RingType "Name" +#ResName GlycamCode Anomer Config RingType "Name" 64K A A D P "alpha-D-arabinopyranose" AHR A A L F "alpha-L-arabinofuranose" ARA A A L P "alpha-L-arabinopyranose" From 81b570827fddc1e5789deddac10977d7cada547a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 1 Mar 2022 14:10:37 -0500 Subject: [PATCH 354/368] Change form to anomer type and chirality to configuration in the manual. --- doc/cpptraj.lyx | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index 167b1ae3a8..977c4154fe 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -7535,7 +7535,7 @@ resmapfile \begin_layout Description [hasglycam] If specified, assume sugars already have GLYCAM residue names; - just check sugar form/chirality/linkage. + just check sugar anomer type/configuration/linkage. \end_layout \begin_layout Description @@ -7560,7 +7560,8 @@ This command will prepare a structure (usually from a PDB) for processing 'bond' commands for disulfide bonds, change histidine names based on any existing protonation, and renaming residues/atoms and generating 'bond' commands for carbohydrates. - + The command can also call LEaP directly to generate the parameters once + the structure is prepared. \end_layout \begin_layout Standard @@ -7577,21 +7578,23 @@ If hydrogen atoms are present in the structure, the command will attempt \begin_layout Standard By default, sugars will have their residue names changed to those compatible - with the GLYCAM force field based on their anomer type (form), configuration - (chirality), and linkage. + with the GLYCAM force field based on their anomer type (alpha/beta), configurat +ion (D/L), and linkages (glycosidic and covalent sugar to non-sugar). Any recognized functional groups that are part of sugar residues (hydroxyl, acetyl, sulfate, etc) will be split into separate residues as required by GLYCAM. If this happens and 'runleap' has not been specified, CPPTRAJ will warn about any residues/atoms that require charge to be adjusted. + If 'runleap' has not been specified the command will warn about any atoms + that need to have their charges adjusted after LEaP is run. \end_layout \begin_layout Standard The command will try to report any potential problems that LEaP might encounter. These include residue names that may be unrecognized (and therefore may - not have parameters), mismatches between detected sugar form/chirality - and form/chirality based on the sugar residue name, unrecognized sugar - linkages, and so on. + not have parameters), mismatches between detected sugar anomer type/configurati +on and anomer type/configuration based on the sugar residue name, unrecognized + sugar linkages, and so on. \end_layout @@ -7633,11 +7636,15 @@ This file controls how CPPTRAJ will name sugars based on sugar form/chirality \end_layout \begin_layout LyX-Code -Format: "" +Format: "" +\end_layout + +\begin_layout LyX-Code +Anomer: A=alpha, B=beta \end_layout \begin_layout LyX-Code -Form: A=alpha, B=beta +Config: D/L \end_layout \begin_layout LyX-Code @@ -7653,12 +7660,12 @@ The second section contains PDB to GLYCAM atom name maps for residues: \end_layout \begin_layout LyX-Code -Format: ,[,] +Format: ,[,] … \end_layout \begin_layout LyX-Code -If (A=alpha, B=beta) is specified, the atom name map is only valid +If (A=alpha, B=beta) is specified, the atom name map is only valid for that specific form. \end_layout From 56f747953539e72e08806ade3e5c6a3b3a403c79 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 1 Mar 2022 14:11:08 -0500 Subject: [PATCH 355/368] 6.4.0. Minor version increment for major enhancements and improvements to prepareforleap command. --- src/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Version.h b/src/Version.h index 14612c97e0..f4798eb5a9 100644 --- a/src/Version.h +++ b/src/Version.h @@ -12,7 +12,7 @@ * Whenever a number that precedes is incremented, all subsequent * numbers should be reset to 0. */ -#define CPPTRAJ_INTERNAL_VERSION "V6.3.0" +#define CPPTRAJ_INTERNAL_VERSION "V6.4.0" /// PYTRAJ relies on this #define CPPTRAJ_VERSION_STRING CPPTRAJ_INTERNAL_VERSION #endif From fe5f462c22509759af9a7e16ed51143117853655 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 1 Mar 2022 15:23:39 -0500 Subject: [PATCH 356/368] Add placeholder citation. Fix formatting of help text. --- doc/cpptraj.bib | 10 ++++++++-- doc/cpptraj.lyx | 23 ++++++++++++++++++----- src/Exec_PrepareForLeap.cpp | 6 ++++-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/doc/cpptraj.bib b/doc/cpptraj.bib index 25dfddc6ec..fcc759839f 100644 --- a/doc/cpptraj.bib +++ b/doc/cpptraj.bib @@ -144,7 +144,7 @@ @Article{Ester96 } @Article{Roe13, - author = {Roe, Daniel R. and Cheatham, III, T.E.}, + author = {Roe, Daniel R. and Cheatham, III, Thomas E.}, title = {{PTRAJ and CPPTRAJ: Software for Processing and Analysis of Molecular Dynamics Trajectory Data}}, journal = {J. Chem. Theory Comput.}, @@ -241,7 +241,7 @@ @Article{Hunenberger1995 } @Article{Galindo2015, - author = {Galindo-Murillo, Rodrigo and Roe, Daniel R. and Cheatham, III, T.E.}, + author = {Galindo-Murillo, Rodrigo and Roe, Daniel R. and Cheatham, III, Thomas E.}, title = {{Convergence and reproducibility in molecular dynamics simulations of the DNA duplex d(GCACGAACGAACGAACGC)}}, journal = {Biochim. Biophys. Acta}, @@ -426,3 +426,9 @@ @article{Chen2021 year = {2021} } +@article{Roe2022, +author = {Roe, Daniel R. and Bergonzo, Christina}, +journal = {Journal of Computational Chemistry}, +title = {{PrepareForLeap: An Automated Tool for Fast PDB-to-Parameter Generation}}, +year = {2022} +} diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index 977c4154fe..38e360cb60 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -7149,8 +7149,11 @@ prepareforleap crdset [frame <#>] name \end_layout \begin_layout LyX-Code - [nowat [watermask ] [noh] [keepaltloc {|highestocc}] + [nowat [watermask ] [noh] +\end_layout + +\begin_layout LyX-Code + [keepaltloc {|highestocc}] \end_layout \begin_layout LyX-Code @@ -7191,8 +7194,11 @@ prepareforleap crdset [frame <#>] name \end_layout \begin_layout LyX-Code - sugarmask [noc1search] [nosplitres] [resmapfile - ] + sugarmask [noc1search] [nosplitres] +\end_layout + +\begin_layout LyX-Code + [resmapfile ] \end_layout \begin_layout LyX-Code @@ -7391,7 +7397,7 @@ id> or the location with the highest occupancy if \end_layout \begin_layout Description -[dterminemolmask +[determinemolmask \begin_inset space ~ \end_inset @@ -7555,6 +7561,13 @@ resmapfile This command will prepare a structure (usually from a PDB) for processing with the Amber program LEaP to generate topology and coordinates files for MD simulations. +\begin_inset CommandInset citation +LatexCommand citep +key "Roe2022" +literal "true" + +\end_inset + It will handle things like choosing alternate atom locations, removing waters/hydrogen atoms from the structure, renaming residues and generating 'bond' commands for disulfide bonds, change histidine names based on any diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e9da73311d..e823f6c7e4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3121,7 +3121,8 @@ void Exec_PrepareForLeap::Help() const "\t[pdbout [terbymol]]\n" "\t[leapunitname ] [out [runleap ]]\n" "\t[skiperrors]\n" - "\t[nowat [watermask ] [noh] [keepaltloc {|highestocc}]\n" + "\t[nowat [watermask ] [noh]\n" + "\t[keepaltloc {|highestocc}]\n" "\t[stripmask ] [solventresname ]\n" "\t[molmask ...] [determinemolmask ]\n" "\t[{nohisdetect |\n" @@ -3131,7 +3132,8 @@ void Exec_PrepareForLeap::Help() const "\t existingdisulfides |\n" "\t [cysmask ] [disulfidecut ] [newcysname ]}]\n" "\t[{nosugars |\n" - "\t sugarmask [noc1search] [nosplitres] [resmapfile ]\n" + "\t sugarmask [noc1search] [nosplitres]\n" + "\t [resmapfile ]\n" "\t [hasglycam] [determinesugarsby {geom|name}]\n" "\t }]\n" " Prepare the structure in the given coords set for easier processing\n" From 820b86e87f658fa449e4335fb76a91118f2e21bd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 1 Mar 2022 16:23:38 -0500 Subject: [PATCH 357/368] If CPPTRAJHOME is not set, try to find where the map file is for prepareforleap test. --- test/Test_PrepareForLeap/RunTest.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test/Test_PrepareForLeap/RunTest.sh b/test/Test_PrepareForLeap/RunTest.sh index e823be6bfc..e8cc5c0be9 100755 --- a/test/Test_PrepareForLeap/RunTest.sh +++ b/test/Test_PrepareForLeap/RunTest.sh @@ -7,6 +7,14 @@ CleanFiles cpptraj.in 1qos.cpptraj.pdb leap.1qos.in \ INPUT='-i cpptraj.in' +# Just in case CPPTRAJHOME is not set, see if we can find the map file +RESMAPFILE='' +if [ -z "$CPPTRAJHOME" ] ; then + if [ -e '../../dat/Carbohydrate_PDB_Glycam_Names.txt' ] ; then + RESMAPFILE='resmapfile ../../dat/Carbohydrate_PDB_Glycam_Names.txt' + fi +fi + cat > cpptraj.in < Date: Wed, 2 Mar 2022 10:52:03 -0500 Subject: [PATCH 358/368] Use string for glycam code search in case residue names ever have more chars --- src/Exec_PrepareForLeap.cpp | 22 ++++++++++++---------- src/Exec_PrepareForLeap.h | 7 ++++--- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index e823f6c7e4..ec7b2b44e4 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -487,7 +487,7 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) } // END loop over name pair columns // Map will be for each glycam res for (ArgList::const_iterator gres = glycamnames.begin(); gres != glycamnames.end(); ++gres) - glycam_res_idx_map_.insert( ResIdxPairType( (*gres)[0], glycam_map_idx ) ); + glycam_res_idx_map_.insert( ResIdxPairType( *gres, glycam_map_idx ) ); } else if (section == PDB_LINKAGE_RES_SECTION) { // if (argline.Nargs() != 2) { @@ -1109,15 +1109,15 @@ const } /** Change PDB atom names in residue to glycam ones. */ -int Exec_PrepareForLeap::ChangePdbAtomNamesToGlycam(char resChar, Residue const& res, +int Exec_PrepareForLeap::ChangePdbAtomNamesToGlycam(std::string const& resCode, Residue const& res, Topology& topIn, FormTypeEnum form) const { // Get the appropriate map - ResIdxMapType::const_iterator resIdxPair = glycam_res_idx_map_.find( resChar ); + ResIdxMapType::const_iterator resIdxPair = glycam_res_idx_map_.find( resCode ); if (resIdxPair == glycam_res_idx_map_.end()) { // No map needed for this residue - //mprintf("DEBUG: No atom map for residue '%c'.\n", resChar); + //mprintf("DEBUG: No atom map for residue '%s'.\n", resCode.c_str()); return 0; } NameMapType const& currentMap = pdb_glycam_name_maps_[resIdxPair->second]; @@ -1701,10 +1701,10 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, } // Change PDB names to Glycam ones - // FIXME get rid of resChar - char resChar = pdb_glycam->second.GlycamCode()[0]; + std::string resCode = pdb_glycam->second.GlycamCode(); if (!hasGlycam_) { - if (ChangePdbAtomNamesToGlycam(resChar, res, topIn, sugarInfo.Form())) { + if (ChangePdbAtomNamesToGlycam(resCode, res, topIn, sugarInfo.Form())) + { mprinterr("Error: Changing PDB atom names to Glycam failed.\n"); return 1; } @@ -1713,10 +1713,12 @@ int Exec_PrepareForLeap::IdentifySugar(Sugar& sugarIn, Topology& topIn, // Modify residue char to indicate L form if necessary. // We do this here and not above so as not to mess with the // linkage determination. - if (sugarInfo.Chirality() == IS_L) - resChar = tolower( resChar ); + if (sugarInfo.Chirality() == IS_L) { + for (std::string::iterator it = resCode.begin(); it != resCode.end(); ++it) + *it = tolower( *it ); + } // Set new residue name - NameType newResName( linkcode + std::string(1,resChar) + formStr ); + NameType newResName( linkcode + resCode + formStr ); if (!hasGlycam_) { mprintf("\t Changing %s to Glycam resname: %s\n", topIn.TruncResNameOnumId(rnum).c_str(), *newResName); diff --git a/src/Exec_PrepareForLeap.h b/src/Exec_PrepareForLeap.h index 0be6e83c40..8024a1d32e 100644 --- a/src/Exec_PrepareForLeap.h +++ b/src/Exec_PrepareForLeap.h @@ -87,7 +87,8 @@ class Exec_PrepareForLeap : public Exec { /// \return Sugar with atom indices set up Sugar IdSugarRing(int, Topology const&) const; /// Change PDB atom names to Glycam names - int ChangePdbAtomNamesToGlycam(char, Residue const&, Topology&, FormTypeEnum) const; + int ChangePdbAtomNamesToGlycam(std::string const&, Residue const&, + Topology&, FormTypeEnum) const; /// Determine form/chirality for furanose int DetermineUpOrDown(SugarToken&, Sugar const&, Topology const&, Frame const&) const; /// Determine form/chirliaty for pyranose @@ -157,8 +158,8 @@ class Exec_PrepareForLeap : public Exec { /// Hold maps of pdb atom names to glycam atom names (res in beta form) std::vector pdb_glycam_name_maps_B_; - typedef std::pair ResIdxPairType; - typedef std::map ResIdxMapType; + typedef std::pair ResIdxPairType; + typedef std::map ResIdxMapType; /// Map glycam residue chars to pdb-glycam atom name map index (pdb_glycam_name_maps_) ResIdxMapType glycam_res_idx_map_; From e9991c9d94f0c3fd6f5e61509e18f4b8a7392bd2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 11:00:53 -0500 Subject: [PATCH 359/368] Remove old code --- src/Exec_PrepareForLeap.cpp | 112 ++++-------------------------------- 1 file changed, 11 insertions(+), 101 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index ec7b2b44e4..82655bf17d 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -140,19 +140,18 @@ inline static int find_new_idx(int oldidx, std::vector const& atomMap, int /** Remap internal indices according to given map. */ void Exec_PrepareForLeap::Sugar::RemapIndices(Iarray const& atomMap, int at0, int at1) { // Always try the anomeric atom - anomeric_atom_ = find_new_idx(anomeric_atom_, atomMap, at0, at1); //atomMap[anomeric_atom_]; - //if (NotSet()) return; + anomeric_atom_ = find_new_idx(anomeric_atom_, atomMap, at0, at1); //mprintf("DEBUG: Ring O old = %i ring O new %i\n", ring_oxygen_atom_+1, atomMap[ring_oxygen_atom_]+1); if (ring_oxygen_atom_ != -1) - ring_oxygen_atom_ = find_new_idx(ring_oxygen_atom_, atomMap, at0, at1); //atomMap[ring_oxygen_atom_]; + ring_oxygen_atom_ = find_new_idx(ring_oxygen_atom_, atomMap, at0, at1); if (ano_ref_atom_ != -1) - ano_ref_atom_ = find_new_idx(ano_ref_atom_, atomMap, at0, at1); //atomMap[ano_ref_atom_]; + ano_ref_atom_ = find_new_idx(ano_ref_atom_, atomMap, at0, at1); if (highest_stereocenter_ != -1) - highest_stereocenter_ = find_new_idx(highest_stereocenter_, atomMap, at0, at1); //atomMap[highest_stereocenter_]; + highest_stereocenter_ = find_new_idx(highest_stereocenter_, atomMap, at0, at1); for (Iarray::iterator it = ring_atoms_.begin(); it != ring_atoms_.end(); ++it) - *it = find_new_idx(*it, atomMap, at0, at1); //atomMap[*it]; + *it = find_new_idx(*it, atomMap, at0, at1); for (Iarray::iterator it = chain_atoms_.begin(); it != chain_atoms_.end(); ++it) - *it = find_new_idx(*it, atomMap, at0, at1); //atomMap[*it]; + *it = find_new_idx(*it, atomMap, at0, at1); } // ===== SugarToken class ====================================================== @@ -427,22 +426,6 @@ int Exec_PrepareForLeap::LoadGlycamPdbResMap(std::string const& fnameIn) sResName.c_str(), infile.Filename().full()); return 1; } -/* - if (argline.Nargs() != 3) { - mprinterr("Error: Expected only 3 columns in '%s' res map section, got %i\n", - infile.Filename().full(), argline.Nargs()); - mprinterr("Error: %s\n", ptr); - return 1; - } - ArgList pdbnames( argline[2], "," ); - if (pdbnames.Nargs() < 1) { - mprinterr("Error: No pdb names found.\n"); - mprinterr("Error: %s\n", ptr); - return 1; - } - // TODO handle glycam res names with > 1 char - for (int n = 0; n < pdbnames.Nargs(); n++) - pdb_to_glycam_.insert( PairType(pdbnames[n], argline[1][0]) );*/ } else if (section == PDB_ATOMMAP_SECTION) { // ... if (argline.Nargs() < 2) { @@ -1147,54 +1130,6 @@ int Exec_PrepareForLeap::DetermineUpOrDown(SugarToken& stoken, Topology const& topIn, Frame const& frameIn) const { - /** TEST TEST TEST */ -/* - double t_an = 0; - int ret1 = CalcAnomericTorsion(t_an, sugar.AnomericAtom(), sugar.RingOxygenAtom(), - sugar.ResNum(topIn), - sugar.RingAtoms(), topIn, frameIn); - //if (ret < 0) { - // // This means C1 X substituent missing; non-fatal. - // sugarIn.SetStatus( Sugar::MISSING_C1X ); - // return 1; // TODO return 0? - //} else if (ret > 0) { - // // Error - // return 1; - //} - // The definition of 'up' here is reversed compared to pyranose. - bool t_an_up = !(t_an > 0); - - double t_cc = 0; - int ret2 = CalcConfigCarbonTorsion(t_cc, sugar.HighestStereocenter(), - sugar.ChainAtoms(), topIn, frameIn); - // return 1; - //} else - // t_cc = t_ar; - bool t_cc_up = !(t_cc > 0); - - if (t_cc_up) { - mprintf("DEBUG: Furanose config carbon is UP (D); torsion: %f deg., ret= %i\n", - t_cc*Constants::RADDEG, ret2); - if (t_an_up) - mprintf("DEBUG: Furanose anomeric carbon is UP (beta-D); torsion: %f deg., ret= %i\n", - t_an*Constants::RADDEG, ret1); - else - mprintf("DEBUG: Furanose anomeric carbon is DOWN (alpha-D); torsion %f deg., ret= %i\n", - t_an*Constants::RADDEG, ret2); - } else { - mprintf("DEBUG: Furanose config carbon is DOWN (L); torsion: %f deg., ret= %i\n", - t_cc*Constants::RADDEG, ret2); - if (t_an_up) - mprintf("DEBUG: Furanose anomeric carbon is UP (alpha-L); torsion: %f deg., ret= %i\n", - t_an*Constants::RADDEG, ret1); - else - mprintf("DEBUG: Furanose anomeric carbon is DOWN (beta-L); torsion %f deg., ret= %i\n", - t_an*Constants::RADDEG, ret2); - } -*/ - /** END TEST TEST TEST */ - - int cdebug; if (debug_ > 1) cdebug = 1; @@ -1208,9 +1143,9 @@ const return 1; } if (ctypeR == Cpptraj::Chirality::IS_R) - stoken.SetChirality(IS_D); //isDform = true; + stoken.SetChirality(IS_D); else - stoken.SetChirality(IS_L); //isDform = false; + stoken.SetChirality(IS_L); Cpptraj::Chirality::ChiralType ctypeA = Cpptraj::Chirality:: DetermineChirality(sugar.AnomericAtom(), @@ -1222,12 +1157,10 @@ const if (ctypeR == ctypeA) { // Up, beta - //formStr = "U"; - stoken.SetForm(BETA); //return IS_BETA; + stoken.SetForm(BETA); } else { // Down, alpha - //formStr = "D"; - stoken.SetForm(ALPHA); //return IS_ALPHA; + stoken.SetForm(ALPHA); } return 0; } @@ -1305,7 +1238,6 @@ const (int)t_an_up, (int)t_ar_up, (int)t_cc_up); } - //AnomerRetType form; // Same side is beta, opposite is alpha. if (t_an_up == t_ar_up) { stoken.SetForm(BETA); //form = IS_BETA; @@ -1317,7 +1249,6 @@ const // By the atom ordering used by CalcAnomericRefTorsion and // CalcConfigCarbonTorsion, D is a negative (down) torsion. - //isDform = !t_cc_up; if (!t_cc_up) stoken.SetChirality(IS_D); else @@ -1738,8 +1669,6 @@ int Exec_PrepareForLeap::FindSugarC1Linkages(int rnum1, int c_beg, Topology& topIn, Frame const& frameIn) const { - //int rnum1 = sugar.ResNum(); - //int c_beg = sugar.AnomericAtom(); Residue const& res1 = topIn.SetRes(rnum1); // If the anomeric atom is already bonded to another residue, skip this. for (Atom::bond_iterator bat = topIn[c_beg].bondbegin(); @@ -2742,19 +2671,6 @@ const } // END loop over residue numbers } } -/* - // Remove extra alternate atom locations - if (altLocChar != '\0') { - if (topIn.AtomAltLoc().empty()) { - mprintf("\tNo alternate atom locations.\n"); - } else { - for (int idx = 0; idx != topIn.Natom(); idx++) { - if (topIn.AtomAltLoc()[idx] != ' ' && - topIn.AtomAltLoc()[idx] != altLocChar) - atomsToKeep[idx] = false; - } - } - }*/ // Set up mask of only kept atoms. AtomMask keptAtoms; @@ -3231,9 +3147,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) leapunitname_.c_str()); solventResName_ = argIn.GetStringKey("solventresname", "HOH"); mprintf("\tSolvent residue name: %s\n", solventResName_.c_str()); - // FIXME functional group stuff should be in a file - //terminalHydroxylName_ = argIn.GetStringKey("terminalhydroxylname", "ROH"); - //mprintf("\tTerminal hydroxyl name: %s\n", terminalHydroxylName_.c_str()); + // TODO functional group stuff should be in a file bool prepare_sugars = !argIn.hasKey("nosugars"); if (!prepare_sugars) @@ -3295,10 +3209,6 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) return CpptrajState::ERR; } } - /// Get array of residues with unrecognized PDB names. - //Iarray unrecognizedPdbRes = GetUnrecognizedPdbResidues( topIn ); - /// Get array of unrecognized residues that are also isolated. - //Iarray isolatedPdbRes = GetIsolatedUnrecognizedResidues( topIn, unrecognizedPdbRes ); // Deal with any coordinate modifications bool remove_water = argIn.hasKey("nowat"); From fd1d10ed1aedaa004ab9751ce0091362dc745643 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 11:07:36 -0500 Subject: [PATCH 360/368] Since popen/pclose do not work on windows, disable leap interface for windows. --- src/Exec_PrepareForLeap.cpp | 8 +++++++- src/LeapInterface.cpp | 11 ++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 82655bf17d..9722511aed 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3111,9 +3111,15 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) mprintf("\tPrepared system will be saved to COORDS set '%s'\n", outCoords->legend()); std::string leapffname = argIn.GetStringKey("runleap"); - if (!leapffname.empty()) + if (!leapffname.empty()) { +# ifdef _MSC_VER + mprinterr("Error: Cannot use LEaP interface on windows.\n"); + return CpptrajState::ERR; +# else mprintf("\tWill attempt to run leap with force fields specified in file '%s'\n", leapffname.c_str()); +# endif + } std::string pdbout = argIn.GetStringKey("pdbout"); if (!pdbout.empty()) diff --git a/src/LeapInterface.cpp b/src/LeapInterface.cpp index 29591e07d3..6a29c4793b 100644 --- a/src/LeapInterface.cpp +++ b/src/LeapInterface.cpp @@ -5,7 +5,6 @@ #include "File_TempName.h" #include "StringRoutines.h" #include -//#incl ude using namespace Cpptraj; /** CONSTRUCTOR */ @@ -35,6 +34,9 @@ void LeapInterface::ClearInputFiles() { /** Execute the leap process */ int LeapInterface::execute_leap(FileName const& input) const { +# ifdef _MSC_VER + return 1; +# else /* _MSC_VER */ // Add source commands and quit to temp leap input CpptrajFile leapin; @@ -107,10 +109,16 @@ int LeapInterface::execute_leap(FileName const& input) const { return 1; } return 0; +# endif /* _MSC_VER */ } /** Run leap. */ int LeapInterface::RunLeap() const { +# ifdef _MSC_VER + // popen/pclose does not really work on windows. + mprinterr("Error: LEaP interface cannot be used on windows.\n"); + return 1; +# else // Create temporary leap input file FileName tmp_leap_input = File::GenTempName(); @@ -118,5 +126,6 @@ int LeapInterface::RunLeap() const { // Free up temp name File::FreeTempName( tmp_leap_input ); +# endif return err; } From 2aff325311bc63d8367b6faaf70df04ef27482f2 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 11:27:01 -0500 Subject: [PATCH 361/368] Try to fix up some clang issues. --- src/Analysis_Hist.cpp | 12 ++++-------- src/Cluster/PseudoF.cpp | 8 ++------ src/Exec_PrepareForLeap.cpp | 2 +- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/Analysis_Hist.cpp b/src/Analysis_Hist.cpp index c2b36f6294..a7ec88a6d8 100644 --- a/src/Analysis_Hist.cpp +++ b/src/Analysis_Hist.cpp @@ -339,14 +339,10 @@ Analysis::RetType Analysis_Hist::Setup(ArgList& analyzeArgs, AnalysisSetup& setu mprintf("\tFree energy in kcal/mol will be calculated from bin populations at %f K.\n",Temp_); if (nativeOut_) mprintf("\tUsing internal routine for output. Data will not be stored on the data set list.\n"); - //if (circular_ || gnuplot_) { - // mprintf("\tWarning: gnuplot and/or circular specified; advanced grace/gnuplot\n"); - // mprintf("\t formatting disabled.\n");*/ - if (circular_) - mprintf("\tcircular: Output coordinates will be wrapped.\n"); - if (gnuplot_ && outfile_ == 0) - mprintf("\tgnuplot: Output will be in gnuplot-readable format.\n"); - //} + if (circular_) + mprintf("\tcircular: Output coordinates will be wrapped.\n"); + if (gnuplot_ && outfile_ == 0) + mprintf("\tgnuplot: Output will be in gnuplot-readable format.\n"); if (normalize_ == NORM_SUM) mprintf("\tnorm: Sum over bins will be normalized to 1.0.\n"); else if (normalize_ == NORM_INT) diff --git a/src/Cluster/PseudoF.cpp b/src/Cluster/PseudoF.cpp index abc91c7628..fc829d8cb2 100644 --- a/src/Cluster/PseudoF.cpp +++ b/src/Cluster/PseudoF.cpp @@ -78,12 +78,8 @@ double Cpptraj::Cluster::ComputePseudoF(List const& clusters, double& SSRSST, Me "Pseudo-f: Cluster distance to centroid is %.4f\n" "Pseudo-f: Numerator %.4f over denominator %.4f gives %.4f\n", gss, wss, num, den, pseudof); - //if (outfile.IsOpen()) { - // outfile.Printf("#pSF: %f\n", pseudof); - // This calculation taken directly from ptraj - SSRSST = pseudof*(d_nclusters-1)/(d_ntotal-d_nclusters+pseudof*(d_nclusters-1)); - // outfile.Printf("#SSR/SST: %f\n", SSRSST); - //} + // This calculation taken directly from ptraj + SSRSST = pseudof*(d_nclusters-1)/(d_ntotal-d_nclusters+pseudof*(d_nclusters-1)); return pseudof; } diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 9722511aed..bfaf363ac2 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3189,7 +3189,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // DEBUG - print atom name maps mprintf("\tRes char to atom map index map:\n"); for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) - mprintf("\t %c -> %i\n", mit->first, mit->second); + mprintf("\t %c -> %i\n", mit->first.c_str(), mit->second); PrintAtomNameMap("Atom name maps", pdb_glycam_name_maps_); PrintAtomNameMap("Atom name maps (alpha)", pdb_glycam_name_maps_A_); PrintAtomNameMap("Atom name maps (beta)", pdb_glycam_name_maps_B_); From 4b8e51782ea9c97bc011e1b249fcf0ffe397636b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 11:30:53 -0500 Subject: [PATCH 362/368] Change to Anomer and Config --- devtools/converters/glycam.csv.to.dat/ReadComponents.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index e02a989af1..92382ae11e 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -269,7 +269,7 @@ int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames outfile.Printf("# This file contains the mapping from common PDB names to Glycam residue codes.\n"); outfile.Printf("# Information obtained from mining the PDB chemical database (components.cif).\n"); outfile.Printf("# Last updated %s\n", TimeString().c_str()); - outfile.Printf("#ResName GlycamCode Form Chirality RingType \"Name\"\n"); + outfile.Printf("#ResName GlycamCode Anomer Config RingType \"Name\"\n"); for (SpairArray::const_iterator kt = GlycamCode_to_sugarName.begin(); kt != GlycamCode_to_sugarName.end(); ++kt) From 05c5447bc00c046c460fa94c94976770b8169260 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 11:44:24 -0500 Subject: [PATCH 363/368] Generate code for the Exec_PrepareForLeap::SetGlycamPdbResMap routine. --- .../glycam.csv.to.dat/ReadComponents.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp index 92382ae11e..6963ccba54 100644 --- a/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp +++ b/devtools/converters/glycam.csv.to.dat/ReadComponents.cpp @@ -264,7 +264,8 @@ int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames } // Output - CpptrajFile outfile; + CpptrajFile outfile, codefile; + if (codefile.OpenWrite("code.cpp")) return 1; if (outfile.OpenWrite(f_outfile)) return 1; outfile.Printf("# This file contains the mapping from common PDB names to Glycam residue codes.\n"); outfile.Printf("# Information obtained from mining the PDB chemical database (components.cif).\n"); @@ -295,6 +296,23 @@ int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames outfile.Printf("%s %s %s %s %s \"%s\"\n", jt->c_str(), it->first.c_str(), form.c_str(), chirality.c_str(), ring.c_str(), fullname.c_str()); + std::string formstr, chirstr, ringstr; + if (form == "A") + formstr = "ALPHA"; + else + formstr = "BETA"; + if (chirality == "D") + chirstr = "IS_D"; + else + chirstr = "IS_L"; + if (ring == "P") + ringstr = "PYRANOSE"; + else + ringstr = "FURANOSE"; + codefile.Printf(" pdb_to_glycam_.insert( PairType(\"%s\",\n" + " SugarToken(\"%s\", \"%s\", %s, %s, %s)) );\n", + jt->c_str(), fullname.c_str(), it->first.c_str(), + formstr.c_str(), chirstr.c_str(), ringstr.c_str()); } printf("\n"); } @@ -313,6 +331,7 @@ int GenerateFile(std::string const& f_glycamnames, std::string const& f_resnames outfile.Printf("ASN NLN\n"); outfile.CloseFile(); + codefile.CloseFile(); return 0; } From 44a1eabe8de8292a60e2a0c84b91cdc0a3e9dd53 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 11:51:24 -0500 Subject: [PATCH 364/368] Update internal residue mapping --- src/Exec_PrepareForLeap.cpp | 194 +++++++++++++++++++++++++++++++++++- 1 file changed, 189 insertions(+), 5 deletions(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index bfaf363ac2..b72ca459bc 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -354,17 +354,201 @@ int Exec_PrepareForLeap::LoadPdbResNames(std::string const& fnameIn) /** Load reduced interal PDB to Glycam map. */ void Exec_PrepareForLeap::SetGlycamPdbResMap() { - pdb_to_glycam_.insert( PairType("NAG", - SugarToken("2-acetamido-2-deoxy-beta-D-glucopyranose", "Y", BETA, IS_D, PYRANOSE)) ); - pdb_to_glycam_.insert( PairType("FUC", - SugarToken("alpha-L-fucopyranose", "F", ALPHA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("64K", + SugarToken("alpha-D-arabinopyranose", "A", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("AHR", + SugarToken("alpha-L-arabinofuranose", "A", ALPHA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("ARA", + SugarToken("alpha-L-arabinopyranose", "A", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("ARB", + SugarToken("beta-L-arabinopyranose", "A", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("AXR", + SugarToken("methyl alpha-D-arabinofuranoside", "A", ALPHA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("BXX", + SugarToken("beta-D-arabinofuranose", "A", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("BXY", + SugarToken("alpha-D-arabinofuranose", "A", ALPHA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("FUB", + SugarToken("beta-L-arabinofuranose", "A", BETA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("SEJ", + SugarToken("beta-D-arabinopyranose", "A", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("LDY", + SugarToken("alpha-D-lyxopyranose", "D", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("Z4W", + SugarToken("beta-D-lyxopyranose", "D", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("0MK", + SugarToken("beta-L-ribopyranose", "R", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("32O", + SugarToken("beta-L-ribofuranose", "R", BETA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("BDR", + SugarToken("beta-D-ribofuranose", "R", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("RIB", + SugarToken("alpha-D-ribofuranose", "R", ALPHA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("RIP", + SugarToken("beta-D-ribopyranose", "R", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("YYM", + SugarToken("alpha-D-ribopyranose", "R", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("Z6J", + SugarToken("alpha-L-ribofuranose", "R", ALPHA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("HSY", + SugarToken("alpha-L-xylopyranose", "X", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("HSZ", + SugarToken("beta-D-xylopyranose", "X", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("LXC", + SugarToken("beta-L-xylopyranose", "X", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("XYP", + SugarToken("beta-D-xylopyranose", "X", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("XYS", + SugarToken("alpha-D-xylopyranose", "X", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("XYZ", + SugarToken("beta-D-xylofuranose", "X", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("AFD", + SugarToken("alpha-D-allopyranose", "N", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("ALL", + SugarToken("beta-D-allopyranose", "N", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("VDS", + SugarToken("beta-D-allofuranose", "N", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("VDV", + SugarToken("alpha-D-allofuranose", "N", ALPHA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("WOO", + SugarToken("beta-L-allopyranose", "N", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("Z2D", + SugarToken("alpha-L-allopyranose", "N", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("3MK", + SugarToken("beta-L-altropyranose", "E", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("SHD", + SugarToken("alpha-D-altropyranose", "E", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("Z6H", + SugarToken("alpha-L-altropyranose", "E", ALPHA, IS_L, PYRANOSE)) ); pdb_to_glycam_.insert( PairType("GAL", SugarToken("beta-D-galactopyranose", "L", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GIV", + SugarToken("beta-L-galactopyranose", "L", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GLA", + SugarToken("alpha-D-galactopyranose", "L", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GXL", + SugarToken("alpha-L-galactopyranose", "L", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GZL", + SugarToken("beta-D-galactofuranose", "L", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("BGC", + SugarToken("beta-D-glucopyranose", "G", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GLC", + SugarToken("alpha-D-glucopyranose", "G", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GU4", + SugarToken("2,3,4,6-tetra-O-sulfonato-alpha-D-glucopyranose", "G", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("MGL", + SugarToken("methyl beta-D-glucopyranoside", "G", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("Z8T", + SugarToken("beta-L-glucopyranose", "G", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("4GL", + SugarToken("alpha-D-gulopyranose", "K", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GL0", + SugarToken("beta-D-gulopyranose", "K", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GUP", + SugarToken("alpha-L-gulopyranose", "K", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("Z8H", + SugarToken("beta-L-gulopyranose", "K", BETA, IS_L, PYRANOSE)) ); pdb_to_glycam_.insert( PairType("BMA", SugarToken("beta-D-mannopyranose", "M", BETA, IS_D, PYRANOSE)) ); pdb_to_glycam_.insert( PairType("MAN", SugarToken("alpha-D-mannopyranose", "M", ALPHA, IS_D, PYRANOSE)) ); - // TODO internal atom name map + pdb_to_glycam_.insert( PairType("A5C", + SugarToken("alpha-L-talofuranose", "T", ALPHA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("SDY", + SugarToken("beta-D-talopyranose", "T", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("ZEE", + SugarToken("beta-L-talopyranose", "T", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("BDF", + SugarToken("beta-D-fructopyranose", "C", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("FRU", + SugarToken("beta-D-fructofuranose", "C", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("LFR", + SugarToken("beta-L-fructofuranose", "C", BETA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("YYJ", + SugarToken("1,3,4,6-tetra-O-sulfo-beta-D-fructofuranose", "C", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("Z9N", + SugarToken("alpha-D-fructofuranose", "C", ALPHA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("PSV", + SugarToken("alpha-D-psicofuranose", "P", ALPHA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("SF6", + SugarToken("alpha-L-psicofuranose", "P", ALPHA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("SF9", + SugarToken("beta-L-psicofuranose", "P", BETA, IS_L, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("TTV", + SugarToken("beta-D-psicofuranose", "P", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("SOE", + SugarToken("alpha-L-sorbopyranose", "B", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("UEA", + SugarToken("beta-D-sorbofuranose", "B", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("T6T", + SugarToken("alpha-D-tagatopyranose", "J", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("FCA", + SugarToken("alpha-D-fucopyranose", "F", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("FCB", + SugarToken("beta-D-fucopyranose", "F", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("FUC", + SugarToken("alpha-L-fucopyranose", "F", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("FUL", + SugarToken("beta-L-fucopyranose", "F", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GYE", + SugarToken("beta-D-fucofuranose", "F", BETA, IS_D, FURANOSE)) ); + pdb_to_glycam_.insert( PairType("MXY", + SugarToken("2-O-methyl-beta-L-fucopyranose", "F", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("MXZ", + SugarToken("2-O-methyl-alpha-L-fucopyranose", "F", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("G6D", + SugarToken("alpha-D-quinovopyranose", "Q", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("YYK", + SugarToken("beta-D-quinovopyranose", "Q", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("RAM", + SugarToken("alpha-L-rhamnopyranose", "H", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("RM4", + SugarToken("beta-L-rhamnopyranose", "H", BETA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("XXR", + SugarToken("alpha-D-rhamnopyranose", "H", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("ADA", + SugarToken("alpha-D-galactopyranuronic acid", "O", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GTR", + SugarToken("beta-D-galactopyranuronic acid", "O", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("BDP", + SugarToken("beta-D-glucopyranuronic acid", "Z", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GCU", + SugarToken("alpha-D-glucopyranuronic acid", "Z", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("GCV", + SugarToken("4-O-methyl-alpha-D-glucopyranuronic acid", "Z", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("IDR", + SugarToken("alpha-L-idopyranuronic acid", "U", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("IDS", + SugarToken("2-O-sulfo-alpha-L-idopyranuronic acid", "U", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("A2G", + SugarToken("2-acetamido-2-deoxy-alpha-D-galactopyranose", "V", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("ASG", + SugarToken("2-acetamido-2-deoxy-4-O-sulfo-beta-D-galactopyranose", "V", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("NG6", + SugarToken("2-acetamido-2-deoxy-6-O-sulfo-beta-D-galactopyranose", "V", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("NGA", + SugarToken("2-acetamido-2-deoxy-beta-D-galactopyranose", "V", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("YYQ", + SugarToken("2-acetamido-2-deoxy-alpha-L-galactopyranose", "V", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("NAG", + SugarToken("2-acetamido-2-deoxy-beta-D-glucopyranose", "Y", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("NDG", + SugarToken("2-acetamido-2-deoxy-alpha-D-glucopyranose", "Y", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("NGZ", + SugarToken("2-acetamido-2-deoxy-alpha-L-glucopyranose", "Y", ALPHA, IS_L, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("BM3", + SugarToken("2-acetamido-2-deoxy-alpha-D-mannopyranose", "W", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("BM7", + SugarToken("2-acetamido-2-deoxy-beta-D-mannopyranose", "W", BETA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("SIA", + SugarToken("N-acetyl-alpha-neuraminic acid", "S", ALPHA, IS_D, PYRANOSE)) ); + pdb_to_glycam_.insert( PairType("SLB", + SugarToken("N-acetyl-beta-neuraminic acid", "S", BETA, IS_D, PYRANOSE)) ); + // PDB to glycam linkage residues + pdb_glycam_linkageRes_map_.insert( NamePairType("SER", "OLS") ); + pdb_glycam_linkageRes_map_.insert( NamePairType("THR", "OLT") ); + pdb_glycam_linkageRes_map_.insert( NamePairType("HYP", "OLP") ); + pdb_glycam_linkageRes_map_.insert( NamePairType("ASN", "NLN") ); } /** Load PDB to Glycam residue map from file. */ From 22afa91c034f09f5ee2a53e1b9db8882dcbd2932 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 11:56:16 -0500 Subject: [PATCH 365/368] return should be inside the ifdef --- src/LeapInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LeapInterface.cpp b/src/LeapInterface.cpp index 6a29c4793b..d2327ff497 100644 --- a/src/LeapInterface.cpp +++ b/src/LeapInterface.cpp @@ -126,6 +126,6 @@ int LeapInterface::RunLeap() const { // Free up temp name File::FreeTempName( tmp_leap_input ); -# endif return err; +# endif } From 83a34cb4c9032e14d1becfdd61b21e878be6e29e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 12:08:53 -0500 Subject: [PATCH 366/368] Add internal PDB to glycam atom name maps --- src/Exec_PrepareForLeap.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index b72ca459bc..4f074886bf 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -544,7 +544,32 @@ void Exec_PrepareForLeap::SetGlycamPdbResMap() { SugarToken("N-acetyl-alpha-neuraminic acid", "S", ALPHA, IS_D, PYRANOSE)) ); pdb_to_glycam_.insert( PairType("SLB", SugarToken("N-acetyl-beta-neuraminic acid", "S", BETA, IS_D, PYRANOSE)) ); - // PDB to glycam linkage residues + // PDB to glycam atom name maps + // 0 - V,W,Y C7,C2N O7,O2N C8,CME + pdb_glycam_name_maps_.push_back(NameMapType()); + pdb_glycam_name_maps_A_.push_back(NameMapType()); + pdb_glycam_name_maps_B_.push_back(NameMapType()); + pdb_glycam_name_maps_.back().insert(NamePairType("C7","C2N")); + pdb_glycam_name_maps_.back().insert(NamePairType("O7","O2N")); + pdb_glycam_name_maps_.back().insert(NamePairType("C8","CME")); + glycam_res_idx_map_.insert( ResIdxPairType( "V", 0 ) ); + glycam_res_idx_map_.insert( ResIdxPairType( "W", 0 ) ); + glycam_res_idx_map_.insert( ResIdxPairType( "Y", 0 ) ); + // 1 - S C10,C5N O10,O5N C11,CME + pdb_glycam_name_maps_.push_back(NameMapType()); + pdb_glycam_name_maps_A_.push_back(NameMapType()); + pdb_glycam_name_maps_B_.push_back(NameMapType()); + pdb_glycam_name_maps_.back().insert(NamePairType("C10","C5N")); + pdb_glycam_name_maps_.back().insert(NamePairType("O10","O5N")); + pdb_glycam_name_maps_.back().insert(NamePairType("C11","CME")); + glycam_res_idx_map_.insert( ResIdxPairType( "S", 1 ) ); + // 2 - H C6,C6M,B + pdb_glycam_name_maps_.push_back(NameMapType()); + pdb_glycam_name_maps_A_.push_back(NameMapType()); + pdb_glycam_name_maps_B_.push_back(NameMapType()); + pdb_glycam_name_maps_B_.back().insert(NamePairType("C6","C6M")); + glycam_res_idx_map_.insert( ResIdxPairType( "H", 2 ) ); + // PDB to glycam linkage residue name maps pdb_glycam_linkageRes_map_.insert( NamePairType("SER", "OLS") ); pdb_glycam_linkageRes_map_.insert( NamePairType("THR", "OLT") ); pdb_glycam_linkageRes_map_.insert( NamePairType("HYP", "OLP") ); From 2d76462e7b2c2f9b9723d89a75457442ed7a9404 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 12:12:43 -0500 Subject: [PATCH 367/368] Force use of internal map for at least one test --- test/Test_PrepareForLeap/RunTest.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Test_PrepareForLeap/RunTest.sh b/test/Test_PrepareForLeap/RunTest.sh index e8cc5c0be9..2c9333c084 100755 --- a/test/Test_PrepareForLeap/RunTest.sh +++ b/test/Test_PrepareForLeap/RunTest.sh @@ -41,7 +41,7 @@ prepareforleap \ out leap.4zzw.in \ leapunitname m \ pdbout 4zzw.cpptraj.pdb \ - nowat noh keepaltloc highestocc $RESMAPFILE + nowat noh keepaltloc highestocc EOF RunCpptraj "Prepare PDB 4zzw for LEaP" DoTest leap.4zzw.in.save leap.4zzw.in From 8c02c71f39f8819be1d04a824ad5173ca0426d2a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 2 Mar 2022 13:36:28 -0500 Subject: [PATCH 368/368] Fix printf format --- src/Exec_PrepareForLeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Exec_PrepareForLeap.cpp b/src/Exec_PrepareForLeap.cpp index 4f074886bf..ab8ea0fbfc 100644 --- a/src/Exec_PrepareForLeap.cpp +++ b/src/Exec_PrepareForLeap.cpp @@ -3398,7 +3398,7 @@ Exec::RetType Exec_PrepareForLeap::Execute(CpptrajState& State, ArgList& argIn) // DEBUG - print atom name maps mprintf("\tRes char to atom map index map:\n"); for (ResIdxMapType::const_iterator mit = glycam_res_idx_map_.begin(); mit != glycam_res_idx_map_.end(); ++mit) - mprintf("\t %c -> %i\n", mit->first.c_str(), mit->second); + mprintf("\t %s -> %i\n", mit->first.c_str(), mit->second); PrintAtomNameMap("Atom name maps", pdb_glycam_name_maps_); PrintAtomNameMap("Atom name maps (alpha)", pdb_glycam_name_maps_A_); PrintAtomNameMap("Atom name maps (beta)", pdb_glycam_name_maps_B_);