package jalview.hmmer;
import jalview.bin.Cache;
+import jalview.datamodel.SequenceI;
import jalview.gui.Preferences;
import jalview.util.MessageManager;
+import jalview.viewmodel.AlignmentViewport;
import jalview.ws.params.ArgumentI;
import jalview.ws.params.ParamDatastoreI;
import jalview.ws.params.WsParamSetI;
private static final String HMMSEARCH = "hmmsearch";
- String name;
+ private String name;
- List<WsParamSetI> presets = new ArrayList<>();
+ private List<WsParamSetI> presets = new ArrayList<>();
- private HMMERParamStore(String nam)
+ private AlignmentViewport viewport;
+
+ private HMMERParamStore(String nam, AlignmentViewport av)
{
+ this.viewport = av;
this.name = nam;
}
- public static HMMERParamStore forBuild()
+ public static HMMERParamStore forBuild(AlignmentViewport viewport)
{
- return new HMMERParamStore(HMMBUILD);
+ return new HMMERParamStore(HMMBUILD, viewport);
}
- public static HMMERParamStore forAlign()
+ public static HMMERParamStore forAlign(AlignmentViewport viewport)
{
- return new HMMERParamStore(HMMALIGN);
+ return new HMMERParamStore(HMMALIGN, viewport);
}
- public static HMMERParamStore forSearch()
+ public static HMMERParamStore forSearch(AlignmentViewport viewport)
{
- return new HMMERParamStore(HMMSEARCH);
+ return new HMMERParamStore(HMMSEARCH, viewport);
}
@Override
return args;
}
+ /**
+ * Answers default parameters for hmmsearch, taking into account any
+ * configured as user preferences
+ *
+ * @param args
+ */
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,
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);
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"),
0d, 0d, 10000d));
*/
args.add(new LogarithmicParameter(
- MessageManager.getString("label.dom_e_value_desc"),
- MessageManager.getString("label.dom_e_value_desc"), false, -3d,
- -37.92977945, 1d, 10d));
+ MessageManager.getString("label.dom_e_value"),
+ MessageManager.getString("label.dom_e_value_desc"), false, 1D,
+ 1E-38, 10D, 10D));
/*
args.add(new DoubleParameter(
MessageManager.getString("label.dom_score"),
*/
}
+ /**
+ * Answers default parameters for hmmalign, taking into account any configured
+ * as user preferences
+ *
+ * @param args
+ */
private void getHMMAlignParams(List<ArgumentI> args)
{
+ addChoiceOfHmm(args);
+
+ boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI,
+ false);
args.add(new BooleanOption(
MessageManager.getString("label.trim_termini"),
MessageManager.getString("label.trim_termini_desc"),
- false, false, true, null));
+ false, false, def, null));
+ }
+
+ /**
+ * 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
+ *
+ * @param args
+ */
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
- args.add(new BooleanOption(
- MessageManager.getString("label.use_reference"),
- MessageManager.getString("label.use_reference_desc"), true,
- true, true, null));
+ /*
+ * 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(
+ MessageManager.getString("label.use_reference"),
+ MessageManager.getString("label.use_reference_desc"), true,
+ 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"),