Clover icon

Coverage Report

  1. Project Clover database Thu Dec 4 2025 16:11:35 GMT
  2. Package jalview.hmmer

File HMMERParamStore.java

 

Coverage histogram

../../img/srcFileCovDistChart0.png
60% of files have more coverage

Code metrics

12
110
21
1
481
368
32
0.29
5.24
21
1.52

Classes

Class Line # Actions
HMMERParamStore 27 110 32
0.00%
 

Contributing tests

No tests hitting this source file were found.

Source view

1    package jalview.hmmer;
2   
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.DoubleParameter;
13    import jalview.ws.params.simple.FileParameter;
14    import jalview.ws.params.simple.IntegerParameter;
15    import jalview.ws.params.simple.LogarithmicParameter;
16    import jalview.ws.params.simple.Option;
17    import jalview.ws.params.simple.RadioChoiceParameter;
18    import jalview.ws.params.simple.StringParameter;
19   
20    import java.io.File;
21    import java.io.IOException;
22    import java.util.ArrayList;
23    import java.util.Arrays;
24    import java.util.List;
25    import java.util.Scanner;
26   
 
27    public final class HMMERParamStore implements ParamDatastoreI
28    {
29    private static final String HMMBUILD = "hmmbuild";
30   
31    private static final String HMMALIGN = "hmmalign";
32   
33    private static final String HMMSEARCH = "hmmsearch";
34   
35    private static final String JACKHMMER = "jackhmmer";
36   
37    private String name;
38   
39    private List<WsParamSetI> presets = new ArrayList<>();
40   
41    private AlignmentViewport viewport;
42   
 
43  0 toggle private HMMERParamStore(String nam, AlignmentViewport av)
44    {
45  0 this.viewport = av;
46  0 this.name = nam;
47    }
48   
 
49  0 toggle public static HMMERParamStore forBuild(AlignmentViewport viewport)
50    {
51  0 return new HMMERParamStore(HMMBUILD, viewport);
52    }
53   
 
54  0 toggle public static HMMERParamStore forAlign(AlignmentViewport viewport)
55    {
56  0 return new HMMERParamStore(HMMALIGN, viewport);
57    }
58   
 
59  0 toggle public static HMMERParamStore forSearch(AlignmentViewport viewport)
60    {
61  0 return new HMMERParamStore(HMMSEARCH, viewport);
62    }
63   
 
64  0 toggle public static HMMERParamStore forJackhmmer(AlignmentViewport viewport)
65    {
66  0 return new HMMERParamStore(JACKHMMER, viewport);
67    }
68   
 
69  0 toggle @Override
70    public List<WsParamSetI> getPresets()
71    {
72  0 return presets;
73    }
74   
 
75  0 toggle @Override
76    public WsParamSetI getPreset(String nam)
77    {
78  0 return null;
79    }
80   
 
81  0 toggle @Override
82    public List<ArgumentI> getServiceParameters()
83    {
84  0 List<ArgumentI> args = new ArrayList<>();
85  0 switch (name)
86    {
87  0 case HMMSEARCH:
88  0 getHMMSearchParams(args);
89  0 break;
90  0 case HMMALIGN:
91  0 getHMMAlignParams(args);
92  0 break;
93  0 case HMMBUILD:
94  0 getHMMBuildParams(args);
95  0 break;
96  0 case JACKHMMER:
97  0 getJackhmmerParams(args);
98  0 default:
99    }
100   
101  0 return args;
102    }
103   
104    /**
105    * Answers default parameters for hmmsearch, taking into account any
106    * configured as user preferences
107    *
108    * @param args
109    */
 
110  0 toggle private void getHMMSearchParams(List<ArgumentI> args)
111    {
112    /*
113    * 'Options'
114    */
115  0 args.add(new BooleanOption(
116    MessageManager.getString(HMMSearch.AUTO_ALIGN_SEQS_KEY),
117    MessageManager.getString("label.auto_align_seqs_desc"), false,
118    false, false, null));
119  0 args.add(new BooleanOption(
120    MessageManager.getString(HMMSearch.USE_ACCESSIONS_KEY),
121    MessageManager.getString("label.use_accessions_desc"), false,
122    false, true, null));
123  0 args.add(new BooleanOption(
124    MessageManager.getString(HMMSearch.TRIM_TERMINI_KEY),
125    MessageManager.getString("label.trim_termini_desc"), false,
126    false, true, null));
127  0 args.add(new BooleanOption(
128    MessageManager.getString(HMMSearch.RETURN_N_NEW_SEQ),
129    MessageManager.getString("label.check_for_new_sequences_desc"),
130    false, false, false, null));
131   
132    /*
133    * 'Parameters'
134    */
135  0 addChoiceOfHmm(args);
136   
137    // addChoiceOfDatabase(args);
138   
139  0 String thisAlignment = MessageManager
140    .getString(HMMSearch.THIS_ALIGNMENT_KEY);
141  0 String database = MessageManager.getString("label.database");
142  0 args.add(new FileParameter(database, "", false, "", ""));
143  0 args.add(new IntegerParameter(
144    MessageManager.getString(HMMSearch.NUMBER_OF_RESULTS_KEY),
145    MessageManager.getString("label.number_of_results_desc"), true,
146    100, 0, 100000));
147  0 args.add(new RadioChoiceParameter(
148    MessageManager.getString(HMMSearch.REPORTING_CUTOFF_KEY), null,
149    Arrays.asList(MessageManager.getString(HMMSearch.CUTOFF_EVALUE),
150    MessageManager.getString(HMMSearch.CUTOFF_SCORE)),
151    MessageManager.getString(HMMSearch.CUTOFF_EVALUE)));
152  0 args.add(new LogarithmicParameter(
153    MessageManager.getString(HMMSearch.REPORTING_SEQ_EVALUE_KEY),
154    MessageManager.getString("label.reporting_seq_e_value_desc"),
155    false, 1D,
156    1E-100, 10D));
157  0 args.add(new LogarithmicParameter(
158    MessageManager.getString(HMMSearch.REPORTING_DOM_EVALUE_KEY),
159    MessageManager.getString("label.reporting_dom_e_value_desc"),
160    false, 1D,
161    1E-100, 10D));
162  0 args.add(
163    new DoubleParameter(
164    MessageManager
165    .getString(HMMSearch.REPORTING_SEQ_SCORE_KEY),
166    MessageManager.getString(
167    "label.reporting_seq_score_desc"),
168    false,
169    0d, 0d, 1000d));
170  0 args.add(
171    new DoubleParameter(
172    MessageManager
173    .getString(HMMSearch.REPORTING_DOM_SCORE_KEY),
174    MessageManager.getString(
175    "label.reporting_dom_score_desc"),
176    false,
177    0d, 0d, 1000d));
178  0 args.add(new RadioChoiceParameter(
179    MessageManager.getString(HMMSearch.INCLUSION_THRESHOLD_KEY),
180    null,
181    Arrays.asList(MessageManager.getString(HMMSearch.CUTOFF_EVALUE),
182    MessageManager.getString(HMMSearch.CUTOFF_SCORE)),
183    MessageManager.getString(HMMSearch.CUTOFF_EVALUE)));
184  0 args.add(new LogarithmicParameter(
185    MessageManager.getString(HMMSearch.INCLUSION_SEQ_EVALUE_KEY),
186    MessageManager.getString("label.inclusion_seq_e_value_desc"),
187    false, 1D,
188    1E-100, 10D));
189  0 args.add(new LogarithmicParameter(
190    MessageManager.getString(HMMSearch.INCLUSION_DOM_EVALUE_KEY),
191    MessageManager.getString("label.inclusion_dom_e_value_desc"),
192    false, 1D,
193    1E-100, 10D));
194  0 args.add(new DoubleParameter(
195    MessageManager.getString(HMMSearch.INCLUSION_SEQ_SCORE_KEY),
196    MessageManager.getString("label.inclusion_seq_score_desc"),
197    false, 0d, 0d,
198    1000d));
199  0 args.add(new DoubleParameter(
200    MessageManager.getString(HMMSearch.INCLUSION_DOM_SCORE_KEY),
201    MessageManager.getString("label.inclusion_dom_score_desc"),
202    false, 0d, 0d,
203    1000d));
204    }
205   
206    /**
207    * Answers default parameters for jackhmmer, taking into account any configured
208    * as user preferences
209    *
210    * @param args
211    */
 
212  0 toggle private void getJackhmmerParams(List<ArgumentI> args)
213    {
214   
215    /*
216    * 'Parameters'
217    */
218  0 addChoiceOfSequence(args);
219   
220    // addChoiceOfDatabase(args);
221   
222  0 String database = MessageManager.getString("label.database");
223  0 args.add(new FileParameter(database, "", false, "", ""));
224  0 args.add(new IntegerParameter(
225    MessageManager.getString(HMMSearch.NUMBER_OF_ITERATIONS),
226    MessageManager.getString("label.number_of_iterations_desc"),
227    true, 5, 1, 20));
228  0 args.add(new RadioChoiceParameter(
229    MessageManager.getString(JackHMMER.REPORTING_CUTOFF_KEY), null,
230    Arrays.asList(MessageManager.getString(JackHMMER.CUTOFF_NONE),
231    MessageManager.getString(JackHMMER.CUTOFF_EVALUE),
232    MessageManager.getString(JackHMMER.CUTOFF_SCORE)),
233    MessageManager.getString(JackHMMER.CUTOFF_EVALUE)));
234  0 args.add(new LogarithmicParameter(
235    MessageManager.getString(JackHMMER.REPORTING_SEQ_EVALUE_KEY),
236    MessageManager.getString("label.reporting_seq_e_value_desc"),
237    false, 1D,
238    1E-38, 10D));
239  0 args.add(new LogarithmicParameter(
240    MessageManager.getString(JackHMMER.REPORTING_DOM_EVALUE_KEY),
241    MessageManager.getString(
242    "label.reporting_dom_e_value_desc"),
243    false, 1D,
244    1E-38, 10D));
245  0 args.add(new DoubleParameter(
246    MessageManager.getString(JackHMMER.REPORTING_SEQ_SCORE_KEY),
247    MessageManager.getString("label.reporting_seq_score_desc"),
248    false, 0d, 0d,
249    1000d));
250  0 args.add(new DoubleParameter(
251    MessageManager.getString(JackHMMER.REPORTING_DOM_SCORE_KEY),
252    MessageManager.getString("label.reporting_dom_score_desc"),
253    false, 0d, 0d,
254    1000d));
255  0 args.add(new RadioChoiceParameter(
256    MessageManager.getString(HMMSearch.INCLUSION_THRESHOLD_KEY),
257    null,
258    Arrays.asList(MessageManager.getString(HMMSearch.CUTOFF_EVALUE),
259    MessageManager.getString(HMMSearch.CUTOFF_SCORE)),
260    MessageManager.getString(HmmerCommand.CUTOFF_EVALUE)));
261  0 args.add(new LogarithmicParameter(
262    MessageManager.getString(HMMSearch.INCLUSION_SEQ_EVALUE_KEY),
263    MessageManager.getString("label.inclusion_seq_e_value_desc"),
264    false, 1D, 1E-100, 10D));
265  0 args.add(new LogarithmicParameter(
266    MessageManager.getString(HMMSearch.INCLUSION_DOM_EVALUE_KEY),
267    MessageManager.getString("label.inclusion_dom_e_value_desc"),
268    false, 1D, 1E-100, 10D));
269  0 args.add(new DoubleParameter(
270    MessageManager.getString(HMMSearch.INCLUSION_SEQ_SCORE_KEY),
271    MessageManager.getString("label.inclusion_seq_score_desc"),
272    false, 0d, 0d, 1000d));
273  0 args.add(new DoubleParameter(
274    MessageManager.getString(HMMSearch.INCLUSION_DOM_SCORE_KEY),
275    MessageManager.getString("label.inclusion_dom_score_desc"),
276    false, 0d, 0d, 1000d));
277    }
278   
279    /**
280    * Constructs a choice parameter for database to search; always includes 'this
281    * alignment', and also includes any databases held under user preferences key
282    * "HMMSEARCH_DBS" as a comma-delimited list
283    *
284    * @param args
285    */
 
286  0 toggle protected void addChoiceOfDatabase(List<ArgumentI> args)
287    {
288  0 String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
289  0 if (names == null || names.isEmpty())
290    {
291  0 return;
292    }
293   
294  0 List<String> filePaths = new ArrayList<>();
295  0 List<String> fileNames = new ArrayList<>();
296   
297  0 String thisAlignment = MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY);
298  0 filePaths.add(thisAlignment);
299  0 fileNames.add(thisAlignment);
300   
301  0 Scanner nameScanner = new Scanner(names);
302  0 nameScanner.useDelimiter(Preferences.COMMA);
303   
304  0 while (nameScanner.hasNext())
305    {
306  0 String next = nameScanner.next();
307  0 if ("null".equals(next))
308    {
309  0 Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
310    }
311    else
312    {
313  0 filePaths.add(next);
314  0 int pos = next.lastIndexOf(File.separator);
315  0 String fileName = next.substring(pos + 1);
316  0 fileNames.add(fileName);
317    }
318    }
319  0 nameScanner.close();
320  0 ArgumentI databasesOption = new StringParameter(
321    MessageManager.getString(HMMSearch.DATABASE_KEY),
322    MessageManager.getString("label.database_for_hmmsearch"), true,
323    thisAlignment,
324    thisAlignment,
325    filePaths, fileNames);
326  0 args.add(databasesOption);
327    }
328   
329    /**
330    * Answers default parameters for hmmalign, taking into account any configured
331    * as user preferences
332    *
333    * @param args
334    */
 
