001/* 002 * BioJava development code 003 * 004 * This code may be freely distributed and modified under the 005 * terms of the GNU Lesser General Public Licence. This should 006 * be distributed with the code. If you do not have a copy, 007 * see: 008 * 009 * http://www.gnu.org/copyleft/lesser.html 010 * 011 * Copyright for this code is held jointly by the individual 012 * authors. These should be listed in @author doc comments. 013 * 014 * For more information on the BioJava project and its aims, 015 * or to join the biojava-l mailing list, visit the home page 016 * at: 017 * 018 * http://www.biojava.org/ 019 * 020 * Created on 2013-05-23 021 * 022 */ 023package org.biojava.nbio.structure.symmetry.core; 024 025/** 026 * Holds the results of quaternary symmetry perception. 027 * 028 * @author Peter Rose 029 * 030 */ 031public class QuatSymmetryResults { 032 private Subunits subunits = null; 033 private RotationGroup rotationGroup = null; 034 private HelixLayers helixLayers = null; 035 private String method = null; 036 private double sequenceIdentityThreshold = 0; 037 private boolean local = false; 038 private boolean preferredResult = false; 039 040 public QuatSymmetryResults(Subunits subunits, RotationGroup rotationGroup, String method) { 041 // SymmetryDeviation sd = new SymmetryDeviation(subunits, rotationGroup); 042 // rotationGroup.setSymmetryDeviation(sd.getSymmetryDeviation()); 043 this.subunits = subunits; 044 this.rotationGroup = rotationGroup; 045 this.method = method; 046 } 047 048 public QuatSymmetryResults(Subunits subunits, HelixLayers helixLayers, String method) { 049 // SymmetryDeviation sd = new SymmetryDeviation(subunits, helixLayers); 050 // helixLayers.setSymmetryDeviation(sd.getSymmetryDeviation()); 051 this.subunits = subunits; 052 this.helixLayers = helixLayers; 053 this.method = method; 054 } 055 056 /** 057 * Returns protein subunit information that was used to determine symmetry information 058 * 059 * @return 060 */ 061 public Subunits getSubunits() { 062 return subunits; 063 } 064 065 /** 066 * Returns rotation group (point group) information representing rotational quaternary symmetry, 067 * see http://en.wikipedia.org/wiki/Rotation_group_SO(3) 068 * 069 * @return rotation group 070 */ 071 public RotationGroup getRotationGroup() { 072 return rotationGroup; 073 } 074 075 /* 076 * Returns helix layers (layer lines) as a list of helices that describe a helical structure 077 */ 078 public HelixLayers getHelixLayers() { 079 return helixLayers; 080 } 081 082 /** 083 * Returns name of method used for symmetry perception. 084 * 085 * @return method 086 */ 087 public String getMethod() { 088 return method; 089 } 090 091 092 /** 093 * Returns the symmetry group. For point groups returns the point group symbol 094 * and for helical symmetry returns "H". 095 * @return symmetry symbol 096 */ 097 public String getSymmetry() { 098 if (helixLayers != null && helixLayers.size() > 0) { 099 return "H"; 100 } else if (rotationGroup != null && rotationGroup.getOrder() > 0) { 101 return rotationGroup.getPointGroup(); 102 } 103 return ""; 104 } 105 106 107 public QuatSymmetryScores getScores() { 108 if (helixLayers != null && helixLayers.size() > 0) { 109 return helixLayers.getScores(); 110 } else if (rotationGroup != null && rotationGroup.getOrder() > 0) { 111 return rotationGroup.getScores(); 112 } 113 return new QuatSymmetryScores(); 114 } 115 116 /** 117 * Returns the average Calpha trace RMSD for all symmetry operations 118 * @return 119 * @deprecated use {@link getScores()} instead. 120 */ 121 @Deprecated 122 public double getAverageTraceRmsd() { 123 if (helixLayers != null && helixLayers.size() > 0) { 124 return helixLayers.getScores().getRmsd(); 125 } else if (rotationGroup != null && rotationGroup.getOrder() > 0) { 126 return rotationGroup.getScores().getRmsd(); 127 } 128 return 0; 129 } 130 131 /** 132 * Returns the average Calpha trace Tm for all symmetry operations 133 * @return 134 * @deprecated use {@link getScores()} instead. 135 */ 136 @Deprecated 137 public double getAverageTraceTmScoreMin() { 138 if (helixLayers != null && helixLayers.size() > 0) { 139 return helixLayers.getScores().getTm(); 140 } else if (rotationGroup != null && rotationGroup.getOrder() > 0) { 141 return rotationGroup.getScores().getTm(); 142 } 143 return 0; 144 } 145 146 public int getNucleicAcidChainCount() { 147 return subunits.getNucleicAcidChainCount(); 148 } 149 150 public double getSequenceIdentityThreshold() { 151 return sequenceIdentityThreshold; 152 } 153 154 public void setSequenceIdentityThreshold(double sequenceIdentityThreshold) { 155 this.sequenceIdentityThreshold = sequenceIdentityThreshold; 156 } 157 158 @Override 159 public String toString() { 160 StringBuilder sb = new StringBuilder(); 161 162 sb.append("Stoichiometry : "); 163 sb.append(getSubunits().getStoichiometry()); 164 sb.append("\n"); 165 sb.append("Pseudostoichiometry : "); 166 sb.append(getSubunits().isPseudoStoichiometric()); 167 sb.append("\n"); 168 sb.append("Pseudosymmetry : "); 169 sb.append(getSubunits().isPseudoSymmetric()); 170 sb.append("\n"); 171 sb.append("Min sequence identity : "); 172 sb.append(Math.round(getSubunits().getMinSequenceIdentity()*100)); 173 sb.append("\n"); 174 sb.append("Max sequence identity : "); 175 sb.append(Math.round(getSubunits().getMaxSequenceIdentity()*100)); 176 sb.append("\n"); 177 sb.append("Symmetry : "); 178 sb.append(getSymmetry()); 179 sb.append("\n"); 180 sb.append("Symmetry RMSD : "); 181 sb.append((float) getAverageTraceRmsd()); 182 sb.append("\n"); 183 sb.append("Symmetry TmScoreMin : "); 184 sb.append((float) getAverageTraceTmScoreMin()); 185 sb.append("\n"); 186 sb.append("Prefered result : "); 187 sb.append(isPreferredResult()); 188 sb.append("\n"); 189 190 return sb.toString(); 191 } 192 193 /** 194 * Return true 195 * @return 196 */ 197 public boolean isLocal() { 198 return local; 199 } 200 201 public void setLocal(boolean local) { 202 this.local = local; 203 } 204 205 public boolean isPreferredResult() { 206 return preferredResult; 207 } 208 209 public void setPreferredResult(boolean preferredResult) { 210 this.preferredResult = preferredResult; 211 } 212}