Merge branch 'mmw/JAL-4199-task-execution-update' into development/Release_2_12_Branch
[jalview.git] / src / jalview / ws2 / client / ebi / ParamStores.java
1 package jalview.ws2.client.ebi;
2
3 import jalview.ws.params.ArgumentI;
4 import jalview.ws.params.ParamDatastoreI;
5 import jalview.ws.params.ParamManager;
6 import jalview.ws.params.simple.*;
7 import jalview.ws2.params.SimpleParamDatastore;
8
9 import java.net.MalformedURLException;
10 import java.net.URL;
11 import java.util.ArrayList;
12 import java.util.Collections;
13 import java.util.List;
14
15 class ParamStores
16 {
17   static final List<ArgumentI> phmmerParameters;
18
19   /**
20    * Set up phmmer parameters list.
21    */
22   static
23   {
24     var parameters = new ArrayList<ArgumentI>();
25     URL baseURL;
26     try
27     {
28       baseURL = new URL( "https://www.ebi.ac.uk/Tools/services/rest/hmmer3_phmmer/");
29     } catch (MalformedURLException e)
30     {
31       throw new ExceptionInInitializerError(e);
32     }
33     {
34       var builder = StringParameter.newBuilder();
35       builder.setName("cut-offs");
36       builder.setLabel("Cut-offs");
37       builder.setDescription("Set the method of controlling which target sequences match your query.");
38       builder.setRequired(true);
39       builder.setValue("E");
40       builder.setDefaultValue("E");
41       builder.setPossibleValues(List.of("E", "T"));
42       builder.setDisplayValues(List.of("E-values", "Bit scores"));
43       parameters.add(builder.build());
44     }
45     {
46       var builder = DoubleParameter.newBuilder();
47       builder.setName("incE");
48       builder.setLabel("Significance E-values[Sequence]");
49       builder.setDescription("Significance E-values[Sequence]");
50       builder.setRequired(false);
51       builder.setValue(0.01);
52       builder.setDefaultValue(0.01);
53       builder.setMin(0.);
54       builder.setMax(10.);
55       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/incE"));
56       parameters.add(builder.build());
57     }
58     {
59       var builder = DoubleParameter.newBuilder();
60       builder.setName("incdomE");
61       builder.setLabel("Significance E-values[Hit]");
62       builder.setDescription("Significance E-values[Hit]");
63       builder.setRequired(false);
64       builder.setValue(0.03);
65       builder.setDefaultValue(0.03);
66       builder.setMin(0.);
67       builder.setMax(10.);
68       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/incdomE"));
69       parameters.add(builder.build());
70     }
71     {
72       var builder = DoubleParameter.newBuilder();
73       builder.setName("E");
74       builder.setLabel("Report E-values[Sequence]");
75       builder.setDescription("Report E-values[Sequence]");
76       builder.setRequired(false);
77       builder.setValue(1.0);
78       builder.setDefaultValue(1.0);
79       builder.setMin(0.);
80       builder.setMax(10.);
81       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/E"));
82       parameters.add(builder.build());
83     }
84     {
85       var builder = DoubleParameter.newBuilder();
86       builder.setName("domE");
87       builder.setLabel("Report E-values[Hit]");
88       builder.setDescription("Report E-values[Hit]");
89       builder.setRequired(false);
90       builder.setValue(1.0);
91       builder.setDefaultValue(1.0);
92       builder.setMin(0.);
93       builder.setMax(10.);
94       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/domE"));
95       parameters.add(builder.build());
96     }
97     {
98       var builder = DoubleParameter.newBuilder();
99       builder.setName("incT");
100       builder.setLabel("Significance bit scores[Sequence]");
101       builder.setDescription("Significance bit scores[Sequence]");
102       builder.setRequired(false);
103       builder.setValue(25.0);
104       builder.setDefaultValue(25.0);
105       builder.setMin(0.);
106       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/incT"));
107       parameters.add(builder.build());
108     }
109     {
110       var builder = DoubleParameter.newBuilder();
111       builder.setName("incdomT");
112       builder.setLabel("Significance bit scores[Hit]");
113       builder.setDescription("Significance bit scores[Hit]");
114       builder.setRequired(false);
115       builder.setValue(22.0);
116       builder.setDefaultValue(22.0);
117       builder.setMin(0.);
118       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/incdomT"));
119       parameters.add(builder.build());
120     }
121     {
122       var builder = DoubleParameter.newBuilder();
123       builder.setName("T");
124       builder.setLabel("Report bit scores[Sequence]");
125       builder.setDescription("Report bit scores[Sequence]");
126       builder.setRequired(false);
127       builder.setValue(7.0);
128       builder.setDefaultValue(7.0);
129       builder.setMin(0.);
130       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/T"));
131       parameters.add(builder.build());
132     }
133     {
134       var builder = DoubleParameter.newBuilder();
135       builder.setName("domT");
136       builder.setLabel("Report bit scores[Hit]");
137       builder.setDescription("Report bit scores[Hit]");
138       builder.setRequired(false);
139       builder.setValue(5.0);
140       builder.setDefaultValue(5.0);
141       builder.setMin(0.);
142       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/domT"));
143       parameters.add(builder.build());
144     }
145     {
146       var builder = DoubleParameter.newBuilder();
147       builder.setName("popen");
148       builder.setLabel("Gap Penalties[open]");
149       builder.setDescription("Gap Penalties[open]");
150       builder.setRequired(false);
151       builder.setValue(0.02);
152       builder.setDefaultValue(0.02);
153       builder.setMin(0.);
154       builder.setMax(0.5);
155       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/popen"));
156       parameters.add(builder.build());
157     }
158     {
159       var builder = DoubleParameter.newBuilder();
160       builder.setName("pextend");
161       builder.setLabel("Gap Penalties[extend]");
162       builder.setDescription("Gap Penalties[extend]");
163       builder.setRequired(false);
164       builder.setValue(0.4);
165       builder.setDefaultValue(0.4);
166       builder.setMin(0.);
167       builder.setMax(1.);
168       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/pextend"));
169       parameters.add(builder.build());
170     }
171     {
172       var builder = StringParameter.newBuilder();
173       builder.setName("mx");
174       builder.setLabel("Gap Penalties[Substitution scoring matrix]");
175       builder.setDescription("Gap Penalties[Substitution scoring matrix]");
176       builder.setRequired(false);
177       builder.setValue("BLOSUM62");
178       builder.setDefaultValue("BLOSUM62");
179       builder.setPossibleValues(List.of("BLOSUM45", "BLOSUM62", "BLOSUM90", "PAM30", "PAM70"));
180       builder.setDisplayValues(List.of("BLOSUM45", "BLOSUM62", "BLOSUM90", "PAM30", "PAM70"));
181       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/mx"));
182       parameters.add(builder.build());
183     }
184     {
185       var builder = BooleanOption.newBuilder();
186       builder.setName("nobias");
187       builder.setLabel("No bias filter");
188       builder.setDescription(
189               "The '--nobias' option turns off (bypasses) the biased composition filter which is on by default.");
190       builder.setRequired(false);
191       builder.setValue(false);
192       builder.setDefaultValue(false);
193       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/nobias"));
194       parameters.add(builder.build());
195     }
196     {
197       var builder = BooleanOption.newBuilder();
198       builder.setName("compressedout");
199       builder.setLabel("Compressed Output");
200       builder.setDescription(
201               "By default it runs hmm2c plus post-processing (default output), whereas with compressedout, it gets compressed output only.");
202       builder.setRequired(false);
203       builder.setValue(false);
204       builder.setDefaultValue(false);
205       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/compressedout"));
206       parameters.add(builder.build());
207     }
208     {
209       var builder = BooleanOption.newBuilder();
210       builder.setName("alignView");
211       builder.setLabel("Output Alignment");
212       builder.setDescription("Output alignment in result");
213       builder.setRequired(false);
214       builder.setValue(true);
215       builder.setDefaultValue(true);
216       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/alignView"));
217       parameters.add(builder.build());
218     }
219     {
220       var builder = StringParameter.newBuilder();
221       builder.setName("database");
222       builder.setLabel("Sequence Database");
223       builder.setDescription("Sequence Database Selection");
224       builder.setRequired(true);
225       builder.setValue("uniprotkb");
226       builder.setDefaultValue("uniprotkb");
227       builder.setPossibleValues(List.of("swissprot", "uniprotrefprot", "uniprotkb", "pdb", "rp75", "rp55", "rp35", "rp15", "ensembl", "merops", "qfo", "chembl"));
228       builder.setDisplayValues(List.of("SwissProt", "Reference Proteomes", "UniProtKB", "PDB", "rp75", "rp55", "rp35", "rp15", "Ensembl", "MEROPS", "Quest for Orthologs", "ChEMBL"));
229       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/database"));
230       parameters.add(builder.build());
231     }
232     {
233       var builder = DoubleParameter.newBuilder();
234       builder.setName("evalue");
235       builder.setLabel("Expectation Value Threshold");
236       builder.setDescription(
237               "Expectation value cut-off for reporting target profiles in the per-target output.");
238       builder.setRequired(false);
239       builder.setValue(0.01);
240       builder.setDefaultValue(0.01);
241       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/evalue"));
242       parameters.add(builder.build());
243     }
244 //    {
245 //      var builder = StringParameter.newBuilder();
246 //      builder.setName("sequence");
247 //      builder.setLabel("Input Sequence");
248 //      builder.setDescription(
249 //              "The input sequence can be entered directly into this form. The sequence can be be in FASTA or UniProtKB/Swiss-Prot format. A partially formatted sequence is not accepted. Adding a return to the end of the sequence may help certain applications understand the input. Note that directly using data from word processors may yield unpredictable results as hidden/control characters may be present.");
250 //      builder.setRequired(false);
251 //
252 //      builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/sequence"));
253 //      parameters.add(builder.build());
254 //    }
255     {
256       var builder = IntegerParameter.newBuilder();
257       builder.setName("nhits");
258       builder.setLabel("Number of Hits Displayed");
259       builder.setDescription("Number of hits to be displayed.");
260       builder.setRequired(false);
261       builder.setValue(100);
262       builder.setDefaultValue(100);
263       builder.setDetailsUrl(resolveURL(baseURL, "parameterdetails/nhits"));
264       parameters.add(builder.build());
265     }
266     phmmerParameters = Collections.unmodifiableList(parameters);
267   }
268
269   private static URL resolveURL(URL base, String spec)
270   {
271     try
272     {
273       return new URL(base, spec);
274     } catch (MalformedURLException e)
275     {
276       throw new ExceptionInInitializerError(e);
277     }
278   }
279   
280   public static ParamDatastoreI newPhmmerDatastore(URL url, ParamManager manager)
281   {
282     return new SimpleParamDatastore(url, phmmerParameters,
283             Collections.emptyList(), manager);
284   }
285 }