/** * Called to provoke any necessary initialization. This helps prevent the module's intialization * queries to the user from happening at inopportune times (e.g., while a long chart calculation * is in mid-progress) */ public void initialize(Taxa taxa) { setPreferredTaxa(taxa); fillerTask.initialize(taxa); if (!fillerTask.hasLimitedTrees(taxa)) { if (!MesquiteThread.isScripting() && !nTreesSet) { int n = MesquiteInteger.queryInteger( containerOfModule(), "Trees per block?", "How many trees to include per tree block?", numTrees); if (MesquiteInteger.isCombinable(n) && n > 0) numTrees = n; nTreesSet = true; } } ntreesItem.setEnabled(!fillerTask.hasLimitedTrees(taxa)); MesquiteTrunk.resetMenuItemEnabling(); }
/** * Called to provoke any necessary initialization. This helps prevent the module's intialization * queries to the user from happening at inopportune times (e.g., while a long chart calculation * is in mid-progress) */ public void initialize(Taxa taxa) { setPreferredTaxa(taxa); fillerTask.initialize(taxa); if (!fillerTask.hasLimitedTrees(taxa)) { if (!MesquiteThread.isScripting() && !nTreesSet) { int n = MesquiteInteger.queryInteger( containerOfModule(), "Trees per block?", "How many trees to include per tree block?", numTrees); if (MesquiteInteger.isCombinable(n) && n > 0) numTrees = n; nTreesSet = true; } } if (enableNumTreesChoice() && ntreesItem == null) ntreesItem = addMenuItem("Number of Trees...", makeCommand("setNumberTrees", this)); if (ntreesItem != null && fillerTask != null) ntreesItem.setEnabled(!fillerTask.hasLimitedTrees(taxa)); MesquiteTrunk.resetMenuItemEnabling(); }
/*.................................................................................................................*/ public Object doCommand(String commandName, String arguments, CommandChecker checker) { Tree trt = treeDisplay.getTree(); MesquiteTree t = null; if (trt instanceof MesquiteTree) t = (MesquiteTree) trt; if (checker.compare( this.getClass(), "Adjust tool has touched branch", "[branch number][x coordinate touched][y coordinate touched][modifiers]", commandName, "touchedPositionAdjust")) { if (t == null) return null; MesquiteInteger io = new MesquiteInteger(0); int node = MesquiteInteger.fromString(arguments, io); int x = MesquiteInteger.fromString(arguments, io); int y = MesquiteInteger.fromString(arguments, io); String mod = ParseUtil.getRemaining(arguments, io); Point newOnLine = treeDisplay.getTreeDrawing().projectionOnLine(node, x, y); originalX = newOnLine.x; originalY = newOnLine.y; // lastX= newOnLine.x; // lastY = newOnLine.y; Graphics g = null; if (GraphicsUtil.useXORMode(null, false)) { g = treeDisplay.getGraphics(); g.setXORMode(Color.white); g.setColor(Color.red); } // double bX = treeDisplay.getTreeDrawing().lineBaseX[node]; // double bY = treeDisplay.getTreeDrawing().lineBaseY[node]; // Math.sqrt((originalY-bY)*(originalY-bY) + (originalX-bX)*(originalX-bX)); lastBL = tree.getBranchLength(node); double shortestAbove = MesquiteDouble.unassigned; for (int daughter = t.firstDaughterOfNode(node); t.nodeExists(daughter); daughter = t.nextSisterOfNode(daughter)) shortestAbove = MesquiteDouble.minimum(shortestAbove, tree.getBranchLength(daughter)); if (shortestAbove == MesquiteDouble.unassigned) upperLimit = MesquiteDouble.infinite; else if (MesquiteDouble.isCombinable(lastBL)) upperLimit = shortestAbove + lastBL; else upperLimit = shortestAbove + 1.0; int ibX = treeDisplay.getTreeDrawing().lineBaseX[node]; int ibY = treeDisplay.getTreeDrawing().lineBaseY[node]; lastX = treeDisplay.getTreeDrawing().lineTipX[node]; lastY = treeDisplay.getTreeDrawing().lineTipY[node]; if (GraphicsUtil.useXORMode(null, false)) { drawThickLine(g, ibX, ibY, lastX, lastY); for (int daughter = t.firstDaughterOfNode(node); t.nodeExists(daughter); daughter = t.nextSisterOfNode(daughter)) drawThickLine( g, treeDisplay.getTreeDrawing().lineTipX[daughter], treeDisplay.getTreeDrawing().lineTipY[daughter], lastX, lastY); g.fillOval( lastX - ovalRadius, lastY - ovalRadius, ovalRadius + ovalRadius, ovalRadius + ovalRadius); try { g.drawString(MesquiteDouble.toString(lastBL), lastX + 10, lastY); } catch (InternalError e) { // workaround for bug on windows java 1.7. } catch (Throwable e) { } lineOn = true; g.dispose(); } } else if (checker.compare( this.getClass(), "Adjust tool has been dropped", "[branch number][x coordinate dropped][y coordinate dropped]", commandName, "droppedPositionAdjust")) { if (t == null) return null; if (editorOn) return null; MesquiteInteger io = new MesquiteInteger(0); int node = MesquiteInteger.fromString(arguments, io); int x = MesquiteInteger.fromString(arguments, io); int y = MesquiteInteger.fromString(arguments, io); if (lineOn) { Point newOnLine = treeDisplay.getTreeDrawing().projectionOnLine(node, x, y); double bX = treeDisplay.getTreeDrawing().lineBaseX[node]; double bY = treeDisplay.getTreeDrawing().lineBaseY[node]; double tX = treeDisplay.getTreeDrawing().lineTipX[node]; double tY = treeDisplay.getTreeDrawing().lineTipY[node]; double lengthLine = Math.sqrt((originalY - bY) * (originalY - bY) + (originalX - bX) * (originalX - bX)); double bL; if (lengthLine != 0) { double extension = Math.sqrt( (newOnLine.y - bY) * (newOnLine.y - bY) + (newOnLine.x - bX) * (newOnLine.x - bX)) / lengthLine; if (t.getBranchLength(node) == 0 || t.branchLengthUnassigned(node)) bL = extension; else bL = t.getBranchLength(node) * extension; } else bL = 1; if (bL > upperLimit) bL = upperLimit; else if (bL < lowerLimit) bL = lowerLimit; double oldBL = t.getBranchLength(node); if (!MesquiteDouble.isCombinable(oldBL)) oldBL = 1.0; t.setBranchLength(node, bL, false); double difference = oldBL - t.getBranchLength(node); for (int daughter = t.firstDaughterOfNode(node); t.nodeExists(daughter); daughter = t.nextSisterOfNode(daughter)) if (MesquiteDouble.isCombinable(t.getBranchLength(daughter))) t.setBranchLength(daughter, t.getBranchLength(daughter) + difference, false); t.notifyListeners(this, new Notification(MesquiteListener.BRANCHLENGTHS_CHANGED)); Graphics g = treeDisplay.getGraphics(); g.setPaintMode(); g.dispose(); treeDisplay.pleaseUpdate(true); lineOn = false; } } else if (checker.compare( this.getClass(), "Adjust tool is being dragged", "[branch number][x coordinate][y coordinate]", commandName, "draggedPositionAdjust")) { if (t == null) return null; if (editorOn) return null; MesquiteInteger io = new MesquiteInteger(0); int node = MesquiteInteger.fromString(arguments, io); int x = MesquiteInteger.fromString(arguments, io); int y = MesquiteInteger.fromString(arguments, io); if (lineOn) { Point newOnLine = treeDisplay.getTreeDrawing().projectionOnLine(node, x, y); // WARNING": This shouldn't result in length increase if simple click and release with no // drag; must subtract original X, Y Graphics g = null; if (GraphicsUtil.useXORMode(null, false)) { g = treeDisplay.getGraphics(); g.setXORMode(Color.white); g.setColor(Color.red); } // g.fillOval(lastX-ovalRadius, lastY-ovalRadius, ovalRadius + ovalRadius, ovalRadius + // ovalRadius); // g.fillOval(newOnLine.x-ovalRadius, newOnLine.y -ovalRadius, ovalRadius + ovalRadius, // ovalRadius + ovalRadius); // g.drawLine(originalX, originalY, lastX, lastY); // g.drawLine(originalX, originalY, newOnLine.x, newOnLine.y); // if decreasing, & unassigned involved: push unassigned down and assign values to // unassigned above; if increasing, push unassigne up int ibX = treeDisplay.getTreeDrawing().lineBaseX[node]; int ibY = treeDisplay.getTreeDrawing().lineBaseY[node]; int itX = treeDisplay.getTreeDrawing().lineTipX[node]; int itY = treeDisplay.getTreeDrawing().lineTipY[node]; double bX = ibX; double bY = ibY; double tX = itX; double tY = itY; double lengthLine = Math.sqrt((originalY - bY) * (originalY - bY) + (originalX - bX) * (originalX - bX)); if (lengthLine != 0) { if (GraphicsUtil.useXORMode(null, false)) { if (MesquiteTrunk.isMacOSX() && MesquiteTrunk.getJavaVersionAsDouble() >= 1.5 && MesquiteTrunk.getJavaVersionAsDouble() < 1.6) // due to a JVM bug g.fillRect(lastX, lastY - 20, 100, 20); g.drawString(MesquiteDouble.toString(lastBL), lastX + 10, lastY); if (MesquiteTrunk.isMacOSX() && MesquiteTrunk.getJavaVersionAsDouble() >= 1.5 && MesquiteTrunk.getJavaVersionAsDouble() < 1.6) // due to a JVM bug g.fillRect(lastX, lastY - 20, 100, 20); } double extension = Math.sqrt( (newOnLine.y - bY) * (newOnLine.y - bY) + (newOnLine.x - bX) * (newOnLine.x - bX)) / lengthLine; double bL; if (t.getBranchLength(node) == 0 || t.branchLengthUnassigned(node)) bL = extension; else bL = t.getBranchLength(node) * extension; if (bL > upperLimit) { bL = upperLimit; if (t.getBranchLength(node) == 0 || t.branchLengthUnassigned(node)) extension = upperLimit; else extension = upperLimit / t.getBranchLength(node); } else if (bL < lowerLimit) { bL = lowerLimit; if (t.getBranchLength(node) == 0 || t.branchLengthUnassigned(node)) extension = lowerLimit; else extension = lowerLimit / t.getBranchLength(node); } lastBL = bL; if (GraphicsUtil.useXORMode(null, false)) { drawThickLine(g, ibX, ibY, lastX, lastY); for (int daughter = t.firstDaughterOfNode(node); t.nodeExists(daughter); daughter = t.nextSisterOfNode(daughter)) drawThickLine( g, treeDisplay.getTreeDrawing().lineTipX[daughter], treeDisplay.getTreeDrawing().lineTipY[daughter], lastX, lastY); g.fillOval( lastX - ovalRadius, lastY - ovalRadius, ovalRadius + ovalRadius, ovalRadius + ovalRadius); } int newX = ibX + (int) (extension * (tX - bX)); int newY = ibY + (int) (extension * (tY - bY)); if (GraphicsUtil.useXORMode(null, false)) { g.drawString(MesquiteDouble.toString(bL), newX + 10, newY); drawThickLine(g, ibX, ibY, newX, newY); for (int daughter = t.firstDaughterOfNode(node); t.nodeExists(daughter); daughter = t.nextSisterOfNode(daughter)) drawThickLine( g, treeDisplay.getTreeDrawing().lineTipX[daughter], treeDisplay.getTreeDrawing().lineTipY[daughter], newX, newY); g.fillOval( newX - ovalRadius, newY - ovalRadius, ovalRadius + ovalRadius, ovalRadius + ovalRadius); } lastX = newX; lastY = newY; } // lastX= newOnLine.x; // lastY = newOnLine.y; } } return null; }
public boolean queryOptions() { if (!okToInteractWithUser( CAN_PROCEED_ANYWAY, "Querying Options")) // Debugg.println needs to check that options set well enough to // proceed anyway return true; boolean closeWizard = false; if ((MesquiteTrunk.isMacOSXBeforeSnowLeopard()) && MesquiteDialog.currentWizard == null) { CommandRecord cRec = null; cRec = MesquiteThread.getCurrentCommandRecordDefIfNull(null); if (cRec != null) { cRec.requestEstablishWizard(true); closeWizard = true; } } MesquiteInteger buttonPressed = new MesquiteInteger(1); queryOptionsDialog = new ExtensibleDialog( containerOfModule(), "TNT Options & Locations", buttonPressed); // MesquiteTrunk.mesquiteTrunk.containerOfModule() // queryOptionsDialog.addLabel("TNT - Options and Locations"); String helpString = "This module will prepare a matrix for TNT, and ask TNT do to an analysis. A command-line version of TNT must be installed. " + "You can ask it to do a bootstrap analysis or not. " + "Mesquite will read in the trees found by TNT. "; queryOptionsDialog.appendToHelpString(helpString); queryOptionsDialog.setHelpURL(zephyrRunnerEmployer.getProgramURL()); MesquiteTabbedPanel tabbedPanel = queryOptionsDialog.addMesquiteTabbedPanel(); tabbedPanel.addPanel("TNT Program Details", true); externalProcRunner.addItemsToDialogPanel(queryOptionsDialog); Checkbox parallelCheckBox = queryOptionsDialog.addCheckBox("use PVM for parallel processing", parallel); parallelCheckBox.addItemListener(this); IntegerField slavesField = queryOptionsDialog.addIntegerField( "Number of Slaves", numSlaves, 4, 0, MesquiteInteger.infinite); IntegerField maxRamField = queryOptionsDialog.addIntegerField("mxram value", mxram, 4, 0, MesquiteInteger.infinite); tabbedPanel.addPanel("Search Options", true); Choice searchStyleChoice = null; if (bootstrapAllowed) searchStyleChoice = queryOptionsDialog.addPopUpMenu( "Type of search/resampling:", new String[] { "Regular Search", "Bootstrap", "Jackknife", "Symmetric Resampled", "Poisson Bootstrap" }, searchStyle); queryOptionsDialog.addLabel("Regular Search Commands"); searchField = queryOptionsDialog.addTextAreaSmallFont(searchArguments, 7, 80); searchScriptPathField = queryOptionsDialog.addTextField( "Path to TNT run file containing search commands", searchScriptPath, 40); Button browseSearchScriptPathButton = queryOptionsDialog.addAListenedButton("Browse...", null, this); browseSearchScriptPathButton.setActionCommand("browseSearchScript"); harvestOnlyStrictConsensusBox = queryOptionsDialog.addCheckBox("only acquire strict consensus", harvestOnlyStrictConsensus); queryOptionsDialog.addHorizontalLine(1); // Checkbox doBootstrapBox = queryOptionsDialog.addCheckBox("do bootstrapping", doBootstrap); if (bootstrapAllowed) { bootStrapRepsField = queryOptionsDialog.addIntegerField( "Resampling Replicates", bootstrapreps, 8, 0, MesquiteInteger.infinite); queryOptionsDialog.addLabel("Resampling Search Commands"); bootstrapSearchField = queryOptionsDialog.addTextAreaSmallFont(bootstrapSearchArguments, 7, 80); bootSearchScriptPathField = queryOptionsDialog.addTextField( "Path to TNT run file containing search commands for resampled", bootSearchScriptPath, 30); Button browseBootSearchScriptPathButton = queryOptionsDialog.addAListenedButton("Browse...", null, this); browseSearchScriptPathButton.setActionCommand("browseBootSearchScript"); resamplingAllConsensusTreesBox = queryOptionsDialog.addCheckBox( "allow TNT to calculate consensus tree", !resamplingAllConsensusTrees); } adjustDialogText(); queryOptionsDialog.addHorizontalLine(1); queryOptionsDialog.addNewDialogPanel(); useDefaultsButton = queryOptionsDialog.addAListenedButton("Set to Defaults", null, this); useDefaultsButton.setActionCommand("setToDefaults"); tabbedPanel.addPanel("Other Options", true); convertGapsBox = queryOptionsDialog.addCheckBox( "convert gaps to missing (to avoid gap=extra state)", convertGapsToMissing); queryOptionsDialog.addHorizontalLine(1); queryOptionsDialog.addLabel("Post-Search TNT Commands"); otherOptionsField = queryOptionsDialog.addTextAreaSmallFont(otherOptions, 7, 80); queryOptionsDialog.addHorizontalLine(1); queryOptionsDialog.addNewDialogPanel(); useDefaultsOtherOptionsButton = queryOptionsDialog.addAListenedButton("Set to Defaults", null, this); useDefaultsOtherOptionsButton.setActionCommand("setToDefaultsOtherOptions"); tabbedPanel.cleanup(); queryOptionsDialog.nullifyAddPanel(); queryOptionsDialog.completeAndShowDialog("Search", "Cancel", null, null); if (buttonPressed.getValue() == 0) { boolean infererOK = (treeInferer == null || treeInferer.optionsChosen()); if (externalProcRunner.optionsChosen() && infererOK) { if (bootstrapAllowed) { bootstrapreps = bootStrapRepsField.getValue(); bootstrapSearchArguments = bootstrapSearchField.getText(); bootSearchScriptPath = bootSearchScriptPathField.getText(); harvestOnlyStrictConsensus = harvestOnlyStrictConsensusBox.getState(); resamplingAllConsensusTrees = !resamplingAllConsensusTreesBox.getState(); searchStyle = searchStyleChoice.getSelectedIndex(); } numSlaves = slavesField.getValue(); otherOptions = otherOptionsField.getText(); convertGapsToMissing = convertGapsBox.getState(); parallel = parallelCheckBox.getState(); // doBootstrap = doBootstrapBox.getState(); searchArguments = searchField.getText(); searchScriptPath = searchScriptPathField.getText(); mxram = maxRamField.getValue(); storeRunnerPreferences(); } } queryOptionsDialog.dispose(); if (closeWizard) MesquiteDialog.closeWizard(); return (buttonPressed.getValue() == 0); }