org.jmol.modelsetbio
Class AminoPolymer

java.lang.Object
  extended by org.jmol.modelset.Polymer
      extended by org.jmol.modelsetbio.BioPolymer
          extended by org.jmol.modelsetbio.AlphaPolymer
              extended by org.jmol.modelsetbio.AminoPolymer

public class AminoPolymer
extends AlphaPolymer


Nested Class Summary
private  class AminoPolymer.Bridge
           
 
Field Summary
private static float maxHbondAlphaDistance
           
private static float maxHbondAlphaDistance2
           
private static float minimumHbondDistance2
           
private static int[][] sheetOffsets
           
private  float[][] structureList
           
 
Fields inherited from class org.jmol.modelsetbio.BioPolymer
bsSelectedMonomers, hasWingPoints, haveParameters, invalidControl, monomers, sheetSmoothing
 
Fields inherited from class org.jmol.modelset.Polymer
bioPolymerIndexInModel, controlPoints, leadAtomIndices, leadMidpoints, leadPoints, model, monomerCount, type, TYPE_AMINO, TYPE_CARBOHYDRATE, TYPE_NOBONDING, TYPE_NUCLEIC, wingVectors
 
Constructor Summary
AminoPolymer(Monomer[] monomers)
           
 
Method Summary
private static void addHbond(java.util.List vHBonds, Monomer donor, Monomer acceptor, int iEnergy, int type, java.util.Map htTemp)
           
private  void addResidueHydrogenBond(Atom nitrogen, Atom oxygen, int indexAminoGroup, int indexCarbonylGroup, float energy, java.util.List vHBonds)
           
private  int calcHbondEnergy(javax.vecmath.Point3f nitrogenPoint, javax.vecmath.Point3f hydrogenPoint, AminoMonomer target, boolean checkDistances)
          based on RasMol 2.7.2.1.1 model checkDistances: When we are seriously looking for H bonds, we want to also check that distCN > distCH and that the OH distance is less than 3 Angstroms.
protected  boolean calcPhiPsiAngles()
           
private  void calcPhiPsiAngles(AminoMonomer residue1, AminoMonomer residue2)
           
 void calcRasmolHydrogenBonds(Polymer polymer, java.util.BitSet bsA, java.util.BitSet bsB, java.util.List vHBonds, int nMaxPerResidue, int[][][] min, boolean checkDistances, boolean dsspIgnoreHydrogens)
           
protected  float calculateRamachandranHelixAngle(int m, char qtype)
           
 void calculateStructures(boolean alphaOnly)
          Uses Levitt & Greer algorithm to calculate protein secondary structures using only alpha-carbon atoms.
protected static java.lang.String calculateStructuresDssp(Polymer[] bioPolymers, int bioPolymerCount, java.util.List vHBonds, boolean doReport, boolean dsspIgnoreHydrogens, boolean setStructure)
           
private static boolean checkBridge(AminoPolymer.Bridge bridge, java.util.Map htBridges, java.util.Map htLadders, boolean isAntiparallel, int n1, int n2)
          check to see if another bridge exists offset by n1 and n2 from the two ends of a bridge
private static void checkBulge(AminoPolymer.Bridge bridge, java.util.Map htBridges, java.util.Map htLadders, boolean isAntiparallel, int dir)
           
private static boolean checkPhiPsi(float[] list, float psi, float phi)
           
private  void checkRasmolHydrogenBond(AminoMonomer source, Polymer polymer, int indexDonor, javax.vecmath.Point3f hydrogenPoint, java.util.BitSet bsB, java.util.List vHBonds, int[][] min, boolean checkDistances)
           
