c6684812324a8a46cc8fdd9c440e5e2c9f9035c1
[jalview.git] / src / jalview / hmmer / HMMERParamStore.java
1 package jalview.hmmer;
2
3 import jalview.bin.Cache;
4 import jalview.gui.Preferences;
5 import jalview.util.MessageManager;
6 import jalview.ws.params.ArgumentI;
7 import jalview.ws.params.ParamDatastoreI;
8 import jalview.ws.params.WsParamSetI;
9 import jalview.ws.params.simple.BooleanOption;
10 import jalview.ws.params.simple.IntegerParameter;
11 import jalview.ws.params.simple.LogarithmicParameter;
12 import jalview.ws.params.simple.Option;
13 import jalview.ws.params.simple.StringParameter;
14
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.Collection;
18 import java.util.List;
19 import java.util.Scanner;
20
21 public final class HMMERParamStore implements ParamDatastoreI
22 {
23   private static final String HMMBUILD = "hmmbuild";
24
25   private static final String HMMALIGN = "hmmalign";
26
27   private static final String HMMSEARCH = "hmmsearch";
28
29   String name;
30
31   List<WsParamSetI> presets = new ArrayList<>();
32
33   private HMMERParamStore(String nam)
34   {
35     this.name = nam;
36   }
37
38   public static HMMERParamStore forBuild()
39   {
40     return new HMMERParamStore(HMMBUILD);
41   }
42
43   public static HMMERParamStore forAlign()
44   {
45     return new HMMERParamStore(HMMALIGN);
46   }
47
48   public static HMMERParamStore forSearch()
49   {
50     return new HMMERParamStore(HMMSEARCH);
51   }
52
53   @Override
54   public List<WsParamSetI> getPresets()
55   {
56     return presets;
57   }
58
59   @Override
60   public WsParamSetI getPreset(String nam)
61   {
62     return null;
63   }
64
65   @Override
66   public List<ArgumentI> getServiceParameters()
67   {
68     List<ArgumentI> args = new ArrayList<>();
69     switch (name)
70     {
71     case HMMSEARCH:
72       getHMMSearchParams(args);
73       break;
74     case HMMALIGN:
75       getHMMAlignParams(args);
76       break;
77     case HMMBUILD:
78       getHMMBuildParams(args);
79       break;
80     default:
81     }
82
83     return args;
84   }
85
86   private void getHMMSearchParams(List<ArgumentI> args)
87   {
88     args.add(new IntegerParameter(
89             MessageManager.getString("label.number_of_results"),
90             MessageManager.getString("label.number_of_results_desc"), true,
91             100, 0, 100000));
92     String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
93     if (names != null && !names.isEmpty())
94     {
95       Collection<String> databases = new ArrayList<>();
96       databases.add(MessageManager.getString("label.this_alignment"));
97       Scanner nameScanner = new Scanner(names);
98
99       if (nameScanner.hasNext())
100       {
101         while (nameScanner.hasNext())
102         {
103           String next = nameScanner.next();
104           if ("null".equals(next))
105           {
106             Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
107             Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
108           }
109           else
110           {
111             databases.add(next);
112           }
113         }
114       }
115       nameScanner.close();
116       args.add(new Option(MessageManager.getString("label.database"),
117               MessageManager.getString("label.database_for_hmmsearch"),
118               true, MessageManager.getString("label.this_alignment"),
119               MessageManager.getString("label.this_alignment"), databases,
120               null));
121     }
122     args.add(new BooleanOption(
123             MessageManager.getString("label.auto_align_seqs"),
124             MessageManager.getString("label.auto_align_seqs_desc"), false,
125             false, true, null));
126     args.add(new BooleanOption(
127             MessageManager.getString("label.use_accessions"),
128             MessageManager.getString("label.use_accessions_desc"), false,
129             false, true, null));
130     args.add(new BooleanOption(
131             MessageManager.getString("label.trim_termini"),
132             MessageManager.getString("label.trim_termini_desc"), false,
133             false, true, null));
134     args.add(new LogarithmicParameter(
135             MessageManager.getString("label.seq_e_value"),
136             MessageManager.getString("label.seq_e_value_desc"), false, -3d,
137             -37.92977945, 1d, 10d));
138     /*
139     args.add(new DoubleParameter(
140             MessageManager.getString("label.seq_score"),
141             MessageManager.getString("label.seq_score_desc"), false,
142             0d, 0d, 10000d));
143        */
144     args.add(new LogarithmicParameter(
145             MessageManager.getString("label.dom_e_value_desc"),
146             MessageManager.getString("label.dom_e_value_desc"), false, -3d,
147             -37.92977945, 1d, 10d));
148     /*
149     args.add(new DoubleParameter(
150             MessageManager.getString("label.dom_score"),
151             MessageManager.getString("label.dom_score_desc"), false, 0d,
152             0d,
153             10000d));
154             */
155   }
156
157   private void getHMMAlignParams(List<ArgumentI> args)
158   {
159     args.add(new BooleanOption(
160             MessageManager.getString("label.trim_termini"),
161             MessageManager.getString("label.trim_termini_desc"),
162             false, false, true, null));
163   }
164
165   private void getHMMBuildParams(List<ArgumentI> args)
166   {
167     args.add(new StringParameter(MessageManager.getString("label.hmm_name"),
168             MessageManager.getString("label.hmm_name_desc"), true, ""));
169     // todo only enable Use Reference Annotation if RF is present
170     args.add(new BooleanOption(
171             MessageManager.getString("label.use_reference"),
172             MessageManager.getString("label.use_reference_desc"), true,
173             true, true, null));
174
175     Collection<String> options = new ArrayList<>();
176     options.add(MessageManager.getString("label.alignment"));
177     options.add(MessageManager.getString("label.groups_and_alignment"));
178     options.add(MessageManager.getString("label.groups"));
179     options.add(MessageManager.getString("label.selected_group"));
180
181     args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
182             MessageManager.getString("label.hmmbuild_for_desc"), true,
183             MessageManager.getString("label.alignment"),
184             MessageManager.getString("label.alignment"), options, null));
185   }
186
187   @Override
188   public boolean presetExists(String forName)
189   {
190     return false;
191   }
192
193   @Override
194   public void deletePreset(String forName)
195   {
196   }
197
198   @Override
199   public void storePreset(String presetName, String text,
200           List<ArgumentI> jobParams)
201   {
202   }
203
204   @Override
205   public void updatePreset(String oldName, String presetName, String text,
206           List<ArgumentI> jobParams)
207   {
208   }
209
210   @Override
211   public WsParamSetI parseServiceParameterFile(String forName,
212           String description, String[] serviceURL, String parameters)
213           throws IOException
214   {
215     return null;
216   }
217
218   @Override
219   public String generateServiceParameterFile(WsParamSetI pset)
220           throws IOException
221   {
222     return null;
223   }
224
225 }