335  0 toggle private void getHMMAlignParams(List<ArgumentI> args)
336    {
337  0 addChoiceOfHmm(args);
338   
339  0 boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI,
340    false);
341  0 args.add(new BooleanOption(
342    MessageManager.getString("label.trim_termini"),
343    MessageManager.getString("label.trim_termini_desc"),
344    false, false, def, null));
345    }
346   
347    /**
348    * Adds an argument representing the choice of HMM sequences (profiles)
349    * against which to perform align or search, provided at least one is found
350    *
351    * @param args
352    */
 
353  0 toggle protected void addChoiceOfHmm(List<ArgumentI> args)
354    {
355  0 List<SequenceI> hmms = viewport.getAlignment().getHmmSequences();
356  0 if (!hmms.isEmpty())
357    {
358  0 List<String> options = new ArrayList<>();
359  0 for (SequenceI hmmSeq : hmms)
360    {
361  0 options.add(hmmSeq.getName());
362    }
363  0 String defseq = options.get(0);
364  0 ArgumentI arg = new StringParameter(
365    MessageManager.getString("label.use_hmm"), null, true, defseq,
366    defseq, options, null);
367  0 args.add(arg);
368    }
369    }
370   
371    /**
372    * Adds an argument representing the choice of sequence against which to perform
373    * jackhmmer
374    *
375    * @param args
376    */
 
