JAL-789 pairwise alignment via calculations dialog, allowing score model to be changed
authorJames Procter <j.procter@dundee.ac.uk>
Sat, 16 Dec 2023 08:43:06 +0000 (08:43 +0000)
committerJames Procter <j.procter@dundee.ac.uk>
Sat, 16 Dec 2023 08:43:06 +0000 (08:43 +0000)
src/jalview/analysis/AlignSeq.java
src/jalview/gui/CalculationChooser.java
src/jalview/gui/PairwiseAlignPanel.java

index 75ccdfc..edf19ec 100755 (executable)
@@ -26,6 +26,7 @@ import jalview.analysis.scoremodels.PIDModel;
 import jalview.analysis.scoremodels.ScoreMatrix;
 import jalview.analysis.scoremodels.ScoreModels;
 import jalview.analysis.scoremodels.SimilarityParams;
+import jalview.api.analysis.SimilarityParamsI;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Mapping;
@@ -1163,4 +1164,12 @@ public class AlignSeq
     }
     return redundancy;
   }
+
+  public void setScoreMatrix(ScoreMatrix params)
+  {
+    if (params!=null)
+    {
+      scoreMatrix = params;
+    }
+  }
 }
index af41e58..daab62b 100644 (file)
@@ -53,6 +53,7 @@ import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
 
 import jalview.analysis.TreeBuilder;
+import jalview.analysis.scoremodels.ScoreMatrix;
 import jalview.analysis.scoremodels.ScoreModels;
 import jalview.analysis.scoremodels.SimilarityParams;
 import jalview.api.analysis.ScoreModelI;
@@ -76,12 +77,17 @@ public class CalculationChooser extends JPanel
 
   private static final Font VERDANA_11PT = new Font("Verdana", 0, 11);
 
+
+  private static final int MIN_PAIRWISE_SELECTION = 2;
+
   private static final int MIN_TREE_SELECTION = 3;
 
   private static final int MIN_PCA_SELECTION = 4;
 
   AlignFrame af;
 
+  JRadioButton pairwise;
+
   JRadioButton pca;
 
   JRadioButton neighbourJoining;
@@ -166,6 +172,9 @@ public class CalculationChooser extends JPanel
     averageDistance = new JRadioButton(
             MessageManager.getString("label.tree_calc_av"));
     averageDistance.setOpaque(false);
+    
+    pairwise = new JRadioButton(MessageManager.getString("label.pairwise_alignment"));
+    pairwise.setOpaque(false);
 
     JPanel calcChoicePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
     calcChoicePanel.setOpaque(false);
@@ -191,11 +200,13 @@ public class CalculationChooser extends JPanel
     treePanel.add(averageDistance);
 
     calcChoicePanel.add(treePanel);
+    calcChoicePanel.add(pairwise,FlowLayout.CENTER);
 
     ButtonGroup calcTypes = new ButtonGroup();
     calcTypes.add(pca);
     calcTypes.add(neighbourJoining);
     calcTypes.add(averageDistance);
+    calcTypes.add(pairwise);
 
     ActionListener calcChanged = new ActionListener()
     {
@@ -208,7 +219,7 @@ public class CalculationChooser extends JPanel
     pca.addActionListener(calcChanged);
     neighbourJoining.addActionListener(calcChanged);
     averageDistance.addActionListener(calcChanged);
-
+    pairwise.addActionListener(calcChanged);
     /*
      * score models drop-down - with added tooltips!
      */
@@ -319,8 +330,10 @@ public class CalculationChooser extends JPanel
             MIN_TREE_SELECTION);
     boolean checkAverageDistance = checkEnabled(averageDistance, size,
             MIN_TREE_SELECTION);
+    boolean checkPairwise = checkEnabled(pairwise, size,
+            MIN_PAIRWISE_SELECTION);
 
-    if (checkPca || checkNeighbourJoining || checkAverageDistance)
+    if (checkPca || checkNeighbourJoining || checkAverageDistance || checkPairwise)
     {
       calculate.setToolTipText(null);
       calculate.setEnabled(true);
@@ -521,15 +534,33 @@ public class CalculationChooser extends JPanel
     if (doPCA)
     {
       openPcaPanel(modelName, params);
-    }
-    else
+    } else {
+    if (pairwise.isSelected())
+    {
+      openPairwisePanel(modelName,params);
+    } else 
     {
       openTreePanel(modelName, params);
-    }
+    }}
 
     // closeFrame();
   }
 
+  private void openPairwisePanel(String modelName, SimilarityParamsI params)
+  {
+    ScoreModelI sm = ScoreModels.getInstance().getScoreModel(modelName, af.alignPanel);
+    if (sm==null || !(sm instanceof ScoreMatrix))
+    {
+      return;
+    }
+    JInternalFrame frame = new JInternalFrame();
+    frame.setFrameIcon(null);
+    frame.setContentPane(new PairwiseAlignPanel(af.getViewport(),(ScoreMatrix)sm));
+    Desktop.addInternalFrame(frame,
+            MessageManager.getString("action.pairwise_alignment"), 600,
+            500);    
+  }
+
   /**
    * Open a new Tree panel on the desktop
    * 
@@ -597,6 +628,7 @@ public class CalculationChooser extends JPanel
     new Thread(pcaPanel).start();
 
   }
+    
 
   /**
    * 
index b5b6ffc..2c65bcc 100755 (executable)
@@ -21,6 +21,9 @@
 package jalview.gui;
 
 import jalview.analysis.AlignSeq;
+import jalview.analysis.scoremodels.ScoreMatrix;
+import jalview.api.analysis.ScoreModelI;
+import jalview.api.analysis.SimilarityParamsI;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.SequenceGroup;
@@ -51,10 +54,22 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel
    * Creates a new PairwiseAlignPanel object.
    * 
    * @param viewport
-   *          DOCUMENT ME!
+   *          contains selected sequences to align
    */
   public PairwiseAlignPanel(AlignmentViewport viewport)
   {
+    this(viewport,null);
+  }
+  /**
+   * Creates a new PairwiseAlignPanel object.
+   * 
+   * @param viewport
+   *          contains selected sequences to align
+   */
+
+  public PairwiseAlignPanel(AlignmentViewport viewport, ScoreMatrix params)
+  {
     super();
     this.av = viewport;
 
@@ -98,7 +113,10 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel
         {
           continue;
         }
-
+        if (params!=null)
+        {
+          as.setScoreMatrix(params);
+        }
         as.calcScoreMatrix();
         as.traceAlignment();