X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fhmmer%2FHMMERParamStore.java;h=df9ab55fa012e39a57eacd97eb15920484c04eff;hb=5cb4c1540eaca054c26ff42a8319f0dbffb1f8e6;hp=b609f696f5dda8a7f28e72376c254532acc20edd;hpb=cda264e0a9bb29a1c401974c10a39827407072bb;p=jalview.git diff --git a/src/jalview/hmmer/HMMERParamStore.java b/src/jalview/hmmer/HMMERParamStore.java index b609f69..df9ab55 100644 --- a/src/jalview/hmmer/HMMERParamStore.java +++ b/src/jalview/hmmer/HMMERParamStore.java @@ -10,15 +10,17 @@ import jalview.ws.params.ParamDatastoreI; import jalview.ws.params.WsParamSetI; import jalview.ws.params.simple.BooleanOption; import jalview.ws.params.simple.DoubleParameter; +import jalview.ws.params.simple.FileParameter; import jalview.ws.params.simple.IntegerParameter; import jalview.ws.params.simple.LogarithmicParameter; import jalview.ws.params.simple.Option; +import jalview.ws.params.simple.RadioChoiceParameter; import jalview.ws.params.simple.StringParameter; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.Scanner; @@ -30,6 +32,8 @@ public final class HMMERParamStore implements ParamDatastoreI private static final String HMMSEARCH = "hmmsearch"; + private static final String JACKHMMER = "jackhmmer"; + private String name; private List presets = new ArrayList<>(); @@ -57,6 +61,11 @@ public final class HMMERParamStore implements ParamDatastoreI return new HMMERParamStore(HMMSEARCH, viewport); } + public static HMMERParamStore forJackhmmer(AlignmentViewport viewport) + { + return new HMMERParamStore(JACKHMMER, viewport); + } + @Override public List getPresets() { @@ -84,6 +93,8 @@ public final class HMMERParamStore implements ParamDatastoreI case HMMBUILD: getHMMBuildParams(args); break; + case JACKHMMER: + getJackhmmerParams(args); default: } @@ -101,42 +112,10 @@ public final class HMMERParamStore implements ParamDatastoreI /* * 'Options' */ - addChoiceOfHmm(args); - - String names = Cache.getProperty(Preferences.HMMSEARCH_DBS); - if (names != null && !names.isEmpty()) - { - List databases = new ArrayList<>(); - databases.add(MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY)); - 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(HMMSearch.DATABASE_KEY), - MessageManager.getString("label.database_for_hmmsearch"), - true, MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY), - MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY), - databases, null)); - } args.add(new BooleanOption( MessageManager.getString(HMMSearch.AUTO_ALIGN_SEQS_KEY), MessageManager.getString("label.auto_align_seqs_desc"), false, - false, true, null)); + false, false, null)); args.add(new BooleanOption( MessageManager.getString(HMMSearch.USE_ACCESSIONS_KEY), MessageManager.getString("label.use_accessions_desc"), false, @@ -145,37 +124,206 @@ public final class HMMERParamStore implements ParamDatastoreI MessageManager.getString(HMMSearch.TRIM_TERMINI_KEY), MessageManager.getString("label.trim_termini_desc"), false, false, true, null)); + args.add(new BooleanOption( + MessageManager.getString(HMMSearch.RETURN_N_NEW_SEQ), + MessageManager.getString("label.check_for_new_sequences_desc"), + false, false, false, null)); /* * 'Parameters' */ + addChoiceOfHmm(args); + + // addChoiceOfDatabase(args); + + String thisAlignment = MessageManager + .getString(HMMSearch.THIS_ALIGNMENT_KEY); + String database = MessageManager.getString("label.database"); + args.add(new FileParameter(database, "", false, "", "")); args.add(new IntegerParameter( MessageManager.getString(HMMSearch.NUMBER_OF_RESULTS_KEY), MessageManager.getString("label.number_of_results_desc"), true, 100, 0, 100000)); - args.add(new StringParameter( + args.add(new RadioChoiceParameter( MessageManager.getString(HMMSearch.REPORTING_CUTOFF_KEY), null, - true, HMMSearch.CUTOFF_NONE, HMMSearch.CUTOFF_NONE, - Arrays.asList(HMMSearch.CUTOFF_NONE, HMMSearch.CUTOFF_EVALUE, - HMMSearch.CUTOFF_SCORE))); + Arrays.asList(MessageManager.getString(HMMSearch.CUTOFF_EVALUE), + MessageManager.getString(HMMSearch.CUTOFF_SCORE)), + MessageManager.getString(HMMSearch.CUTOFF_EVALUE))); args.add(new LogarithmicParameter( - MessageManager.getString(HMMSearch.SEQ_EVALUE_KEY), - MessageManager.getString("label.seq_e_value_desc"), false, 1D, - 1E-38, 10D)); + MessageManager.getString(HMMSearch.REPORTING_SEQ_EVALUE_KEY), + MessageManager.getString("label.reporting_seq_e_value_desc"), + false, 1D, + 1E-100, 10D)); args.add(new LogarithmicParameter( - MessageManager.getString(HMMSearch.DOM_EVALUE_KEY), - MessageManager.getString("label.dom_e_value_desc"), false, 1D, - 1E-38, 10D)); + MessageManager.getString(HMMSearch.REPORTING_DOM_EVALUE_KEY), + MessageManager.getString("label.reporting_dom_e_value_desc"), + false, 1D, + 1E-100, 10D)); args.add( new DoubleParameter( - MessageManager.getString(HMMSearch.SEQ_SCORE_KEY), - MessageManager.getString("label.seq_score_desc"), false, + MessageManager + .getString(HMMSearch.REPORTING_SEQ_SCORE_KEY), + MessageManager.getString( + "label.reporting_seq_score_desc"), + false, 0d, 0d, 1000d)); args.add( new DoubleParameter( - MessageManager.getString(HMMSearch.DOM_SCORE_KEY), - MessageManager.getString("label.dom_score_desc"), false, + MessageManager + .getString(HMMSearch.REPORTING_DOM_SCORE_KEY), + MessageManager.getString( + "label.reporting_dom_score_desc"), + false, 0d, 0d, 1000d)); + args.add(new RadioChoiceParameter( + MessageManager.getString(HMMSearch.INCLUSION_THRESHOLD_KEY), + null, + Arrays.asList(MessageManager.getString(HMMSearch.CUTOFF_EVALUE), + MessageManager.getString(HMMSearch.CUTOFF_SCORE)), + MessageManager.getString(HMMSearch.CUTOFF_EVALUE))); + args.add(new LogarithmicParameter( + MessageManager.getString(HMMSearch.INCLUSION_SEQ_EVALUE_KEY), + MessageManager.getString("label.inclusion_seq_e_value_desc"), + false, 1D, + 1E-100, 10D)); + args.add(new LogarithmicParameter( + MessageManager.getString(HMMSearch.INCLUSION_DOM_EVALUE_KEY), + MessageManager.getString("label.inclusion_dom_e_value_desc"), + false, 1D, + 1E-100, 10D)); + args.add(new DoubleParameter( + MessageManager.getString(HMMSearch.INCLUSION_SEQ_SCORE_KEY), + MessageManager.getString("label.inclusion_seq_score_desc"), + false, 0d, 0d, + 1000d)); + args.add(new DoubleParameter( + MessageManager.getString(HMMSearch.INCLUSION_DOM_SCORE_KEY), + MessageManager.getString("label.inclusion_dom_score_desc"), + false, 0d, 0d, + 1000d)); + } + + /** + * Answers default parameters for jackhmmer, taking into account any configured + * as user preferences + * + * @param args + */ + private void getJackhmmerParams(List args) + { + + /* + * 'Parameters' + */ + addChoiceOfSequence(args); + + // addChoiceOfDatabase(args); + + String database = MessageManager.getString("label.database"); + args.add(new FileParameter(database, "", false, "", "")); + args.add(new IntegerParameter( + MessageManager.getString(HMMSearch.NUMBER_OF_ITERATIONS), + MessageManager.getString("label.number_of_iterations_desc"), + true, 5, 1, 20)); + args.add(new RadioChoiceParameter( + MessageManager.getString(JackHMMER.REPORTING_CUTOFF_KEY), null, + Arrays.asList(MessageManager.getString(JackHMMER.CUTOFF_NONE), + MessageManager.getString(JackHMMER.CUTOFF_EVALUE), + MessageManager.getString(JackHMMER.CUTOFF_SCORE)), + MessageManager.getString(JackHMMER.CUTOFF_EVALUE))); + args.add(new LogarithmicParameter( + MessageManager.getString(JackHMMER.REPORTING_SEQ_EVALUE_KEY), + MessageManager.getString("label.reporting_seq_e_value_desc"), + false, 1D, + 1E-38, 10D)); + args.add(new LogarithmicParameter( + MessageManager.getString(JackHMMER.REPORTING_DOM_EVALUE_KEY), + MessageManager.getString( + "label.reporting_dom_e_value_desc"), + false, 1D, + 1E-38, 10D)); + args.add(new DoubleParameter( + MessageManager.getString(JackHMMER.REPORTING_SEQ_SCORE_KEY), + MessageManager.getString("label.reporting_seq_score_desc"), + false, 0d, 0d, + 1000d)); + args.add(new DoubleParameter( + MessageManager.getString(JackHMMER.REPORTING_DOM_SCORE_KEY), + MessageManager.getString("label.reporting_dom_score_desc"), + false, 0d, 0d, + 1000d)); + args.add(new RadioChoiceParameter( + MessageManager.getString(HMMSearch.INCLUSION_THRESHOLD_KEY), + null, + Arrays.asList(MessageManager.getString(HMMSearch.CUTOFF_EVALUE), + MessageManager.getString(HMMSearch.CUTOFF_SCORE)), + MessageManager.getString(HmmerCommand.CUTOFF_EVALUE))); + args.add(new LogarithmicParameter( + MessageManager.getString(HMMSearch.INCLUSION_SEQ_EVALUE_KEY), + MessageManager.getString("label.inclusion_seq_e_value_desc"), + false, 1D, 1E-100, 10D)); + args.add(new LogarithmicParameter( + MessageManager.getString(HMMSearch.INCLUSION_DOM_EVALUE_KEY), + MessageManager.getString("label.inclusion_dom_e_value_desc"), + false, 1D, 1E-100, 10D)); + args.add(new DoubleParameter( + MessageManager.getString(HMMSearch.INCLUSION_SEQ_SCORE_KEY), + MessageManager.getString("label.inclusion_seq_score_desc"), + false, 0d, 0d, 1000d)); + args.add(new DoubleParameter( + MessageManager.getString(HMMSearch.INCLUSION_DOM_SCORE_KEY), + MessageManager.getString("label.inclusion_dom_score_desc"), + false, 0d, 0d, 1000d)); + } + + /** + * Constructs a choice parameter for database to search; always includes 'this + * alignment', and also includes any databases held under user preferences key + * "HMMSEARCH_DBS" as a comma-delimited list + * + * @param args + */ + protected void addChoiceOfDatabase(List args) + { + String names = Cache.getProperty(Preferences.HMMSEARCH_DBS); + if (names == null || names.isEmpty()) + { + return; + } + + List filePaths = new ArrayList<>(); + List fileNames = new ArrayList<>(); + + String thisAlignment = MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY); + filePaths.add(thisAlignment); + fileNames.add(thisAlignment); + + Scanner nameScanner = new Scanner(names); + nameScanner.useDelimiter(Preferences.COMMA); + + while (nameScanner.hasNext()) + { + String next = nameScanner.next(); + if ("null".equals(next)) + { + Cache.setProperty(Preferences.HMMSEARCH_DBS, ""); + } + else + { + filePaths.add(next); + int pos = next.lastIndexOf(File.separator); + String fileName = next.substring(pos + 1); + fileNames.add(fileName); + } + } + nameScanner.close(); + ArgumentI databasesOption = new StringParameter( + MessageManager.getString(HMMSearch.DATABASE_KEY), + MessageManager.getString("label.database_for_hmmsearch"), true, + thisAlignment, + thisAlignment, + filePaths, fileNames); + args.add(databasesOption); } /** @@ -198,7 +346,7 @@ public final class HMMERParamStore implements ParamDatastoreI /** * Adds an argument representing the choice of HMM sequences (profiles) - * against which to perform align or search, provided more than one is found + * against which to perform align or search, provided at least one is found * * @param args */ @@ -213,13 +361,39 @@ public final class HMMERParamStore implements ParamDatastoreI options.add(hmmSeq.getName()); } String defseq = options.get(0); - Option option = new Option(MessageManager.getString("label.use_hmm"), - "", true, defseq, defseq, options, null); - args.add(option); + ArgumentI arg = new StringParameter( + MessageManager.getString("label.use_hmm"), null, true, defseq, + defseq, options, null); + args.add(arg); } } /** + * Adds an argument representing the choice of sequence against which to perform + * jackhmmer + * + * @param args + */ + protected void addChoiceOfSequence(List args) + { + List sequences = viewport.getAlignment().getSequences(); + + List options = new ArrayList<>(); + + for (SequenceI seq : sequences) + { + options.add(seq.getName()); + } + + String defseq = options.get(0); + ArgumentI arg = new StringParameter( + MessageManager.getString("label.use_sequence"), null, true, + defseq, + defseq, options, null); + args.add(arg); + } + + /** * Answers default parameters for hmmbuild, taking into account any configured * as user preferences * @@ -250,16 +424,20 @@ public final class HMMERParamStore implements ParamDatastoreI /* * choice of whether to compute HMM for alignment and/or group(s) + * - only if there are any groups */ - 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)); + if (!viewport.getAlignment().getGroups().isEmpty()) + { + List 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