package com.cipres.mrBayesPlugin.ui; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Image; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.prefs.Preferences; import javax.swing.AbstractAction; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import org.jdom.Element; import org.json.simple.JSONObject; import org.virion.jam.util.SimpleListener; import com.biomatters.geneious.publicapi.components.Dialogs; import com.biomatters.geneious.publicapi.documents.AnnotatedPluginDocument; import com.biomatters.geneious.publicapi.documents.XMLSerializationException; import com.biomatters.geneious.publicapi.documents.sequence.AminoAcidSequenceDocument; import com.biomatters.geneious.publicapi.documents.sequence.NucleotideSequenceDocument; import com.biomatters.geneious.publicapi.documents.sequence.SequenceAlignmentDocument; import com.biomatters.geneious.publicapi.documents.sequence.SequenceCharSequence; import com.biomatters.geneious.publicapi.documents.sequence.SequenceDocument; import com.biomatters.geneious.publicapi.plugin.DocumentOperation; import com.biomatters.geneious.publicapi.plugin.DocumentOperationException; import com.biomatters.geneious.publicapi.plugin.Options; import com.biomatters.geneious.publicapi.plugin.PluginUtilities; import com.biomatters.geneious.publicapi.plugin.Options.DoubleOption; import com.biomatters.geneious.publicapi.plugin.Options.StringOption; import com.biomatters.geneious.publicapi.utilities.IconUtilities; import com.biomatters.geneious.publicapi.utilities.SequenceUtilities; import com.cipres.mrBayesPlugin.CipresMrBayesPlugin; import com.cipres.mrBayesPlugin.utilities.MrBayesUtilities; import jebl.evolution.sequences.GeneticCode; /** * @author Matthew Cheung * @version $Id: MrBayesOptions.java 24127 2008-12-22 03:23:13Z steve $ */ public class MrBayesOptions extends Options { private static final int MAX_SEED = 32000; private static final String CODON_MODEL_WARNING = "Cannot use codon model.
The translation of one or more documents contains a stop codon."; //models public static final String JC69 = "JC69"; public static final String HKY85 = "HKY85"; public static final String GTR = "GTR"; public static final String CODON = "Codon (M1)"; //amino acid rates private static final String[] AMINO_ACID_RATES = new String[]{ "poisson" , "jones" , "dayhoff" , "mtrev" , "mtmam" , "wag" , "rtrev" , "cprev" , "vt" , "blosum" , "equalin" // ,"gtr" todo, gtr causes Geneious to crash with invalid xml element name }; //rate variations public static final String EQUAL = "equal"; public static final String GAMMA = "gamma"; public static final String PROPINV = "propinv"; public static final String INVGAMMA = "invgamma"; // Options name public static final String MAXHOURSTORUN = "maxHourToRun"; public static final String LENGTH = "chainLength"; public static final String BURNIN = "burnin"; public static final String SUB_FREQ = "subsampleFrequency"; public static final String NUM_CHAINS = "numberOfChains"; public static final String TEMP = "chainTemp"; public static final String SEED = "randomSeed"; public static final String RATE_VAR = "rateVariation"; public static final String MODEL = "model"; public static final String AMINO_ACID_RATE_MATRIX = "aminoAcidRateMatrix"; public static final String GAMMA_CATS = "gammaCategories"; public static final String PRIOR_TASKS = "priorTasks"; public static final String BRANCH_LENGTH = "branchLength"; public static final String TREE_AGE_ALPHA = "treeAgeAlpha"; public static final String TREE_AGE_BETA = "treeAgeBeta"; public static final String SHAPE_ALPHA = "shapeAlpha"; public static final String OUTGROUP = "outgroup"; static final String DUPLICATE_NAME_MESSAGE = "MrBayes cannot be performed on a document with more than one sequence with the same name."; // Options private static DoubleOption maxHoursToRun; private static BooleanOption useCustomCommandBlock; private static MultipleLineStringOption commandBlockOption; private static IntegerOption length; private static IntegerOption burnin; private static IntegerOption subsampleFrequency; private static ComboBoxOption rateVariation; private static IntegerOption gammaCategories; private static RadioOption priorTasks; private static DoubleOption branchLength; private static DoubleOption treeAgeAlpha; private static DoubleOption treeAgeBeta; private static DoubleOption shapeAlpha; private static AutoHideLabelOption codonModelWarning; private static Options clustalOptions; private static IntegerOption randomSeed; private static Options.Option[] affectedByRateVariation; private static HashMap serviceOptions; private ButtonOption restoreButton; ButtonOption restoreButton2; public static JSONObject jsonCommand = new JSONObject(); public static JSONObject jsonInterface = new JSONObject(); public static JSONObject getJsonCommand() { return jsonCommand; } @SuppressWarnings("unchecked") public static void setJsonCommand(String key, Object value) { jsonCommand.put(key, value); } @SuppressWarnings("unchecked") public static JSONObject getJsonInterface(){ jsonInterface.put("Gamma Categories", gammaCategories.getValue()); jsonInterface.put("Length", length.getValue()); jsonInterface.put("Burning", burnin.getValue()); jsonInterface.put("SubsampleFrequency", subsampleFrequency.getValue()); jsonInterface.put("Rate Variation", rateVariation.getValue()); jsonInterface.put("Prior Tasks", priorTasks.getValue()); jsonInterface.put("Branch Length", branchLength.getValue()); jsonInterface.put("Tree Age Alpha", treeAgeAlpha.getValue()); jsonInterface.put("Tree Age Beta", treeAgeBeta.getValue()); jsonInterface.put("Shape Parameter", shapeAlpha.getValue()); jsonInterface.put("Random Seed", randomSeed.getValue()); return jsonInterface; } @SuppressWarnings("unchecked") public static void setJsonInterface(String key, Object value){ jsonInterface.put(key, value); } private boolean panelCreated = false; public MrBayesOptions(Element e) throws XMLSerializationException { super(e); List serviceOptionList = e.getChildren("gridServiceOptions"); serviceOptions = new HashMap(); // for (Element xml : serviceOptionList) { // String id = xml.getAttributeValue("serviceId"); // if (id != null) { // GeneiousService service = PluginUtilities.getGeneiousService(id); // if (service instanceof GeneiousGridService) { // GeneiousGridService gridService = (GeneiousGridService) service; // Options serviceOptions1 = gridService.getOptions("MrBayes", true); // serviceOptions1.valuesFromXML(xml); // serviceOptions.put(id, serviceOptions1); // } // } // } } private boolean duplicateNames = false; private static StringOption clientJobName; private static int bufferCnt = 0; private static void addJobNameOption(Options options, final AnnotatedPluginDocument[] selectedDocuments, int bufferCnt) { options.beginAlignHorizontally(null, false); clientJobName = options.addStringOption("clientJobName","Please specify a job name", selectedDocuments[0].getName()); for (int i = 0; i < bufferCnt; ++i) addBuffer(options); options.endAlignHorizontally(); } public static String getJobName() { return clientJobName.getValueAsString(); } protected static void addBuffer(Options options) { options.addStringOption("BUFFERNAME"+ (bufferCnt++), "BUFFERNAME", "").setVisible(false); } /** * WARNING you will need to add the field clustalOptions as childOptions somehow if you want this class to be properly XMLSerializable. * * * @param selectedDocuments * @throws DocumentOperationException */ @SuppressWarnings("OverlyLongMethod") public MrBayesOptions(final AnnotatedPluginDocument[] selectedDocuments) throws DocumentOperationException { super(MrBayesOptions.class); final ArrayList