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;
import jalview.ws.params.simple.IntegerParameter;
import jalview.ws.params.simple.LogarithmicParameter;
import jalview.ws.params.simple.Option;
+import jalview.ws.params.simple.StringParameter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
-
-public class HMMERParamStore implements ParamDatastoreI
+public final class HMMERParamStore implements ParamDatastoreI
{
+ private static final String HMMBUILD = "hmmbuild";
+
+ private static final String HMMALIGN = "hmmalign";
+
+ private static final String HMMSEARCH = "hmmsearch";
- String name;
+ private String name;
- List<WsParamSetI> presets = new ArrayList<>();
+ private List<WsParamSetI> presets = new ArrayList<>();
- public HMMERParamStore(String name)
+ private AlignmentViewport viewport;
+
+ private HMMERParamStore(String nam, AlignmentViewport av)
{
- this.name = name;
+ this.viewport = av;
+ this.name = nam;
+ }
+
+ public static HMMERParamStore forBuild(AlignmentViewport viewport)
+ {
+ return new HMMERParamStore(HMMBUILD, viewport);
+ }
+
+ public static HMMERParamStore forAlign(AlignmentViewport viewport)
+ {
+ return new HMMERParamStore(HMMALIGN, viewport);
+ }
+
+ public static HMMERParamStore forSearch(AlignmentViewport viewport)
+ {
+ return new HMMERParamStore(HMMSEARCH, viewport);
}
@Override
public List<WsParamSetI> getPresets()
{
- // TODO Auto-generated method stub
return presets;
}
@Override
- public WsParamSetI getPreset(String name)
+ public WsParamSetI getPreset(String nam)
{
- // TODO Auto-generated method stub
return null;
}
public List<ArgumentI> getServiceParameters()
{
List<ArgumentI> args = new ArrayList<>();
- if ("hmmsearch".equals(name))
+ switch (name)
{
- args.add(new IntegerParameter(
- MessageManager.getString("label.number_of_results"),
- MessageManager
- .getString("label.number_of_results_desc"),
- true, 100, 0, 100000));
- String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
- if (names != null && !names.isEmpty())
- {
- Collection<String> databases = new ArrayList<>();
- databases.add("This Alignment");
- Scanner nameScanner = new Scanner(names);
+ case HMMSEARCH:
+ getHMMSearchParams(args);
+ break;
+ case HMMALIGN:
+ getHMMAlignParams(args);
+ break;
+ case HMMBUILD:
+ getHMMBuildParams(args);
+ break;
+ default:
+ }
+
+ return args;
+ }
- if (nameScanner.hasNext())
+ /**
+ * 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,
+ 100, 0, 100000));
+ String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
+ if (names != null && !names.isEmpty())
+ {
+ List<String> databases = new ArrayList<>();
+ databases.add(MessageManager.getString("label.this_alignment"));
+ Scanner nameScanner = new Scanner(names);
+
+ if (nameScanner.hasNext())
+ {
+ while (nameScanner.hasNext())
{
- while (nameScanner.hasNext())
+ String next = nameScanner.next();
+ if ("null".equals(next))
+ {
+ Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
+ Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
+ }
+ else
{
- String next = nameScanner.next();
- if (next == "null")
- {
- Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
- Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
- }
- else
- {
- databases.add(next);
- }
+ databases.add(next);
}
}
- nameScanner.close();
- args.add(new Option(MessageManager.getString("label.database"),
- MessageManager.getString("label.database_for_hmmsearch"),
- true, "This Alignment", "This Alignment", databases, null));
}
- args.add(new BooleanOption(
- MessageManager.getString("label.auto_align_seqs"),
- MessageManager.getString("label.auto_align_seqs_desc"),
- false, false, true, null));
- args.add(new BooleanOption(
- MessageManager.getString("label.use_accessions"),
- MessageManager.getString("label.use_accessions_desc"),
- false, false, true, null));
- args.add(new BooleanOption(
- MessageManager.getString("label.trim_termini"),
- MessageManager.getString("label.trim_termini_desc"), false,
- false, true, null));
- args.add(new LogarithmicParameter(
- MessageManager.getString("label.seq_e_value"),
- MessageManager.getString("label.seq_e_value_desc"), false,
- 0.001d, -63d, 9d, 4d));
- /*
- args.add(new DoubleParameter(
- MessageManager.getString("label.seq_score"),
- MessageManager.getString("label.seq_score_desc"), false,
- 0d, 0d, 10000d));
- */
- args.add(new LogarithmicParameter(
- MessageManager.getString("label.dom_e_value_desc"),
- MessageManager.getString("label.dom_e_value_desc"), false,
- 0.001d, -63d, 9d, 4d));
- /*
- args.add(new DoubleParameter(
- MessageManager.getString("label.dom_score"),
- MessageManager.getString("label.dom_score_desc"), false, 0d,
- 0d,
- 10000d));
- */
+ nameScanner.close();
+ args.add(new Option(MessageManager.getString("label.database"),
+ MessageManager.getString("label.database_for_hmmsearch"),
+ true, MessageManager.getString("label.this_alignment"),
+ MessageManager.getString("label.this_alignment"), databases,
+ null));
}
- if ("hmmalign".equals(name))
- {
- args.add(new BooleanOption(
- MessageManager.getString("label.trim_termini"),
- MessageManager.getString(
- "label.trim_termini = Trim Non-Matching Termini_desc"),
- false, false, true, null));
+ args.add(new BooleanOption(
+ MessageManager.getString("label.auto_align_seqs"),
+ MessageManager.getString("label.auto_align_seqs_desc"), false,
+ false, true, null));
+ args.add(new BooleanOption(
+ MessageManager.getString("label.use_accessions"),
+ MessageManager.getString("label.use_accessions_desc"), false,
+ false, true, null));
+ args.add(new BooleanOption(
+ MessageManager.getString("label.trim_termini"),
+ MessageManager.getString("label.trim_termini_desc"), false,
+ false, true, null));
+ args.add(new LogarithmicParameter(
+ MessageManager.getString("label.seq_e_value"),
+ MessageManager.getString("label.seq_e_value_desc"), false, 1D,
+ 1E-38, 10D, 10D));
+ /*
+ args.add(new DoubleParameter(
+ MessageManager.getString("label.seq_score"),
+ MessageManager.getString("label.seq_score_desc"), false,
+ 0d, 0d, 10000d));
+ */
+ args.add(new LogarithmicParameter(
+ 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"),
+ MessageManager.getString("label.dom_score_desc"), false, 0d,
+ 0d,
+ 10000d));
+ */
+ }
+ /**
+ * 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, 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);
}
- if ("hmmbuild".equals(name))
+ }
+
+ /**
+ * Answers default parameters for hmmbuild, taking into account any configured
+ * as user preferences
+ *
+ * @param args
+ */
+ private void getHMMBuildParams(List<ArgumentI> args)
+ {
+ /*
+ * 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.trim_termini"),
- MessageManager.getString(
- "label.trim_termini = Trim Non-Matching Termini_desc"),
- false, false, true, null));
-
+ MessageManager.getString("label.use_reference"),
+ MessageManager.getString("label.use_reference_desc"), true,
+ true, true, null));
}
- return args;
+
+ /*
+ * 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"),
+ MessageManager.getString("label.alignment"), options, null));
}
@Override
- public boolean presetExists(String name)
+ public boolean presetExists(String forName)
{
- // TODO Auto-generated method stub
return false;
}
@Override
- public void deletePreset(String name)
+ public void deletePreset(String forName)
{
- // TODO Auto-generated method stub
-
}
@Override
public void storePreset(String presetName, String text,
List<ArgumentI> jobParams)
{
- // TODO Auto-generated method stub
-
}
@Override
public void updatePreset(String oldName, String presetName, String text,
List<ArgumentI> jobParams)
{
- // TODO Auto-generated method stub
-
}
@Override
- public WsParamSetI parseServiceParameterFile(String name,
+ public WsParamSetI parseServiceParameterFile(String forName,
String description, String[] serviceURL, String parameters)
throws IOException
{
- // TODO Auto-generated method stub
return null;
}
public String generateServiceParameterFile(WsParamSetI pset)
throws IOException
{
- // TODO Auto-generated method stub
return null;
}