private static void createLadders(java.util.List bridges, java.util.Map htBridges, java.util.Map htLadders, boolean isAntiparallel)
          "ladder =: one or more consecutive bridges of identical type" (p.
private  java.lang.String dumpSummary(char[] labels)
           
private  java.lang.String dumpTags(java.lang.String lines, java.util.BitSet bsBad, int mode)
           
private  java.lang.String findHelixes(int[][][] min, int iPolymer, java.util.BitSet bsDone, char[] labels, boolean doReport, boolean setStructure, java.util.List vHBonds, java.util.BitSet bsBad)
          (p.
private  java.lang.String findHelixes(int pitch, int[][][] min, int thisIndex, byte subtype, int type, java.util.BitSet bsDone, java.util.BitSet bsTurn, char[] labels, boolean doReport, boolean setStructure, java.util.List vHBonds, java.util.BitSet bsBad)
           
private static AminoPolymer.Bridge getBridge(int[][][][] min, int p1, int a, int p2, int b, java.util.List bridges, Atom atom1, Atom atom2, AminoPolymer ap1, AminoPolymer ap2, java.util.List vHBonds, java.util.Map htTemp, boolean isAntiparallel, java.util.Map htLadders)
           
private static void getBridges(Polymer[] bioPolymers, int[][][][] min, java.util.List bridgesA, java.util.List bridgesP, java.util.Map htBridges, java.util.Map htLadders, java.util.BitSet bsBad, java.util.List vHBonds, java.util.BitSet[] bsDone)
          (p.
private static int[][][][] getDualHydrogenBondArray(Polymer[] bioPolymers, int bioPolymerCount, boolean dsspIgnoreHydrogens)
          (p.
private static void getSheetStructures(Polymer[] bioPolymers, java.util.List bridgesA, java.util.List bridgesP, java.util.Map htBridges, java.util.Map htLadders, char[][] labels, java.util.BitSet[] bsDone, boolean doReport, boolean setStructure)
          "sheet =: a set of one or more ladders connected by shared residues" (p.
private static int[] isHbonded(int indexDonor, int indexAcceptor, int pDonor, int pAcceptor, int[][][][] min)
           
private  boolean isHelix(float psi, float phi)
           
private  boolean isSheet(float psi, float phi)
           
private  boolean isTurn(float psi, float phi)
           
protected  void resetHydrogenPoints()
           
private  void setStructure(java.util.BitSet bs, byte type)
           
 void setStructureList(float[][] structureList)
           
private  void setTag(char[] tags, java.util.BitSet bs, char ch)
           
 
Methods inherited from class org.jmol.modelsetbio.AlphaPolymer
addSecondaryStructure, addSecondaryStructure, calculateStruts, getControlPoint, getPdbData
 
Methods inherited from class org.jmol.modelsetbio.BioPolymer
allocateBioPolymer, calcEtaThetaAngles, calcParameters, calcSelectedMonomersCount, calculateStructures, clearStructures, findNearestAtomIndex, getConformation, getControlPoints, getControlPoints, getGroups, getIndex, getInitiatorPoint, getLeadAtomIndices, getLeadMidPoint, getLeadMidpoints, getLeadPoint, getLeadPoint, getLeadPoints, getPdbData, getPolymerInfo, getPolymerPointsAndVectors, getPolymerSequenceAtoms, getProteinStructure, getRange, getRangeGroups, getSelectedMonomerCount, getSequence, getTerminatorPoint, getWingPoint, getWingVectors, isDna, isMonomerSelected, isRna, recalculateLeadMidpointsAndWingVectors, removeProteinStructure, setConformation
 
Methods inherited from class org.jmol.modelset.Polymer
getType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

maxHbondAlphaDistance

private static final float maxHbondAlphaDistance
See Also:
Constant Field Values

maxHbondAlphaDistance2

private static final float maxHbondAlphaDistance2
See Also:
Constant Field Values

minimumHbondDistance2

private static final float minimumHbondDistance2
See Also:
Constant Field Values

sheetOffsets

private static int[][] sheetOffsets

structureList

private float[][] structureList
Constructor Detail

AminoPolymer

AminoPolymer(Monomer[] monomers)
Method Detail

resetHydrogenPoints

protected void resetHydrogenPoints()
Overrides:
resetHydrogenPoints in class BioPolymer

calcPhiPsiAngles

protected boolean calcPhiPsiAngles()
Overrides:
calcPhiPsiAngles in class BioPolymer

calcPhiPsiAngles

private void calcPhiPsiAngles(AminoMonomer residue1,
                              AminoMonomer residue2)

calculateRamachandranHelixAngle

protected float calculateRamachandranHelixAngle(int m,
                                                char qtype)
Overrides:
calculateRamachandranHelixAngle in class BioPolymer
Returns:
calculated value

calcRasmolHydrogenBonds

public void calcRasmolHydrogenBonds(Polymer polymer,
                                    java.util.BitSet bsA,
                                    java.util.BitSet bsB,
                                    java.util.List vHBonds,
                                    int nMaxPerResidue,
                                    int[][][] min,
                                    boolean checkDistances,
                                    boolean dsspIgnoreHydrogens)
Overrides:
calcRasmolHydrogenBonds in class Polymer

checkRasmolHydrogenBond

private void checkRasmolHydrogenBond(AminoMonomer source,
                                     Polymer polymer,
                                     int indexDonor,
                                     javax.vecmath.Point3f hydrogenPoint,
                                     java.util.BitSet bsB,
                                     java.util.List vHBonds,
                                     int[][] min,
                                     boolean checkDistances)

calcHbondEnergy

private int calcHbondEnergy(javax.vecmath.Point3f nitrogenPoint,
                            javax.vecmath.Point3f hydrogenPoint,
                            AminoMonomer target,
                            boolean checkDistances)
based on RasMol 2.7.2.1.1 model checkDistances: When we are seriously looking for H bonds, we want to also check that distCN > distCH and that the OH distance is less than 3 Angstroms. Otherwise that's just too strange a hydrogen bond. (We get hydrogen bonds from i to i+2, for example) This check is skipped for an actual DSSP calc., where we want the original definition and are not actually creating hydrogen bonds H .......... O | | | | N C

Parameters:
nitrogenPoint -
hydrogenPoint -
target -
checkDistances -
Returns:
energy in cal/mol or 0 (none)

addResidueHydrogenBond

private void addResidueHydrogenBond(Atom nitrogen,
                                    Atom oxygen,
                                    int indexAminoGroup,
                                    int indexCarbonylGroup,
                                    float energy,
                                    java.util.List vHBonds)

calculateStructuresDssp

protected static java.lang.String calculateStructuresDssp(Polymer[] bioPolymers,
                                                          int bioPolymerCount,
                                                          java.util.List vHBonds,
                                                          boolean doReport,
                                                          boolean dsspIgnoreHydrogens,
                                                          boolean setStructure)
Parameters:
bioPolymers -
bioPolymerCount -
vHBonds -
doReport -
dsspIgnoreHydrogens -
setStructure -
Returns:
helix-5, helix-4, helix-3, and SUMMARY lines

getDualHydrogenBondArray

private static int[][][][] getDualHydrogenBondArray(Polymer[] bioPolymers,
                                                    int bioPolymerCount,
                                                    boolean dsspIgnoreHydrogens)
(p. 2579): Hydrogen bonds in proteins have little wave-function overlap and are well described by an electrostatic model: E = q1q2(1/r(ON) + 1/r(CH) - 1/r(OH) - 1/r(CN)) * f with q1 = 0.42e and q2 = 0.20e, e being the unit electron charge and r(AB) the interatomic distance from A to B. In chemical units, r is in angstroms, the dimensional factor f = 332, and E is in kcal/mol. We ... assign an H bond between C=O of residue i and N-H of residue j if E is less than the cutoff, i.e., "Hbond(i,j) =: [E < -0.5 kcal/mol]."

Parameters:
bioPolymers -
bioPolymerCount -
dsspIgnoreHydrogens -
Returns:
array of dual-minmum NH-->O=C H bonds

findHelixes

private java.lang.String findHelixes(int[][][] min,
                                     int iPolymer,
                                     java.util.BitSet bsDone,
                                     char[] labels,
                                     boolean doReport,
                                     boolean setStructure,
                                     java.util.List vHBonds,
                                     java.util.BitSet bsBad)
(p. 2581): A basic turn pattern (Fig. 2) is a single H bond of type (i,i+n). We assign an n-turn at residue i if there is an H bond from CO(i) to NH(i+n).... When the pattern is found, the ends of the H bond are indicated using ">" at i and "<" at i+n...; the residues bracketed by the H bond are noted "3," "4," or "5" unless they are also end points of other H bonds. Coincidence of ">" and "<" at one residue is indicated by "X." ... Residues bracketed by the hydrogen bond are marked "T," unless they are part of an n-helix (defined below). (p. 2582): A minimal helix is defined by two consecutive n-turns.... Longer helices are defined as overlaps of minimal helices.... Residues bracketed by H bonds are labeled G, H, I.... Long helices can deviate from regularity in that not all possible H bonds are formed. This possibility is implicit in the above helix definition.

Parameters:
min -
iPolymer -
bsDone -
labels -
doReport -
setStructure -
vHBonds -
bsBad -
Returns:
string label

findHelixes

private java.lang.String findHelixes(int pitch,
                                     int[][][] min,
                                     int thisIndex,
                                     byte subtype,
                                     int type,
                                     java.util.BitSet bsDone,
                                     java.util.BitSet bsTurn,
                                     char[] labels,
                                     boolean doReport,
                                     boolean setStructure,
                                     java.util.List vHBonds,
                                     java.util.BitSet bsBad)

getBridges

private static void getBridges(Polymer[] bioPolymers,
                               int[][][][] min,
                               java.util.List bridgesA,
                               java.util.List bridgesP,
                               java.util.Map htBridges,
                               java.util.Map htLadders,
                               java.util.BitSet bsBad,
                               java.util.List vHBonds,
                               java.util.BitSet[] bsDone)
(p. 2581): Two nonoverlapping stretches of three residues each, i-1,i,i+1 and j-1,j,j+1, form either a parallel or antiparallel bridge, depending on which of two basic patterns (Fig. 2) is matched. We assign a bridge between residues i and j if there are two H bonds characteristic of beta-structure; in particular: Parallel Bridge(i,j) =: [Hbond(i-1,j) and Hbond(j,i+1)] or [Hbond(j-1,i) and Hbond(i,j+1)] Antiparallel Bridge(i,j) =: [Hbond(i,j) and Hbond(j,i)] or [Hbond(i-1,j+1) and Hbond(j-1,i+1)]

Parameters:
bioPolymers -
min -
bridgesA -
bridgesP -
htBridges -
htLadders -
bsBad -
vHBonds -
bsDone -

getBridge

private static AminoPolymer.Bridge getBridge(int[][][][] min,
                                             int p1,
                                             int a,
                                             int p2,
                                             int b,
                                             java.util.List bridges,
                                             Atom atom1,
                                             Atom atom2,
                                             AminoPolymer ap1,
                                             AminoPolymer ap2,
                                             java.util.List vHBonds,
                                             java.util.Map htTemp,
                                             boolean isAntiparallel,
                                             java.util.Map htLadders)

addHbond

private static void addHbond(java.util.List vHBonds,
                             Monomer donor,
                             Monomer acceptor,
                             int iEnergy,
                             int type,
                             java.util.Map htTemp)

getSheetStructures

private static void getSheetStructures(Polymer[] bioPolymers,
                                       java.util.List bridgesA,
                                       java.util.List bridgesP,
                                       java.util.Map htBridges,
                                       java.util.Map htLadders,
                                       char[][] labels,
                                       java.util.BitSet[] bsDone,
                                       boolean doReport,
                                       boolean setStructure)
"sheet =: a set of one or more ladders connected by shared residues" (p. 2582)

Parameters:
bioPolymers -
bridgesA -
bridgesP -
htBridges -
htLadders -
labels -
bsDone -
doReport -
setStructure -

createLadders

private static void createLadders(java.util.List bridges,
                                  java.util.Map htBridges,
                                  java.util.Map htLadders,
                                  boolean isAntiparallel)
"ladder =: one or more consecutive bridges of identical type" (p. 2582) "For beta structures, we define explicitly: a bulge-linked ladder consists of two (perfect) ladder or bridges of the same type connected by at most one extra residue on one strand and at most four extra resideus on the other strand.... all residues in bulge-linked ladders are marked "E," including the extra residues." (p. 2585)

Parameters:
bridges -
htBridges -
htLadders -
isAntiparallel -

checkBridge

private static boolean checkBridge(AminoPolymer.Bridge bridge,
                                   java.util.Map htBridges,
                                   java.util.Map htLadders,
                                   boolean isAntiparallel,
                                   int n1,
                                   int n2)
check to see if another bridge exists offset by n1 and n2 from the two ends of a bridge

Parameters:
bridge -
htBridges -
htLadders -
isAntiparallel -
n1 -
n2 -
Returns:
TRUE if bridge is part of a ladder

checkBulge

private static void checkBulge(AminoPolymer.Bridge bridge,
                               java.util.Map htBridges,
                               java.util.Map htLadders,
                               boolean isAntiparallel,
                               int dir)

setStructure

private void setStructure(java.util.BitSet bs,
                          byte type)

isHbonded

private static int[] isHbonded(int indexDonor,
                               int indexAcceptor,
                               int pDonor,
                               int pAcceptor,
                               int[][][][] min)

setTag

private void setTag(char[] tags,
                    java.util.BitSet bs,
                    char ch)

dumpSummary

private java.lang.String dumpSummary(char[] labels)

dumpTags

private java.lang.String dumpTags(java.lang.String lines,
                                  java.util.BitSet bsBad,
                                  int mode)

calculateStructures

public void calculateStructures(boolean alphaOnly)
Description copied from class: AlphaPolymer
Uses Levitt & Greer algorithm to calculate protein secondary structures using only alpha-carbon atoms.

Levitt and Greer
Automatic Identification of Secondary Structure in Globular Proteins
J.Mol.Biol.(1977) 114, 181-293

http://csb.stanford.edu/levitt/Levitt_JMB77_Secondary_structure.pdf

Overrides:
calculateStructures in class AlphaPolymer

isTurn

private boolean isTurn(float psi,
                       float phi)
Parameters:
psi - N-C-CA-N torsion for NEXT group
phi - C-CA-N-C torsion for THIS group
Returns:
whether this corresponds to a helix

isSheet

private boolean isSheet(float psi,
                        float phi)

isHelix

private boolean isHelix(float psi,
                        float phi)

checkPhiPsi

private static boolean checkPhiPsi(float[] list,
                                   float psi,
                                   float phi)

setStructureList

public void setStructureList(float[][] structureList)
Overrides:
setStructureList in class Polymer
Parameters:
structureList - protein only -- helix, sheet, turn definitions