3 import jalview.bin.Cache;
4 import jalview.datamodel.SequenceI;
5 import jalview.gui.Preferences;
6 import jalview.util.MessageManager;
7 import jalview.viewmodel.AlignmentViewport;
8 import jalview.ws.params.ArgumentI;
9 import jalview.ws.params.ParamDatastoreI;
10 import jalview.ws.params.WsParamSetI;
11 import jalview.ws.params.simple.BooleanOption;
12 import jalview.ws.params.simple.IntegerParameter;
13 import jalview.ws.params.simple.LogarithmicParameter;
14 import jalview.ws.params.simple.Option;
15 import jalview.ws.params.simple.StringParameter;
17 import java.io.IOException;
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.List;
21 import java.util.Scanner;
23 public final class HMMERParamStore implements ParamDatastoreI
25 private static final String HMMBUILD = "hmmbuild";
27 private static final String HMMALIGN = "hmmalign";
29 private static final String HMMSEARCH = "hmmsearch";
33 private List<WsParamSetI> presets = new ArrayList<>();
35 private AlignmentViewport viewport;
37 private HMMERParamStore(String nam, AlignmentViewport av)
43 public static HMMERParamStore forBuild(AlignmentViewport viewport)
45 return new HMMERParamStore(HMMBUILD, viewport);
48 public static HMMERParamStore forAlign(AlignmentViewport viewport)
50 return new HMMERParamStore(HMMALIGN, viewport);
53 public static HMMERParamStore forSearch(AlignmentViewport viewport)
55 return new HMMERParamStore(HMMSEARCH, viewport);
59 public List<WsParamSetI> getPresets()
65 public WsParamSetI getPreset(String nam)
71 public List<ArgumentI> getServiceParameters()
73 List<ArgumentI> args = new ArrayList<>();
77 getHMMSearchParams(args);
80 getHMMAlignParams(args);
83 getHMMBuildParams(args);
92 * Answers default parameters for hmmsearch, taking into account any
93 * configured as user preferences
97 private void getHMMSearchParams(List<ArgumentI> args)
101 args.add(new IntegerParameter(
102 MessageManager.getString("label.number_of_results"),
103 MessageManager.getString("label.number_of_results_desc"), true,
105 String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
106 if (names != null && !names.isEmpty())
108 List<String> databases = new ArrayList<>();
109 databases.add(MessageManager.getString("label.this_alignment"));
110 Scanner nameScanner = new Scanner(names);
112 if (nameScanner.hasNext())
114 while (nameScanner.hasNext())
116 String next = nameScanner.next();
117 if ("null".equals(next))
119 Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
120 Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
129 args.add(new Option(MessageManager.getString("label.database"),
130 MessageManager.getString("label.database_for_hmmsearch"),
131 true, MessageManager.getString("label.this_alignment"),
132 MessageManager.getString("label.this_alignment"), databases,
135 args.add(new BooleanOption(
136 MessageManager.getString("label.auto_align_seqs"),
137 MessageManager.getString("label.auto_align_seqs_desc"), false,
139 args.add(new BooleanOption(
140 MessageManager.getString("label.use_accessions"),
141 MessageManager.getString("label.use_accessions_desc"), false,
143 args.add(new BooleanOption(
144 MessageManager.getString("label.trim_termini"),
145 MessageManager.getString("label.trim_termini_desc"), false,
147 args.add(new LogarithmicParameter(
148 MessageManager.getString("label.seq_e_value"),
149 MessageManager.getString("label.seq_e_value_desc"), false, 1D,
152 args.add(new DoubleParameter(
153 MessageManager.getString("label.seq_score"),
154 MessageManager.getString("label.seq_score_desc"), false,
157 args.add(new LogarithmicParameter(
158 MessageManager.getString("label.dom_e_value"),
159 // MessageManager.getString("label.dom_e_value_desc"), false, -3d,
160 // -37.92977945, 1d, 10d));
161 MessageManager.getString("label.dom_e_value_desc"), false, 1D,
164 args.add(new DoubleParameter(
165 MessageManager.getString("label.dom_score"),
166 MessageManager.getString("label.dom_score_desc"), false, 0d,
173 * Answers default parameters for hmmalign, taking into account any configured
174 * as user preferences
178 private void getHMMAlignParams(List<ArgumentI> args)
180 addChoiceOfHmm(args);
182 boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI,
184 args.add(new BooleanOption(
185 MessageManager.getString("label.trim_termini"),
186 MessageManager.getString("label.trim_termini_desc"),
187 false, false, def, null));
191 * Adds an argument representing the choice of HMM sequences (profiles)
192 * against which to perform align or search, provided more than one is found
196 protected void addChoiceOfHmm(List<ArgumentI> args)
198 List<SequenceI> hmms = viewport.getAlignment().getHmmSequences();
201 List<String> options = new ArrayList<>();
202 for (SequenceI hmmSeq : hmms)
204 options.add(hmmSeq.getName());
206 String defseq = options.get(0);
207 Option option = new Option(MessageManager.getString("label.use_hmm"),
208 "", true, defseq, defseq, options, null);
214 * Answers default parameters for hmmbuild, taking into account any configured
215 * as user preferences
219 private void getHMMBuildParams(List<ArgumentI> args)
222 * name to give the computed alignment HMM consensus sequence
223 * (Jalview constructs group HMM consensus sequence names)
225 String defValue = "Alignment_HMM";
226 StringParameter nameParam = new StringParameter(MessageManager.getString("label.hmm_name"),
227 MessageManager.getString("label.hmm_name_desc"), true, defValue,
232 * only enable Use Reference Annotation if RF is present
234 if (viewport.hasReferenceAnnotation())
236 args.add(new BooleanOption(
237 MessageManager.getString("label.use_reference"),
238 MessageManager.getString("label.use_reference_desc"), true,
243 * choice of whether to compute HMM for alignment and/or group(s)
245 Collection<String> options = new ArrayList<>();
246 options.add(MessageManager.getString("label.alignment"));
247 options.add(MessageManager.getString("label.groups_and_alignment"));
248 options.add(MessageManager.getString("label.groups"));
249 options.add(MessageManager.getString("label.selected_group"));
250 args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
251 MessageManager.getString("label.hmmbuild_for_desc"), true,
252 MessageManager.getString("label.alignment"),
253 MessageManager.getString("label.alignment"), options, null));
257 public boolean presetExists(String forName)
263 public void deletePreset(String forName)
268 public void storePreset(String presetName, String text,
269 List<ArgumentI> jobParams)
274 public void updatePreset(String oldName, String presetName, String text,
275 List<ArgumentI> jobParams)
280 public WsParamSetI parseServiceParameterFile(String forName,
281 String description, String[] serviceURL, String parameters)
288 public String generateServiceParameterFile(WsParamSetI pset)