3 import jalview.bin.Cache;
4 import jalview.gui.Preferences;
5 import jalview.util.MessageManager;
6 import jalview.viewmodel.AlignmentViewport;
7 import jalview.ws.params.ArgumentI;
8 import jalview.ws.params.ParamDatastoreI;
9 import jalview.ws.params.WsParamSetI;
10 import jalview.ws.params.simple.BooleanOption;
11 import jalview.ws.params.simple.IntegerParameter;
12 import jalview.ws.params.simple.LogarithmicParameter;
13 import jalview.ws.params.simple.Option;
14 import jalview.ws.params.simple.StringParameter;
16 import java.io.IOException;
17 import java.util.ArrayList;
18 import java.util.Collection;
19 import java.util.List;
20 import java.util.Scanner;
22 public final class HMMERParamStore implements ParamDatastoreI
24 private static final String HMMBUILD = "hmmbuild";
26 private static final String HMMALIGN = "hmmalign";
28 private static final String HMMSEARCH = "hmmsearch";
32 private List<WsParamSetI> presets = new ArrayList<>();
34 private AlignmentViewport viewport;
36 private HMMERParamStore(String nam, AlignmentViewport av)
42 public static HMMERParamStore forBuild(AlignmentViewport viewport)
44 return new HMMERParamStore(HMMBUILD, viewport);
47 public static HMMERParamStore forAlign(AlignmentViewport viewport)
49 return new HMMERParamStore(HMMALIGN, viewport);
52 public static HMMERParamStore forSearch(AlignmentViewport viewport)
54 return new HMMERParamStore(HMMSEARCH, viewport);
58 public List<WsParamSetI> getPresets()
64 public WsParamSetI getPreset(String nam)
70 public List<ArgumentI> getServiceParameters()
72 List<ArgumentI> args = new ArrayList<>();
76 getHMMSearchParams(args);
79 getHMMAlignParams(args);
82 getHMMBuildParams(args);
91 * Answers default parameters for hmmsearch, taking into account any
92 * configured as user preferences
96 private void getHMMSearchParams(List<ArgumentI> args)
98 args.add(new IntegerParameter(
99 MessageManager.getString("label.number_of_results"),
100 MessageManager.getString("label.number_of_results_desc"), true,
102 String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
103 if (names != null && !names.isEmpty())
105 Collection<String> databases = new ArrayList<>();
106 databases.add(MessageManager.getString("label.this_alignment"));
107 Scanner nameScanner = new Scanner(names);
109 if (nameScanner.hasNext())
111 while (nameScanner.hasNext())
113 String next = nameScanner.next();
114 if ("null".equals(next))
116 Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
117 Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
126 args.add(new Option(MessageManager.getString("label.database"),
127 MessageManager.getString("label.database_for_hmmsearch"),
128 true, MessageManager.getString("label.this_alignment"),
129 MessageManager.getString("label.this_alignment"), databases,
132 args.add(new BooleanOption(
133 MessageManager.getString("label.auto_align_seqs"),
134 MessageManager.getString("label.auto_align_seqs_desc"), false,
136 args.add(new BooleanOption(
137 MessageManager.getString("label.use_accessions"),
138 MessageManager.getString("label.use_accessions_desc"), false,
140 args.add(new BooleanOption(
141 MessageManager.getString("label.trim_termini"),
142 MessageManager.getString("label.trim_termini_desc"), false,
144 args.add(new LogarithmicParameter(
145 MessageManager.getString("label.seq_e_value"),
146 MessageManager.getString("label.seq_e_value_desc"), false, -3d,
147 -37.92977945, 1d, 10d));
149 args.add(new DoubleParameter(
150 MessageManager.getString("label.seq_score"),
151 MessageManager.getString("label.seq_score_desc"), false,
154 args.add(new LogarithmicParameter(
155 MessageManager.getString("label.dom_e_value"),
156 MessageManager.getString("label.dom_e_value_desc"), false, -3d,
157 -37.92977945, 1d, 10d));
159 args.add(new DoubleParameter(
160 MessageManager.getString("label.dom_score"),
161 MessageManager.getString("label.dom_score_desc"), false, 0d,
168 * Answers default parameters for hmmalign, taking into account any configured
169 * as user preferences
173 private void getHMMAlignParams(List<ArgumentI> args)
175 boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI,
177 args.add(new BooleanOption(
178 MessageManager.getString("label.trim_termini"),
179 MessageManager.getString("label.trim_termini_desc"),
180 false, false, def, null));
184 * Answers default parameters for hmmbuild, taking into account any configured
185 * as user preferences
189 private void getHMMBuildParams(List<ArgumentI> args)
191 args.add(new StringParameter(MessageManager.getString("label.hmm_name"),
192 MessageManager.getString("label.hmm_name_desc"), true, ""));
193 // todo only enable Use Reference Annotation if RF is present
194 if (viewport.hasReferenceAnnotation())
196 args.add(new BooleanOption(
197 MessageManager.getString("label.use_reference"),
198 MessageManager.getString("label.use_reference_desc"), true,
202 Collection<String> options = new ArrayList<>();
203 options.add(MessageManager.getString("label.alignment"));
204 options.add(MessageManager.getString("label.groups_and_alignment"));
205 options.add(MessageManager.getString("label.groups"));
206 options.add(MessageManager.getString("label.selected_group"));
208 args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
209 MessageManager.getString("label.hmmbuild_for_desc"), true,
210 MessageManager.getString("label.alignment"),
211 MessageManager.getString("label.alignment"), options, null));
215 public boolean presetExists(String forName)
221 public void deletePreset(String forName)
226 public void storePreset(String presetName, String text,
227 List<ArgumentI> jobParams)
232 public void updatePreset(String oldName, String presetName, String text,
233 List<ArgumentI> jobParams)
238 public WsParamSetI parseServiceParameterFile(String forName,
239 String description, String[] serviceURL, String parameters)
246 public String generateServiceParameterFile(WsParamSetI pset)