X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fhmmer%2FHMMERParamStore.java;h=37ad43568625ce15cf29bf221c08af24c074ab97;hb=d25ed8f9fb513fe5c33823afbeeb557c73a8c27b;hp=a4bf8e48232604c9fe2af5ea989dd14a96266aab;hpb=87b304d55f0dd005dd1d04cf162103bff4435a83;p=jalview.git diff --git a/src/jalview/hmmer/HMMERParamStore.java b/src/jalview/hmmer/HMMERParamStore.java index a4bf8e4..37ad435 100644 --- a/src/jalview/hmmer/HMMERParamStore.java +++ b/src/jalview/hmmer/HMMERParamStore.java @@ -1,47 +1,71 @@ package jalview.hmmer; - import jalview.bin.Cache; +import jalview.datamodel.SequenceI; import jalview.gui.Preferences; import jalview.util.MessageManager; +import jalview.viewmodel.AlignmentViewport; 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.DoubleParameter; 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.Arrays; import java.util.Collection; import java.util.List; import java.util.Scanner; - -public class HMMERParamStore implements ParamDatastoreI +public final class HMMERParamStore implements ParamDatastoreI { + private static final String HMMBUILD = "hmmbuild"; + + private static final String HMMALIGN = "hmmalign"; + + private static final String HMMSEARCH = "hmmsearch"; + + private String name; + + private List presets = new ArrayList<>(); + + private AlignmentViewport viewport; - String name; + private HMMERParamStore(String nam, AlignmentViewport av) + { + this.viewport = av; + this.name = nam; + } - List presets = new ArrayList<>(); + public static HMMERParamStore forBuild(AlignmentViewport viewport) + { + return new HMMERParamStore(HMMBUILD, viewport); + } + + public static HMMERParamStore forAlign(AlignmentViewport viewport) + { + return new HMMERParamStore(HMMALIGN, viewport); + } - public HMMERParamStore(String name) + public static HMMERParamStore forSearch(AlignmentViewport viewport) { - this.name = name; + return new HMMERParamStore(HMMSEARCH, viewport); } @Override public List getPresets() { - // TODO Auto-generated method stub return presets; } @Override - public WsParamSetI getPreset(String name) + public WsParamSetI getPreset(String nam) { - // TODO Auto-generated method stub return null; } @@ -49,34 +73,41 @@ public class HMMERParamStore implements ParamDatastoreI public List getServiceParameters() { List args = new ArrayList<>(); - if ("hmmsearch".equals(name)) + switch (name) { + case HMMSEARCH: getHMMSearchParams(args); - } - if ("hmmalign".equals(name)) - { + break; + case HMMALIGN: getHMMAlignParams(args); - + break; + case HMMBUILD: + getHMMBuildParams(args); + break; + default: } - if ("hmmbuild".equals(name)) - { - - } return args; } + /** + * Answers default parameters for hmmsearch, taking into account any + * configured as user preferences + * + * @param 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)); + /* + * 'Options' + */ + addChoiceOfHmm(args); + String names = Cache.getProperty(Preferences.HMMSEARCH_DBS); if (names != null && !names.isEmpty()) { - Collection databases = new ArrayList<>(); - databases.add(MessageManager.getString("label.this_alignment")); + List databases = new ArrayList<>(); + databases.add(MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY)); Scanner nameScanner = new Scanner(names); if (nameScanner.hasNext()) @@ -84,7 +115,7 @@ public class HMMERParamStore implements ParamDatastoreI while (nameScanner.hasNext()) { String next = nameScanner.next(); - if (next == "null") + if ("null".equals(next)) { Cache.setProperty(Preferences.HMMSEARCH_DBS, ""); Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, ""); @@ -96,92 +127,175 @@ public class HMMERParamStore implements ParamDatastoreI } } nameScanner.close(); - args.add(new Option(MessageManager.getString("label.database"), + args.add(new StringParameter( + MessageManager.getString(HMMSearch.DATABASE_KEY), MessageManager.getString("label.database_for_hmmsearch"), - true, MessageManager.getString("label.this_alignment"), - MessageManager.getString("label.this_alignment"), databases, - null)); + true, MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY), + MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY), + databases)); } args.add(new BooleanOption( - MessageManager.getString("label.auto_align_seqs"), + MessageManager.getString(HMMSearch.AUTO_ALIGN_SEQS_KEY), MessageManager.getString("label.auto_align_seqs_desc"), false, false, true, null)); args.add(new BooleanOption( - MessageManager.getString("label.use_accessions"), + MessageManager.getString(HMMSearch.USE_ACCESSIONS_KEY), MessageManager.getString("label.use_accessions_desc"), false, false, true, null)); args.add(new BooleanOption( - MessageManager.getString("label.trim_termini"), + MessageManager.getString(HMMSearch.TRIM_TERMINI_KEY), 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)); - */ + * 'Parameters' + */ + 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( + 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))); 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)); - */ + MessageManager.getString(HMMSearch.SEQ_EVALUE_KEY), + MessageManager.getString("label.seq_e_value_desc"), false, 1D, + 1E-38, 10D)); + args.add(new LogarithmicParameter( + MessageManager.getString(HMMSearch.DOM_EVALUE_KEY), + MessageManager.getString("label.dom_e_value_desc"), false, 1D, + 1E-38, 10D)); + args.add( + new DoubleParameter( + MessageManager.getString(HMMSearch.SEQ_SCORE_KEY), + MessageManager.getString("label.seq_score_desc"), false, + 0d, 0d, 1000d)); + args.add( + new DoubleParameter( + MessageManager.getString(HMMSearch.DOM_SCORE_KEY), + MessageManager.getString("label.dom_score_desc"), false, + 0d, 0d, 1000d)); } + /** + * Answers default parameters for hmmalign, taking into account any configured + * as user preferences + * + * @param args + */ private void getHMMAlignParams(List args) { + addChoiceOfHmm(args); + + boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI, + false); args.add(new BooleanOption( MessageManager.getString("label.trim_termini"), - MessageManager.getString( - "label.trim_termini = Trim Non-Matching Termini_desc"), - false, false, true, null)); + MessageManager.getString("label.trim_termini_desc"), + false, false, def, null)); + } + + /** + * Adds an argument representing the choice of HMM sequences (profiles) + * against which to perform align or search, provided more than one is found + * + * @param args + */ + protected void addChoiceOfHmm(List args) + { + List hmms = viewport.getAlignment().getHmmSequences(); + if (hmms.size() > 1) + { + List options = new ArrayList<>(); + for (SequenceI hmmSeq : hmms) + { + options.add(hmmSeq.getName()); + } + String defseq = options.get(0); + ArgumentI arg = new StringParameter( + MessageManager.getString("label.use_hmm"), null, true, defseq, + defseq, options); + args.add(arg); + } + } + + /** + * Answers default parameters for hmmbuild, taking into account any configured + * as user preferences + * + * @param args + */ + private void getHMMBuildParams(List args) + { + /* + * name to give the computed alignment HMM consensus sequence + * (Jalview constructs group HMM consensus sequence names) + */ + String defValue = "Alignment_HMM"; + StringParameter nameParam = new StringParameter(MessageManager.getString("label.hmm_name"), + MessageManager.getString("label.hmm_name_desc"), true, defValue, + defValue); + args.add(nameParam); + + /* + * only enable Use Reference Annotation if RF is present + */ + if (viewport.hasReferenceAnnotation()) + { + args.add(new BooleanOption( + MessageManager.getString("label.use_reference"), + MessageManager.getString("label.use_reference_desc"), true, + true, true, null)); + } + + /* + * choice of whether to compute HMM for alignment and/or group(s) + * - only if there are any groups + */ + if (!viewport.getAlignment().getGroups().isEmpty()) + { + 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 name) + public boolean presetExists(String forName) { - // TODO Auto-generated method stub return false; } @Override - public void deletePreset(String name) + public void deletePreset(String forName) { - // TODO Auto-generated method stub - } @Override public void storePreset(String presetName, String text, List jobParams) { - // TODO Auto-generated method stub - } @Override public void updatePreset(String oldName, String presetName, String text, List jobParams) { - // TODO Auto-generated method stub - } @Override - public WsParamSetI parseServiceParameterFile(String name, + public WsParamSetI parseServiceParameterFile(String forName, String description, String[] serviceURL, String parameters) throws IOException { - // TODO Auto-generated method stub return null; } @@ -189,7 +303,6 @@ public class HMMERParamStore implements ParamDatastoreI public String generateServiceParameterFile(WsParamSetI pset) throws IOException { - // TODO Auto-generated method stub return null; }