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.ValueConstrainI;
import jalview.ws.params.WsParamSetI;
import jalview.ws.params.simple.BooleanOption;
+import jalview.ws.params.simple.DoubleParameter;
+import jalview.ws.params.simple.FileParameter;
import jalview.ws.params.simple.IntegerParameter;
import jalview.ws.params.simple.LogarithmicParameter;
import jalview.ws.params.simple.Option;
+import jalview.ws.params.simple.RadioChoiceParameter;
import jalview.ws.params.simple.StringParameter;
+import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Arrays;
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";
+
+ private String name;
- String name;
+ private List<WsParamSetI> presets = new ArrayList<>();
- List<WsParamSetI> presets = new ArrayList<>();
+ private AlignmentViewport viewport;
- public HMMERParamStore(String name)
+ 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)
{
+ case HMMSEARCH:
getHMMSearchParams(args);
- }
- if ("hmmalign".equals(name))
- {
+ break;
+ case HMMALIGN:
getHMMAlignParams(args);
-
- }
- if ("hmmbuild".equals(name))
- {
+ break;
+ case HMMBUILD:
getHMMBuildParams(args);
-
+ break;
+ default:
}
+
return args;
}
+ /**
+ * Answers default parameters for hmmsearch, taking into account any
+ * configured as user preferences
+ *
+ * @param args
+ */
private void getHMMSearchParams(List<ArgumentI> 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())
- {
- Collection<String> databases = new ArrayList<>();
- databases.add(MessageManager.getString("label.this_alignment"));
- Scanner nameScanner = new Scanner(names);
-
- if (nameScanner.hasNext())
- {
- while (nameScanner.hasNext())
- {
- String next = nameScanner.next();
- if (next == "null")
- {
- Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
- Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
- }
- else
- {
- databases.add(next);
- }
- }
- }
- 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));
- }
+ /*
+ * 'Options'
+ */
args.add(new BooleanOption(
- MessageManager.getString("label.auto_align_seqs"),
+ MessageManager.getString(HMMSearch.AUTO_ALIGN_SEQS_KEY),
MessageManager.getString("label.auto_align_seqs_desc"), false,
- false, true, null));
+ false, false, null));
args.add(new BooleanOption(
- MessageManager.getString("label.use_accessions"),
+ MessageManager.getString(HMMSearch.USE_ACCESSIONS_KEY),
MessageManager.getString("label.use_accessions_desc"), false,
false, true, null));
args.add(new BooleanOption(
- MessageManager.getString("label.trim_termini"),
+ MessageManager.getString(HMMSearch.TRIM_TERMINI_KEY),
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,
- -3d, -37.92977945, 1d, 10d));
+
/*
- args.add(new DoubleParameter(
- MessageManager.getString("label.seq_score"),
- MessageManager.getString("label.seq_score_desc"), false,
- 0d, 0d, 10000d));
- */
+ * 'Parameters'
+ */
+ addChoiceOfHmm(args);
+
+ // addChoiceOfDatabase(args);
+
+ String thisAlignment = MessageManager
+ .getString(HMMSearch.THIS_ALIGNMENT_KEY);
+ String database = MessageManager.getString("label.database");
+ args.add(new RadioChoiceParameter(
+ MessageManager.getString("action.search"), null,
+ Arrays.asList(thisAlignment,
+ database),
+ thisAlignment));
+ args.add(new FileParameter(database, "", false, "", ""));
+ args.add(new IntegerParameter(
+ MessageManager.getString(HMMSearch.NUMBER_OF_RESULTS_KEY),
+ MessageManager.getString("label.number_of_results_desc"), true,
+ 100, 0, 100000));
+ args.add(new RadioChoiceParameter(
+ MessageManager.getString(HMMSearch.REPORTING_CUTOFF_KEY), null,
+ Arrays.asList(HMMSearch.CUTOFF_NONE, HMMSearch.CUTOFF_EVALUE,
+ HMMSearch.CUTOFF_SCORE),
+ HMMSearch.CUTOFF_EVALUE));
args.add(new LogarithmicParameter(
- MessageManager.getString("label.dom_e_value_desc"),
- MessageManager.getString("label.dom_e_value_desc"), false,
- -3d, -37.92977945, 1d, 10d));
- /*
- args.add(new DoubleParameter(
- MessageManager.getString("label.dom_score"),
- MessageManager.getString("label.dom_score_desc"), false, 0d,
- 0d,
- 10000d));
- */
+ MessageManager.getString(HMMSearch.SEQ_EVALUE_KEY),
+ MessageManager.getString("label.seq_e_value_desc"), false, 1D,
+ 1E-38, 10D));
+ args.add(new LogarithmicParameter(
+ MessageManager.getString(HMMSearch.DOM_EVALUE_KEY),
+ MessageManager.getString("label.dom_e_value_desc"), false, 1D,
+ 1E-38, 10D));
+ args.add(
+ new DoubleParameter(
+ MessageManager.getString(HMMSearch.SEQ_SCORE_KEY),
+ MessageManager.getString("label.seq_score_desc"), false,
+ 0d, 0d, 1000d));
+ args.add(
+ new DoubleParameter(
+ MessageManager.getString(HMMSearch.DOM_SCORE_KEY),
+ MessageManager.getString("label.dom_score_desc"), false,
+ 0d, 0d, 1000d));
}
+ /**
+ * Constructs a choice parameter for database to search; always includes 'this
+ * alignment', and also includes any databases held under user preferences key
+ * "HMMSEARCH_DBS" as a comma-delimited list
+ *
+ * @param args
+ */
+ protected void addChoiceOfDatabase(List<ArgumentI> args)
+ {
+ String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
+ if (names == null || names.isEmpty())
+ {
+ return;
+ }
+
+ List<String> filePaths = new ArrayList<>();
+ List<String> fileNames = new ArrayList<>();
+
+ String thisAlignment = MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY);
+ filePaths.add(thisAlignment);
+ fileNames.add(thisAlignment);
+
+ Scanner nameScanner = new Scanner(names);
+ nameScanner.useDelimiter(Preferences.COMMA);
+
+ while (nameScanner.hasNext())
+ {
+ String next = nameScanner.next();
+ if ("null".equals(next))
+ {
+ Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
+ }
+ else
+ {
+ filePaths.add(next);
+ int pos = next.lastIndexOf(File.separator);
+ String fileName = next.substring(pos + 1);
+ fileNames.add(fileName);
+ }
+ }
+ nameScanner.close();
+ ArgumentI databasesOption = new StringParameter(
+ MessageManager.getString(HMMSearch.DATABASE_KEY),
+ MessageManager.getString("label.database_for_hmmsearch"), true,
+ thisAlignment,
+ thisAlignment,
+ filePaths, fileNames);
+ args.add(databasesOption);
+ }
+ /**
+ * 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 = Trim Non-Matching Termini_desc"),
- false, false, true, null));
+ MessageManager.getString("label.trim_termini_desc"),
+ false, false, def, null));
}
- private void getHMMBuildParams(List<ArgumentI> args)
+ /**
+ * Adds an argument representing the choice of HMM sequences (profiles)
+ * against which to perform align or search, provided at least one is found
+ *
+ * @param args
+ */
+ protected void addChoiceOfHmm(List<ArgumentI> args)
{
- args.add(new StringParameter(MessageManager.getString("label.hmm_name"),
- MessageManager.getString("label.hmm_name_desc"), true, ""));
- args.add(new BooleanOption(
- MessageManager.getString("label.use_reference"),
- MessageManager.getString("label.use_reference_desc"), true,
- true, true, null));
+ 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);
+ ArgumentI arg = new StringParameter(
+ MessageManager.getString("label.use_hmm"), null, true, defseq,
+ defseq, options, null);
+ args.add(arg);
+ }
}
- private class StringValueConstrain implements ValueConstrainI
+ /**
+ * 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);
- @Override
- public ValueType getType()
- {
- return ValueType.String;
- }
-
- @Override
- public Number getMax()
+ /*
+ * only enable Use Reference Annotation if RF is present
+ */
+ if (viewport.hasReferenceAnnotation())
{
- return null;
+ args.add(new BooleanOption(
+ MessageManager.getString("label.use_reference"),
+ MessageManager.getString("label.use_reference_desc"), true,
+ true, true, null));
}
- @Override
- public Number getMin()
+ /*
+ * choice of whether to compute HMM for alignment and/or group(s)
+ * - only if there are any groups
+ */
+ if (!viewport.getAlignment().getGroups().isEmpty())
{
- return null;
+ List<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;
}