JAL-591 slider scale factor now derived from min-max range
[jalview.git] / src / jalview / hmmer / HMMERParamStore.java
index d12475a..6f1f51f 100644 (file)
@@ -1,6 +1,7 @@
 package jalview.hmmer;
 
 import jalview.bin.Cache;
+import jalview.datamodel.SequenceI;
 import jalview.gui.Preferences;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
@@ -95,6 +96,8 @@ public final class HMMERParamStore implements ParamDatastoreI
    */
   private void getHMMSearchParams(List<ArgumentI> args)
   {
+    addChoiceOfHmm(args);
+
     args.add(new IntegerParameter(
             MessageManager.getString("label.number_of_results"),
             MessageManager.getString("label.number_of_results_desc"), true,
@@ -102,7 +105,7 @@ public final class HMMERParamStore implements ParamDatastoreI
     String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
     if (names != null && !names.isEmpty())
     {
-      Collection<String> databases = new ArrayList<>();
+      List<String> databases = new ArrayList<>();
       databases.add(MessageManager.getString("label.this_alignment"));
       Scanner nameScanner = new Scanner(names);
 
@@ -143,8 +146,8 @@ public final class HMMERParamStore implements ParamDatastoreI
             false, true, null));
     args.add(new LogarithmicParameter(
             MessageManager.getString("label.seq_e_value"),
-            MessageManager.getString("label.seq_e_value_desc"), false, -3d,
-            -37.92977945, 1d, 10d));
+            MessageManager.getString("label.seq_e_value_desc"), false, 1D,
+            1E-38, 10D, 10D));
     /*
     args.add(new DoubleParameter(
             MessageManager.getString("label.seq_score"),
@@ -153,8 +156,8 @@ public final class HMMERParamStore implements ParamDatastoreI
        */
     args.add(new LogarithmicParameter(
             MessageManager.getString("label.dom_e_value"),
-            MessageManager.getString("label.dom_e_value_desc"), false, -3d,
-            -37.92977945, 1d, 10d));
+            MessageManager.getString("label.dom_e_value_desc"), false, 1D,
+            1E-38, 10D, 10D));
     /*
     args.add(new DoubleParameter(
             MessageManager.getString("label.dom_score"),
@@ -172,6 +175,8 @@ public final class HMMERParamStore implements ParamDatastoreI
    */
   private void getHMMAlignParams(List<ArgumentI> args)
   {
+    addChoiceOfHmm(args);
+
     boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI,
             false);
     args.add(new BooleanOption(
@@ -181,6 +186,29 @@ public final class HMMERParamStore implements ParamDatastoreI
   }
 
   /**
+   * Adds an argument representing the choice of HMM sequences (profiles)
+   * against which to perform align or search, provided more than one is found
+   * 
+   * @param args
+   */
+  protected void addChoiceOfHmm(List<ArgumentI> args)
+  {
+    List<SequenceI> hmms = viewport.getAlignment().getHmmSequences();
+    if (!hmms.isEmpty())
+    {
+      List<String> options = new ArrayList<>();
+      for (SequenceI hmmSeq : hmms)
+      {
+        options.add(hmmSeq.getName());
+      }
+      String defseq = options.get(0);
+      Option option = new Option(MessageManager.getString("label.use_hmm"),
+              "", true, defseq, defseq, options, null);
+      args.add(option);
+    }
+  }
+
+  /**
    * Answers default parameters for hmmbuild, taking into account any configured
    * as user preferences
    * 
@@ -188,9 +216,19 @@ public final class HMMERParamStore implements ParamDatastoreI
    */
   private void getHMMBuildParams(List<ArgumentI> args)
   {
-    args.add(new StringParameter(MessageManager.getString("label.hmm_name"),
-            MessageManager.getString("label.hmm_name_desc"), true, ""));
-    // todo only enable Use Reference Annotation if RF is present
+    /*
+     * name to give the computed alignment HMM consensus sequence
+     * (Jalview constructs group HMM consensus sequence names)
+     */
+    String defValue = "Alignment_HMM";
+    StringParameter nameParam = new StringParameter(MessageManager.getString("label.hmm_name"),
+            MessageManager.getString("label.hmm_name_desc"), true, defValue,
+            defValue);
+    args.add(nameParam);
+
+    /*
+     * only enable Use Reference Annotation if RF is present
+     */
     if (viewport.hasReferenceAnnotation())
     {
       args.add(new BooleanOption(
@@ -199,12 +237,14 @@ public final class HMMERParamStore implements ParamDatastoreI
               true, true, null));
     }
 
+    /*
+     * choice of whether to compute HMM for alignment and/or group(s)
+     */
     Collection<String> options = new ArrayList<>();
     options.add(MessageManager.getString("label.alignment"));
     options.add(MessageManager.getString("label.groups_and_alignment"));
     options.add(MessageManager.getString("label.groups"));
     options.add(MessageManager.getString("label.selected_group"));
-
     args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
             MessageManager.getString("label.hmmbuild_for_desc"), true,
             MessageManager.getString("label.alignment"),