3333import javax .vecmath .Matrix4d ;
3434
3535import org .biojava .nbio .structure .Atom ;
36+ import org .biojava .nbio .structure .Group ;
3637import org .biojava .nbio .structure .StructureException ;
3738import org .biojava .nbio .structure .StructureTools ;
3839import org .biojava .nbio .structure .align .gui .StructureAlignmentDisplay ;
6061 *
6162 */
6263public class SymmetryDisplay {
63-
64+
6465 private static final Logger logger = LoggerFactory
6566 .getLogger (SymmetryDisplay .class );
6667
@@ -75,7 +76,8 @@ public static MultipleAlignmentJmol displayRepeats(CeSymmResult symm)
7576 throws StructureException {
7677
7778 MultipleAlignment repeats = SymmetryTools .toRepeatsAlignment (symm );
78- MultipleAlignmentJmol jmol = MultipleAlignmentJmolDisplay .display (repeats );
79+ MultipleAlignmentJmol jmol = MultipleAlignmentJmolDisplay
80+ .display (repeats );
7981 jmol .setTitle (getSymmTitle (symm ));
8082 return jmol ;
8183 }
@@ -112,9 +114,22 @@ public static AbstractAlignmentJmol display(CeSymmResult symmResult)
112114 throws StructureException {
113115
114116 if (symmResult .isSignificant () && symmResult .isRefined ()) {
115- // Show the structure colored by repeat
117+ // Show the structure colored by repeat (do not rotate)
116118 MultipleAlignment msa = symmResult .getMultipleAlignment ();
117119 List <Atom []> atoms = msa .getAtomArrays ();
120+
121+ // Add non polymer protein groups
122+ Atom [] allAtoms = atoms .get (0 );
123+ List <Group > hetatms = StructureTools .getUnalignedGroups (allAtoms );
124+ allAtoms = Arrays
125+ .copyOf (allAtoms , allAtoms .length + hetatms .size ());
126+ for (int h = 0 ; h < hetatms .size (); h ++) {
127+ int index = (allAtoms .length - hetatms .size ()) + h ;
128+ allAtoms [index ] = hetatms .get (h ).getAtom (0 );
129+ }
130+ for (int s = 0 ; s < msa .size (); s ++)
131+ atoms .set (s , allAtoms );
132+
118133 MultipleAlignmentJmol jmol = new MultipleAlignmentJmol (msa , atoms );
119134 jmol .setTitle (jmol .getStructure ().getPDBHeader ().getTitle ());
120135 addSymmetryMenu (jmol , symmResult );
@@ -186,28 +201,32 @@ private static void addSymmetryMenu(MultipleAlignmentJmol jmol,
186201 /**
187202 * Generates a String that displays the symmetry axes of a structure.
188203 *
189- * @param symm CeSymmResult
204+ * @param symm
205+ * CeSymmResult
190206 * @return
191- * @throws StructureException
207+ * @throws StructureException
192208 */
193- public static String printSymmetryAxes (CeSymmResult symm )
209+ public static String printSymmetryAxes (CeSymmResult symm )
194210 throws StructureException {
195211
196212 int id = 0 ;
197213 String script = "" ;
198214 SymmetryAxes axes = symm .getAxes ();
199- List <Atom []> repeats = SymmetryTools .toRepeatsAlignment (symm ).getAtomArrays ();
215+ List <Atom []> repeats = SymmetryTools .toRepeatsAlignment (symm )
216+ .getAtomArrays ();
200217
201218 List <Matrix4d > symmAxes = axes .getElementaryAxes ();
202219 for (int a = 0 ; a < symmAxes .size (); a ++) {
203220 RotationAxis rot = new RotationAxis (symmAxes .get (a ));
204- Set <Integer > repIndex = new TreeSet <Integer >(axes .getRepeatRelation (a ).get (0 ));
221+ Set <Integer > repIndex = new TreeSet <Integer >(axes
222+ .getRepeatRelation (a ).get (0 ));
205223 repIndex .addAll (axes .getRepeatRelation (a ).get (1 ));
206224 List <Atom > repAtoms = new ArrayList <Atom >();
207225 for (Integer r : repIndex )
208226 repAtoms .addAll (Arrays .asList (repeats .get (r )));
209-
210- script += rot .getJmolScript (repAtoms .toArray (new Atom [repAtoms .size ()]), id );
227+
228+ script += rot .getJmolScript (
229+ repAtoms .toArray (new Atom [repAtoms .size ()]), id );
211230 id ++;
212231 }
213232
@@ -225,9 +244,11 @@ public static String printSymmetryAxes(CeSymmResult symm)
225244 * @return
226245 * @throws StructureException
227246 */
228- public static String printSymmetryGroup (CeSymmResult symm ) throws StructureException {
247+ public static String printSymmetryGroup (CeSymmResult symm )
248+ throws StructureException {
229249
230- QuatSymmetryResults gSymmetry = SymmetryTools .getQuaternarySymmetry (symm );
250+ QuatSymmetryResults gSymmetry = SymmetryTools
251+ .getQuaternarySymmetry (symm );
231252
232253 AxisAligner axes = AxisAligner .getInstance (gSymmetry );
233254
0 commit comments