377  0 toggle protected void addChoiceOfSequence(List<ArgumentI> args)
378    {
379  0 List<SequenceI> sequences = viewport.getAlignment().getSequences();
380   
381  0 List<String> options = new ArrayList<>();
382   
383  0 for (SequenceI seq : sequences)
384    {
385  0 options.add(seq.getName());
386    }
387   
388  0 String defseq = options.get(0);
389  0 ArgumentI arg = new StringParameter(
390    MessageManager.getString("label.use_sequence"), null, true,
391    defseq,
392    defseq, options, null);
393  0 args.add(arg);
394    }
395   
396    /**
397    * Answers default parameters for hmmbuild, taking into account any configured
398    * as user preferences
399    *
400    * @param args
401    */
 
402  0 toggle private void getHMMBuildParams(List<ArgumentI> args)
403    {
404    /*
405    * name to give the computed alignment HMM consensus sequence
406    * (Jalview constructs group HMM consensus sequence names)
407    */
408  0 String defValue = "Alignment_HMM";
409  0 StringParameter nameParam = new StringParameter(MessageManager.getString("label.hmm_name"),
410    MessageManager.getString("label.hmm_name_desc"), true, defValue,
411    defValue);
412  0 args.add(nameParam);
413   
414    /*
415    * only enable Use Reference Annotation if RF is present
416    */
417  0 if (viewport.hasReferenceAnnotation())
418    {
419  0 args.add(new BooleanOption(
420    MessageManager.getString("label.use_reference"),
421    MessageManager.getString("label.use_reference_desc"), true,
422    true, true, null));
423    }
424   
425    /*
426    * choice of whether to compute HMM for alignment and/or group(s)
427    * - only if there are any groups
428    */
429  0 if (!viewport.getAlignment().getGroups().isEmpty())
430    {
431  0 List<String> options = new ArrayList<>();
432  0 options.add(MessageManager.getString("label.alignment"));
433  0 options.add(MessageManager.getString("label.groups_and_alignment"));
434  0 options.add(MessageManager.getString("label.groups"));
435  0 options.add(MessageManager.getString("label.selected_group"));
436  0 args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
437    MessageManager.getString("label.hmmbuild_for_desc"), true,
438    MessageManager.getString("label.alignment"),
439    MessageManager.getString("label.alignment"), options, null));
440    }
441    }
442   
 
443  0 toggle @Override
444    public boolean presetExists(String forName)
445    {
446  0 return false;
447    }
448   
 
449  0 toggle @Override
450    public void deletePreset(String forName)
451    {
452    }
453   
 
454  0 toggle @Override
455    public void storePreset(String presetName, String text,
456    List<ArgumentI> jobParams)
457    {
458    }
459   
 
460  0 toggle @Override
461    public void updatePreset(String oldName, String presetName, String text,
462    List<ArgumentI> jobParams)
463    {
464    }
465   
 
466  0 toggle @Override
467    public WsParamSetI parseServiceParameterFile(String forName,
468    String description, String[] serviceURL, String parameters)
469    throws IOException
470    {
471  0 return null;
472    }
473   
 
474  0 toggle @Override
475    public String generateServiceParameterFile(WsParamSetI pset)
476    throws IOException
477    {
478  0 return null;
479    }
480   
481    }