2727import javax .swing .JMenuBar ;
2828import javax .swing .JMenuItem ;
2929import javax .vecmath .Matrix4d ;
30+
3031import org .biojava .nbio .structure .*;
3132import org .biojava .nbio .structure .align .gui .MultipleAlignmentDisplay ;
33+ import org .biojava .nbio .structure .align .gui .StructureAlignmentDisplay ;
3234import org .biojava .nbio .structure .align .gui .jmol .MultipleAlignmentJmol ;
3335import org .biojava .nbio .structure .align .multiple .MultipleAlignment ;
3436import org .biojava .nbio .structure .align .util .RotationAxis ;
3537import org .biojava .nbio .structure .symmetry .core .AxisAligner ;
3638import org .biojava .nbio .structure .symmetry .core .QuatSymmetryResults ;
37- import org .biojava .nbio .structure .symmetry .internal .SymmetryAxes ;
39+ import org .biojava .nbio .structure .symmetry .internal .CeSymmResult ;
3840import org .biojava .nbio .structure .symmetry .jmolScript .JmolSymmetryScriptGenerator ;
3941import org .biojava .nbio .structure .symmetry .jmolScript .JmolSymmetryScriptGeneratorPointGroup ;
4042import org .biojava .nbio .structure .symmetry .utils .SymmetryTools ;
43+ import org .jmol .util .Logger ;
4144
4245/**
4346 * Class that provides visualizations methods for symmetry alignments. Call the
@@ -86,64 +89,51 @@ public static MultipleAlignmentJmol displayFull(MultipleAlignment msa)
8689 * Displays a single structure in a cartoon representation with each
8790 * symmetric subunit colored differently.
8891 *
89- * @param msa
90- * the symmetry multiple alignment obtained from CeSymm
91- * @param axes
92- * symmetry axes
92+ * @param symmResult
93+ * the symmetry result obtained from CeSymm
9394 * @throws StructureException
9495 */
95- public static MultipleAlignmentJmol display (MultipleAlignment msa ,
96- SymmetryAxes axes ) throws StructureException {
96+ public static MultipleAlignmentJmol display (CeSymmResult symmResult )
97+ throws StructureException {
9798
9899 MultipleAlignmentJmol jmol = null ;
100+ MultipleAlignment msa = symmResult .getMultipleAlignment ();
99101
100- if (SymmetryTools .isRefined (msa )) {
102+ if (symmResult .isRefined ()) {
101103 List <Atom []> atoms = msa .getAtomArrays ();
102104 jmol = new MultipleAlignmentJmol (msa , atoms );
103105 jmol .setTitle (jmol .getStructure ().getPDBHeader ().getTitle ());
104- addSymmetryMenu (jmol , axes );
105- jmol .evalString (printPointGroupAxes (msa ));
106- jmol .evalString (printSymmetryAxes (msa , axes , false ));
106+ addSymmetryMenu (jmol , symmResult );
107+ jmol .evalString (printPointGroupAxes (symmResult ));
108+ jmol .evalString (printSymmetryAxes (symmResult , false ));
107109 } else {
108- // Show the optimal alignment if it was not refined
109- jmol = MultipleAlignmentDisplay .display (msa );
110- jmol .setColorByBlocks (true );
110+ // Show the optimal alignment only if it was not refined
111+ Logger .info ("Showing optimal self-alignment" );
112+ StructureAlignmentDisplay .display (symmResult .getSelfAlignment (),
113+ symmResult .getAtoms (), symmResult .getAtoms ());
111114 }
112115
113116 return jmol ;
114117 }
115118
116- /**
117- * Displays a single structure in a cartoon representation with each
118- * symmetric subunit colored differently.
119- *
120- * @param msa
121- * the symmetry multiple alignment obtained from CeSymm
122- * @throws StructureException
123- */
124- public static MultipleAlignmentJmol display (MultipleAlignment msa )
125- throws StructureException {
126- return display (msa , null );
127- }
128-
129119 /**
130120 * Adds a Symmetry menu to the Jmol display, so that further symmetry
131121 * analysis can be triggered.
132122 *
133123 * @param jmol
134124 * parent jmol
135- * @param axes
136- * symmetry axes
125+ * @param symmResult
126+ * CeSymmResult
137127 */
138128 private static void addSymmetryMenu (MultipleAlignmentJmol jmol ,
139- SymmetryAxes axes ) {
129+ CeSymmResult symmResult ) {
140130
141131 JMenuBar menubar = jmol .getFrame ().getJMenuBar ();
142132
143133 JMenu symm = new JMenu ("Symmetry" );
144134 symm .setMnemonic (KeyEvent .VK_S );
145135
146- SymmetryListener li = new SymmetryListener (jmol , axes );
136+ SymmetryListener li = new SymmetryListener (jmol , symmResult );
147137
148138 JMenuItem subunits = new JMenuItem ("Subunit Superposition" );
149139 subunits .addActionListener (li );
@@ -152,6 +142,10 @@ private static void addSymmetryMenu(MultipleAlignmentJmol jmol,
152142 JMenuItem multiple = new JMenuItem ("Multiple Structure Alignment" );
153143 multiple .addActionListener (li );
154144 symm .add (multiple );
145+
146+ JMenuItem self = new JMenuItem ("Optimal Self Alignment" );
147+ self .addActionListener (li );
148+ symm .add (self );
155149
156150 JMenuItem pg = new JMenuItem ("Point Group Symmetry" );
157151 pg .addActionListener (li );
@@ -178,18 +172,17 @@ private static void addSymmetryMenu(MultipleAlignmentJmol jmol,
178172 * only print elementary axes if true
179173 * @return
180174 */
181- public static String printSymmetryAxes (MultipleAlignment msa ,
182- SymmetryAxes axes , boolean elementary ) {
175+ public static String printSymmetryAxes (CeSymmResult symm , boolean elementary ) {
183176
184177 int id = 0 ;
185178 String script = "" ;
186- Atom [] atoms = msa . getAtomArrays (). get ( 0 );
179+ Atom [] atoms = symm . getAtoms ( );
187180
188181 List <Matrix4d > symmAxes = null ;
189182 if (elementary ) {
190- symmAxes = axes .getElementaryAxes ();
183+ symmAxes = symm . getAxes () .getElementaryAxes ();
191184 } else {
192- symmAxes = axes .getSymmetryAxes ();
185+ symmAxes = symm . getAxes () .getSymmetryAxes ();
193186 }
194187
195188 for (Matrix4d axis : symmAxes ) {
@@ -209,10 +202,10 @@ public static String printSymmetryAxes(MultipleAlignment msa,
209202 * @param symm
210203 * @return
211204 */
212- public static String printPointGroupAxes (MultipleAlignment symm ) {
205+ public static String printPointGroupAxes (CeSymmResult symm ) {
213206
214207 QuatSymmetryResults gSymmetry = SymmetryTools
215- .getQuaternarySymmetry (symm );
208+ .getQuaternarySymmetry (symm . getMultipleAlignment () );
216209
217210 AxisAligner axes = AxisAligner .getInstance (gSymmetry );
218211
0 commit comments