package jalview.hmmer; import jalview.bin.Cache; import jalview.gui.Preferences; import jalview.util.MessageManager; import jalview.ws.params.ArgumentI; import jalview.ws.params.ParamDatastoreI; import jalview.ws.params.WsParamSetI; import jalview.ws.params.simple.BooleanOption; import jalview.ws.params.simple.IntegerParameter; import jalview.ws.params.simple.LogarithmicParameter; import jalview.ws.params.simple.Option; import jalview.ws.params.simple.StringParameter; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Scanner; public final class HMMERParamStore implements ParamDatastoreI { private static final String HMMBUILD = "hmmbuild"; private static final String HMMALIGN = "hmmalign"; private static final String HMMSEARCH = "hmmsearch"; String name; List presets = new ArrayList<>(); private HMMERParamStore(String nam) { this.name = nam; } public static HMMERParamStore forBuild() { return new HMMERParamStore(HMMBUILD); } public static HMMERParamStore forAlign() { return new HMMERParamStore(HMMALIGN); } public static HMMERParamStore forSearch() { return new HMMERParamStore(HMMSEARCH); } @Override public List getPresets() { return presets; } @Override public WsParamSetI getPreset(String nam) { return null; } @Override public List getServiceParameters() { List args = new ArrayList<>(); switch (name) { case HMMSEARCH: getHMMSearchParams(args); break; case HMMALIGN: getHMMAlignParams(args); break; case HMMBUILD: getHMMBuildParams(args); break; default: } return args; } private void getHMMSearchParams(List args) { args.add(new IntegerParameter( MessageManager.getString("label.number_of_results"), MessageManager.getString("label.number_of_results_desc"), true, 100, 0, 100000)); String names = Cache.getProperty(Preferences.HMMSEARCH_DBS); if (names != null && !names.isEmpty()) { Collection databases = new ArrayList<>(); databases.add(MessageManager.getString("label.this_alignment")); Scanner nameScanner = new Scanner(names); if (nameScanner.hasNext()) { while (nameScanner.hasNext()) { String next = nameScanner.next(); if ("null".equals(next)) { Cache.setProperty(Preferences.HMMSEARCH_DBS, ""); Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, ""); } else { databases.add(next); } } } nameScanner.close(); args.add(new Option(MessageManager.getString("label.database"), MessageManager.getString("label.database_for_hmmsearch"), true, MessageManager.getString("label.this_alignment"), MessageManager.getString("label.this_alignment"), databases, null)); } args.add(new BooleanOption( MessageManager.getString("label.auto_align_seqs"), MessageManager.getString("label.auto_align_seqs_desc"), false, false, true, null)); args.add(new BooleanOption( MessageManager.getString("label.use_accessions"), MessageManager.getString("label.use_accessions_desc"), false, false, true, null)); args.add(new BooleanOption( MessageManager.getString("label.trim_termini"), MessageManager.getString("label.trim_termini_desc"), false, false, true, null)); args.add(new LogarithmicParameter( MessageManager.getString("label.seq_e_value"), MessageManager.getString("label.seq_e_value_desc"), false, -3d, -37.92977945, 1d, 10d)); /* args.add(new DoubleParameter( MessageManager.getString("label.seq_score"), MessageManager.getString("label.seq_score_desc"), false, 0d, 0d, 10000d)); */ args.add(new LogarithmicParameter( MessageManager.getString("label.dom_e_value_desc"), MessageManager.getString("label.dom_e_value_desc"), false, -3d, -37.92977945, 1d, 10d)); /* args.add(new DoubleParameter( MessageManager.getString("label.dom_score"), MessageManager.getString("label.dom_score_desc"), false, 0d, 0d, 10000d)); */ } private void getHMMAlignParams(List args) { args.add(new BooleanOption( MessageManager.getString("label.trim_termini"), MessageManager.getString("label.trim_termini_desc"), false, false, true, null)); } private void getHMMBuildParams(List args) { args.add(new StringParameter(MessageManager.getString("label.hmm_name"), MessageManager.getString("label.hmm_name_desc"), true, "")); // todo only enable Use Reference Annotation if RF is present args.add(new BooleanOption( MessageManager.getString("label.use_reference"), MessageManager.getString("label.use_reference_desc"), true, true, true, null)); Collection options = new ArrayList<>(); options.add(MessageManager.getString("label.alignment")); options.add(MessageManager.getString("label.groups_and_alignment")); options.add(MessageManager.getString("label.groups")); options.add(MessageManager.getString("label.selected_group")); args.add(new Option(MessageManager.getString("label.hmmbuild_for"), MessageManager.getString("label.hmmbuild_for_desc"), true, MessageManager.getString("label.alignment"), MessageManager.getString("label.alignment"), options, null)); } @Override public boolean presetExists(String forName) { return false; } @Override public void deletePreset(String forName) { } @Override public void storePreset(String presetName, String text, List jobParams) { } @Override public void updatePreset(String oldName, String presetName, String text, List jobParams) { } @Override public WsParamSetI parseServiceParameterFile(String forName, String description, String[] serviceURL, String parameters) throws IOException { return null; } @Override public String generateServiceParameterFile(WsParamSetI pset) throws IOException { return null; } }