|
21 | 21 | package org.biojava.nbio.structure.symmetry.gui; |
22 | 22 |
|
23 | 23 | import java.awt.event.KeyEvent; |
| 24 | +import java.util.ArrayList; |
| 25 | +import java.util.Arrays; |
24 | 26 | import java.util.List; |
| 27 | +import java.util.Set; |
| 28 | +import java.util.TreeSet; |
25 | 29 |
|
26 | 30 | import javax.swing.JMenu; |
27 | 31 | import javax.swing.JMenuBar; |
|
40 | 44 | import org.biojava.nbio.structure.symmetry.core.AxisAligner; |
41 | 45 | import org.biojava.nbio.structure.symmetry.core.QuatSymmetryResults; |
42 | 46 | import org.biojava.nbio.structure.symmetry.internal.CeSymmResult; |
| 47 | +import org.biojava.nbio.structure.symmetry.internal.SymmetryAxes; |
43 | 48 | import org.biojava.nbio.structure.symmetry.jmolScript.JmolSymmetryScriptGenerator; |
44 | 49 | import org.biojava.nbio.structure.symmetry.jmolScript.JmolSymmetryScriptGeneratorPointGroup; |
45 | 50 | import org.biojava.nbio.structure.symmetry.utils.SymmetryTools; |
46 | | - |
47 | 51 | import org.slf4j.Logger; |
48 | 52 | import org.slf4j.LoggerFactory; |
49 | 53 |
|
@@ -115,7 +119,7 @@ public static AbstractAlignmentJmol display(CeSymmResult symmResult) |
115 | 119 | jmol.setTitle(jmol.getStructure().getPDBHeader().getTitle()); |
116 | 120 | addSymmetryMenu(jmol, symmResult); |
117 | 121 | jmol.evalString(printSymmetryGroup(symmResult)); |
118 | | - jmol.evalString(printSymmetryAxes(symmResult, false)); |
| 122 | + jmol.evalString(printSymmetryAxes(symmResult)); |
119 | 123 | jmol.setTitle(getSymmTitle(symmResult)); |
120 | 124 | return jmol; |
121 | 125 | } else { |
@@ -182,30 +186,31 @@ private static void addSymmetryMenu(MultipleAlignmentJmol jmol, |
182 | 186 | /** |
183 | 187 | * Generates a String that displays the symmetry axes of a structure. |
184 | 188 | * |
185 | | - * @param msa |
186 | | - * @param axes |
187 | | - * @param elementary |
188 | | - * only print elementary axes if true |
| 189 | + * @param symm CeSymmResult |
189 | 190 | * @return |
| 191 | + * @throws StructureException |
190 | 192 | */ |
191 | | - public static String printSymmetryAxes(CeSymmResult symm, boolean elementary) { |
| 193 | + public static String printSymmetryAxes(CeSymmResult symm) |
| 194 | + throws StructureException { |
192 | 195 |
|
193 | 196 | int id = 0; |
194 | 197 | String script = ""; |
195 | | - Atom[] atoms = symm.getAtoms(); |
196 | | - |
197 | | - List<Matrix4d> symmAxes = null; |
198 | | - if (elementary) { |
199 | | - symmAxes = symm.getAxes().getElementaryAxes(); |
200 | | - } else { |
201 | | - symmAxes = symm.getAxes().getSymmetryAxes(); |
202 | | - } |
203 | | - |
204 | | - for (Matrix4d axis : symmAxes) { |
205 | | - RotationAxis rot = new RotationAxis(axis); |
206 | | - script += rot.getJmolScript(atoms, id); |
| 198 | + SymmetryAxes axes = symm.getAxes(); |
| 199 | + List<Atom[]> repeats = SymmetryTools.toRepeatsAlignment(symm).getAtomArrays(); |
| 200 | + |
| 201 | + List<Matrix4d> symmAxes = axes.getElementaryAxes(); |
| 202 | + for (int a = 0; a < symmAxes.size(); a++) { |
| 203 | + RotationAxis rot = new RotationAxis(symmAxes.get(a)); |
| 204 | + Set<Integer> repIndex = new TreeSet<Integer>(axes.getRepeatRelation(a).get(0)); |
| 205 | + repIndex.addAll(axes.getRepeatRelation(a).get(1)); |
| 206 | + List<Atom> repAtoms = new ArrayList<Atom>(); |
| 207 | + for (Integer r : repIndex) |
| 208 | + repAtoms.addAll(Arrays.asList(repeats.get(r))); |
| 209 | + |
| 210 | + script += rot.getJmolScript(repAtoms.toArray(new Atom[repAtoms.size()]), id); |
207 | 211 | id++; |
208 | 212 | } |
| 213 | + |
209 | 214 | return script; |
210 | 215 | } |
211 | 216 |
|
|
0 commit comments