/*
* The MIT License (MIT)
*
* Copyright (c) 2007-2015 Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.broad.igv.tools;
import org.apache.log4j.Logger;
import org.broad.igv.track.WindowFunction;
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collection;
public class IgvToolsGui extends JDialog {
private static Logger log = Logger.getLogger(IgvToolsGui.class);
static JFileChooser fileDialog;
public enum Tool {
COUNT("Count"),
SORT("Sort"),
INDEX("Index"),
TILE("toTDF");
private String displayName;
Tool(String displayName) {
this.displayName = displayName;
}
@Override
public String toString() {
return this.displayName;
}
}
String[] zoomLevels = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
PrintStream systemOutStream;
PrintStream systemErrStream;
static File lastDirectory;
IgvTools igvTools;
public IgvToolsGui() {
this.igvTools = new IgvTools();
initComponents();
initUI();
updateUI();
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();
setVisible(false);
}
});
inputButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
File chosenFile = chooseFile();
inputField.setText(chosenFile.getAbsolutePath());
updateUI();
} catch (NullPointerException npe) {
}
}
});
outputButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
File chosenFile = chooseFile();
outputField.setText(chosenFile.getAbsolutePath());
updateUI();
} catch (NullPointerException npe) {
}
}
});
genomeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
File chosenFile = chooseFile();
genomeField.setText(chosenFile.getAbsolutePath());
updateUI();
} catch (NullPointerException npe) {
}
}
});
probeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
File chosenFile = chooseFile();
probeField.setText(chosenFile.getAbsolutePath());
updateUI();
} catch (NullPointerException npe) {
}
}
});
toolCombo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateUI();
}
});
runButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
run();
}
});
tempButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
File chosenFile = chooseFile();
tmpDirectoryField.setText(chosenFile.getAbsolutePath());
updateUI();
} catch (NullPointerException npe) {
}
}
});
}
private void initUI() {
setContentPane(mainPanel);
setModal(true);
setTitle("igvtools");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
close();
}
});
for (String item : zoomLevels) {
zoomCombo.addItem(item);
}
for (Tool tool : Tool.values()) {
toolCombo.addItem(tool);
}
zoomCombo.setSelectedIndex(IgvTools.MAX_ZOOM);
windowSizeField.setText(String.valueOf(IgvTools.WINDOW_SIZE));
maxRecordsField.setText(String.valueOf(IgvTools.MAX_RECORDS_IN_RAM));
redirectSystemStreams();
}
private void close() {
System.setErr(systemErrStream);
System.setOut(systemOutStream);
dispose();
}
private void updateTextArea(final String text) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
outputText.append(text);
}
});
}
private void redirectSystemStreams() {
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
updateTextArea(String.valueOf((char) b));
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
updateTextArea(new String(b, off, len));
}
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
};
systemOutStream = System.out;
systemErrStream = System.err;
System.setOut(new PrintStream(out, true));
System.setErr(new PrintStream(out, true));
}
private void updateUI() {
Tool tool = (Tool) toolCombo.getSelectedItem();
if (tool.equals(Tool.COUNT)) {
inputField.setEnabled(true);
inputButton.setEnabled(true);
outputField.setEnabled(true);
outputButton.setEnabled(true);
outputLabel.setEnabled(true);
if (!this.genomeSelectionDisabled) {
genomeField.setEnabled(true);
genomeButton.setEnabled(true);
genomeLabel.setEnabled(true);
}
zoomCombo.setEnabled(true);
zoomLabel.setEnabled(true);
maxRecordsField.setEnabled(false);
maxRecordsLabel.setEnabled(false);
probeField.setEnabled(false);
probeButton.setEnabled(false);
probeLabel.setEnabled(false);
tmpDirectoryLabel.setEnabled(false);
tmpDirectoryField.setEnabled(false);
tempButton.setEnabled(false);
windowSizeLabel.setEnabled(true);
windowSizeField.setEnabled(true);
pairsCB.setEnabled(true);
extFactorLabel.setEnabled(true);
extFactorField.setEnabled(true);
enableWindowFunctions();
} else if (tool.equals(Tool.SORT)) {
inputField.setEnabled(true);
inputButton.setEnabled(true);
outputField.setEnabled(true);
outputButton.setEnabled(true);
outputLabel.setEnabled(true);
genomeField.setEnabled(false);
genomeButton.setEnabled(false);
genomeLabel.setEnabled(false);
zoomCombo.setEnabled(false);
zoomLabel.setEnabled(false);
maxRecordsField.setEnabled(true);
maxRecordsLabel.setEnabled(true);
probeField.setEnabled(false);
probeButton.setEnabled(false);
probeLabel.setEnabled(false);
tmpDirectoryLabel.setEnabled(true);
tmpDirectoryField.setEnabled(true);
tempButton.setEnabled(true);
windowSizeLabel.setEnabled(false);
windowSizeField.setEnabled(false);
pairsCB.setEnabled(false);
extFactorLabel.setEnabled(false);
extFactorField.setEnabled(false);
disableWindowFunctions();
} else if (tool.equals(Tool.INDEX)) {
inputField.setEnabled(true);
inputButton.setEnabled(true);
outputField.setEnabled(false);
outputButton.setEnabled(false);
outputLabel.setEnabled(false);
genomeField.setEnabled(false);
genomeButton.setEnabled(false);
genomeLabel.setEnabled(false);
zoomCombo.setEnabled(false);
zoomLabel.setEnabled(false);
maxRecordsField.setEnabled(false);
maxRecordsLabel.setEnabled(false);
probeField.setEnabled(false);
probeButton.setEnabled(false);
probeLabel.setEnabled(false);
tmpDirectoryLabel.setEnabled(false);
tmpDirectoryField.setEnabled(false);
tempButton.setEnabled(false);
windowSizeLabel.setEnabled(false);
windowSizeField.setEnabled(false);
pairsCB.setEnabled(false);
extFactorLabel.setEnabled(false);
extFactorField.setEnabled(false);
disableWindowFunctions();
} else if (tool.equals(Tool.TILE)) {
inputField.setEnabled(true);
inputButton.setEnabled(true);
outputField.setEnabled(true);
outputButton.setEnabled(true);
outputLabel.setEnabled(true);
if (!this.genomeSelectionDisabled) {
genomeField.setEnabled(true);
genomeButton.setEnabled(true);
genomeLabel.setEnabled(true);
}
zoomCombo.setEnabled(true);
zoomLabel.setEnabled(true);
maxRecordsField.setEnabled(true);
maxRecordsLabel.setEnabled(true);
probeField.setEnabled(true);
probeButton.setEnabled(true);
probeLabel.setEnabled(true);
tmpDirectoryLabel.setEnabled(true);
tmpDirectoryField.setEnabled(true);
tempButton.setEnabled(false);
windowSizeLabel.setEnabled(false);
windowSizeField.setEnabled(false);
pairsCB.setEnabled(false);
extFactorLabel.setEnabled(false);
extFactorField.setEnabled(false);
enableWindowFunctions();
}
}
private void enableWindowFunctions() {
Component[] com = windowFunctionPanel.getComponents();
windowFunctionLabel.setEnabled(true);
for (int i = 0; i < com.length; i++) {
com[i].setEnabled(true);
}
}
private void disableWindowFunctions() {
Component[] com = windowFunctionPanel.getComponents();
windowFunctionLabel.setEnabled(false);
for (int i = 0; i < com.length; i++) {
com[i].setEnabled(false);
}
}
private boolean validateFields() {
Tool tool = (Tool) toolCombo.getSelectedItem();
// All commands require in input file
if (inputField.getText().trim().length() == 0) {
showMessage("Input file is required");
return false;
}
if (tool.equals(Tool.INDEX)) {
return true;
}
// All commands except "index" require an output file
if (outputField.getText().trim().length() == 0) {
showMessage("Output file is required");
return false;
}
// See if file exists
File outputFile = new File(outputField.getText().trim());
if (outputFile.exists()) {
int opt = JOptionPane.showConfirmDialog(this, "Output file: " + outputField.getText() + " exists. Overwite?");
if (opt != JOptionPane.YES_OPTION) {
return false;
}
}
//Check that parent directory exists
if (!outputFile.getParentFile().exists()) {
showMessage("Directory " + outputFile.getParent() + " does not exist. Output must use an existing directory");
return false;
}
if (tool.equals(Tool.SORT)) {
return true;
}
if (genomeField.getText().trim().length() == 0) {
showMessage("Genome is required");
return false;
}
return true;
}
private void run() {
Tool tool = (Tool) toolCombo.getSelectedItem();
if (!validateFields()) {
return;
}
try {
switch (tool) {
case COUNT:
doCount();
break;
case SORT:
doSort();
break;
case INDEX:
doIndex();
break;
case TILE:
doTile();
break;
}
} catch (PreprocessingException e) {
showMessage("Error performing " + tool + ": " + e.getMessage());
}
}
private void showMessage(String tool) {
JOptionPane.showMessageDialog(this, tool);
}
private void doSort() {
// Sort is not interruptible, and there is no provision for progress. So use a thread & wait cursor
runButton.setEnabled(false);
SwingWorker swingWorker = new IgvToolsSwingWorker() {
@Override
protected Object doInBackground() {
try {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
String maxRecordText = maxRecordsField.getText();
int maxRecords = (maxRecordText != null && maxRecordText.length() > 0) ?
Integer.parseInt(maxRecordText) : IgvTools.MAX_RECORDS_IN_RAM;
igvTools.doSort(inputField.getText(), outputField.getText(), tmpDirectoryField.getText(), maxRecords);
} catch (Exception e) {
showMessage("Error: " + e.getMessage());
}
return null;
}
};
swingWorker.execute();
}
private void doCount() {
SwingWorker swingWorker = new IgvToolsSwingWorker() {
@Override
protected Object doInBackground() {
try {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
String ifile = inputField.getText();
String ofile = outputField.getText();
String genomeId = genomeField.getText();
int maxZoomValue = Integer.parseInt(zoomCombo.getSelectedItem().toString());
Collection<WindowFunction> wfs = getWindowFunctions();
String windowSizeText = windowSizeField.getText();
int windowSize = (windowSizeText != null && windowSizeText.length() > 0) ?
Integer.parseInt(windowSizeText) : IgvTools.WINDOW_SIZE;
String extFactorText = extFactorField.getText().trim();
int extFactor = extFactorText.length() == 0 ? 0 : Integer.parseInt(extFactorText);
int strandOption = pairsCB.isSelected() ? CoverageCounter.PAIRED_COVERAGE : 0;
runButton.setEnabled(false);
int preExtFactor = 0;
int postExtFactor = 0;
igvTools.doCount(ifile, ofile, genomeId, maxZoomValue, wfs, windowSize, extFactor,
preExtFactor, postExtFactor, null, null, 0, strandOption);
} catch (Exception e) {
log.error(e.getMessage(), e);
showMessage("Error: " + e.getMessage());
}
return null;
}
};
swingWorker.execute();
}
private void doTile() {
SwingWorker swingWorker = new IgvToolsSwingWorker() {
@Override
protected Object doInBackground() {
try {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
String ifile = inputField.getText();
String ofile = outputField.getText();
String genomeId = genomeField.getText();
int maxZoomValue = Integer.parseInt(zoomCombo.getSelectedItem().toString());
Collection<WindowFunction> wfs = getWindowFunctions();
String probeFile = probeField.getText();
String typeString = Preprocessor.getExtension(ifile);
runButton.setEnabled(false);
igvTools.toTDF(typeString, ifile, ofile, probeFile, genomeId, maxZoomValue, wfs, null, IgvTools.MAX_RECORDS_IN_RAM);
} catch (Exception e) {
showMessage("Error: " + e.getMessage());
}
return null;
}
};
swingWorker.execute();
}
// public static void doIndex(String ifile, int indexType, int binSize) throws IOException {
private void doIndex() {
SwingWorker swingWorker = new IgvToolsSwingWorker() {
@Override
protected Object doInBackground() {
try {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
String ifile = inputField.getText();
int indexType = IgvTools.LINEAR_INDEX;
int binSize = IgvTools.LINEAR_BIN_SIZE;
runButton.setEnabled(false);
igvTools.doIndex(ifile, null, indexType, binSize);
} catch (Exception e) {
log.error("Error indexing file", e);
showMessage("Error: " + e.getMessage());
}
return null;
}
};
swingWorker.execute();
}
private Collection<WindowFunction> getWindowFunctions() {
ArrayList<WindowFunction> wfs = new ArrayList();
if (minCheckBox.isSelected()) {
wfs.add(WindowFunction.min);
}
if (maxCheckBox.isSelected()) {
wfs.add(WindowFunction.max);
}
if (meanCheckBox.isSelected()) {
wfs.add(WindowFunction.mean);
}
if (a98CheckBox.isSelected()) {
wfs.add(WindowFunction.percentile98);
}
if (a90CheckBox.isSelected()) {
wfs.add(WindowFunction.percentile90);
}
if (a10CheckBox.isSelected()) {
wfs.add(WindowFunction.percentile10);
}
if (a2CheckBox.isSelected()) {
wfs.add(WindowFunction.percentile2);
}
if (wfs.isEmpty()) {
wfs.add(WindowFunction.mean);
}
return wfs;
}
/**
* Select an input file, or directory in some cases
*
* @return
*/
private File chooseFile() {
//TODO Override so you can specify the file type with a string array ex: {".wig", ".tdf"}
// if (fileDialog == null) {
fileDialog = new JFileChooser();
// }
if (lastDirectory != null) {
fileDialog.setCurrentDirectory(lastDirectory);
}
fileDialog.setMultiSelectionEnabled(false);
fileDialog.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int returnVal = fileDialog.showDialog(this, "Select File");
if (returnVal == JFileChooser.CANCEL_OPTION) {
return null;
} else {
File selected = fileDialog.getSelectedFile();
lastDirectory = selected.isDirectory() ? selected : selected.getParentFile();
return selected;
}
}
public static void main(String[] args) {
launch(true, null);
}
private boolean genomeSelectionDisabled = false;
public static void launch(boolean modal, String genomeId) {
IgvToolsGui mainWindow = new IgvToolsGui();
mainWindow.pack();
mainWindow.setModal(modal);
mainWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainWindow.setResizable(false);
if (genomeId != null) {
mainWindow.genomeField.setText(genomeId);
mainWindow.genomeField.setEnabled(false);
mainWindow.genomeField.setToolTipText("<html>To change the genome id close this window and <br>use the pulldown on the IGV batch screen.");
mainWindow.genomeButton.setEnabled(false);
mainWindow.genomeSelectionDisabled = true;
}
mainWindow.setVisible(true);
}
private void inputButtonActionPerformed(ActionEvent e) {
setDefaultOutputText();
}
private void inputFieldActionPerformed(ActionEvent e) {
setDefaultOutputText();
}
private void inputFieldFocusLost(FocusEvent e) {
setDefaultOutputText();
}
/**
* Return what the defaultOutputText should be. {@code null} implies
* there should be no change
*
* @param inputFieldText
* @param tool
* @return
*/
static String getDefaultOutputText(String inputFieldText, Tool tool) {
String defaultOutputText = null;
if (inputFieldText.length() > 0) {
switch (tool) {
case COUNT:
case TILE:
defaultOutputText = inputFieldText + ".tdf";
break;
case SORT:
int ext = inputFieldText.lastIndexOf(".");
if (ext > 0) {
defaultOutputText = inputFieldText.substring(0, ext) + ".sorted" + inputFieldText.substring(ext);
}
break;
case INDEX:
defaultOutputText = "";
break;
}
}
return defaultOutputText;
}
private void setDefaultOutputText() {
String defaultOutputText = getDefaultOutputText(inputField.getText(), (Tool) toolCombo.getSelectedItem());
if (defaultOutputText != null) outputField.setText(defaultOutputText);
}
private void toolComboActionPerformed(ActionEvent e) {
setDefaultOutputText();
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
// Generated using JFormDesigner non-commercial license
mainPanel = new JPanel();
requiredPanel = new JPanel();
toolCombo = new JComboBox();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
outputLabel = new JLabel();
outputButton = new JButton();
inputField = new JTextField();
inputButton = new JButton();
outputField = new JTextField();
genomeLabel = new JLabel();
genomeField = new JTextField();
genomeButton = new JButton();
tilePanel = new JPanel();
zoomLabel = new JLabel();
windowFunctionLabel = new JLabel();
windowFunctionPanel = new JPanel();
minCheckBox = new JCheckBox();
maxCheckBox = new JCheckBox();
meanCheckBox = new JCheckBox();
medianCheckBox = new JCheckBox();
a2CheckBox = new JCheckBox();
a10CheckBox = new JCheckBox();
a90CheckBox = new JCheckBox();
a98CheckBox = new JCheckBox();
probeLabel = new JLabel();
probeField = new JTextField();
probeButton = new JButton();
zoomCombo = new JComboBox();
windowSizeLabel = new JLabel();
windowSizeField = new JTextField();
extFactorLabel = new JLabel();
extFactorField = new JTextField();
pairsCB = new JCheckBox();
sortPanel = new JPanel();
tmpDirectoryLabel = new JLabel();
maxRecordsLabel = new JLabel();
tempButton = new JButton();
tmpDirectoryField = new JTextField();
maxRecordsField = new JTextField();
buttonPanel = new JPanel();
runButton = new JButton();
closeButton = new JButton();
OutputPanel = new JPanel();
outputScroll = new JScrollPane();
outputText = new JTextArea();
JSeparator separator1 = new JSeparator();
progressBar = new JProgressBar();
//======== mainPanel ========
{
mainPanel.setBorder(new TitledBorder(new EtchedBorder(), ""));
mainPanel.setLayout(new GridBagLayout());
//======== requiredPanel ========
{
requiredPanel.setLayout(new GridBagLayout());
//---- toolCombo ----
toolCombo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
toolComboActionPerformed(e);
}
});
requiredPanel.add(toolCombo, new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- label1 ----
label1.setText("Command");
requiredPanel.add(label1, new GridBagConstraints(1, 1, 1, 1, 0.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//---- label2 ----
label2.setText("Input File");
requiredPanel.add(label2, new GridBagConstraints(1, 2, 1, 1, 0.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//---- outputLabel ----
outputLabel.setText("Output File");
requiredPanel.add(outputLabel, new GridBagConstraints(1, 3, 1, 1, 0.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//---- outputButton ----
outputButton.setText("Browse");
requiredPanel.add(outputButton, new GridBagConstraints(3, 3, 1, 1, 0.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- inputField ----
inputField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
inputFieldFocusLost(e);
}
});
inputField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
inputFieldActionPerformed(e);
}
});
requiredPanel.add(inputField, new GridBagConstraints(2, 2, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- inputButton ----
inputButton.setText("Browse");
inputButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
inputButtonActionPerformed(e);
}
});
requiredPanel.add(inputButton, new GridBagConstraints(3, 2, 1, 1, 0.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
requiredPanel.add(outputField, new GridBagConstraints(2, 3, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- genomeLabel ----
genomeLabel.setToolTipText("Either a genome ID (e.g. hg18) or the full path to a .genome file.");
genomeLabel.setText("Genome");
requiredPanel.add(genomeLabel, new GridBagConstraints(1, 4, 1, 1, 0.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
requiredPanel.add(genomeField, new GridBagConstraints(2, 4, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- genomeButton ----
genomeButton.setText("Browse");
requiredPanel.add(genomeButton, new GridBagConstraints(3, 4, 1, 1, 0.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
}
mainPanel.add(requiredPanel, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 10, 0), 0, 0));
//======== tilePanel ========
{
tilePanel.setEnabled(true);
tilePanel.setFont(tilePanel.getFont().deriveFont(Font.ITALIC, 10f));
tilePanel.setBorder(new TitledBorder(null, "TDF and Count options", TitledBorder.LEADING, TitledBorder.TOP));
tilePanel.setLayout(new GridBagLayout());
//---- zoomLabel ----
zoomLabel.setToolTipText("<html>Specifies the maximum zoom level to precompute. The default value is 7.<br>To reduce file size at the expense of Iperformance this value can be reduced.");
zoomLabel.setText("Zoom Levels");
tilePanel.add(zoomLabel, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//---- windowFunctionLabel ----
windowFunctionLabel.setToolTipText("Window functions to use for summarizing data. ");
windowFunctionLabel.setText("Window Functions");
tilePanel.add(windowFunctionLabel, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//======== windowFunctionPanel ========
{
windowFunctionPanel.setLayout(new GridLayout(2, 0));
//---- minCheckBox ----
minCheckBox.setText("Min");
windowFunctionPanel.add(minCheckBox);
//---- maxCheckBox ----
maxCheckBox.setText("Max");
windowFunctionPanel.add(maxCheckBox);
//---- meanCheckBox ----
meanCheckBox.setSelected(true);
meanCheckBox.setText("Mean");
windowFunctionPanel.add(meanCheckBox);
//---- medianCheckBox ----
medianCheckBox.setText("Median");
windowFunctionPanel.add(medianCheckBox);
//---- a2CheckBox ----
a2CheckBox.setText("2%");
windowFunctionPanel.add(a2CheckBox);
//---- a10CheckBox ----
a10CheckBox.setText("10%");
windowFunctionPanel.add(a10CheckBox);
//---- a90CheckBox ----
a90CheckBox.setText("90%");
windowFunctionPanel.add(a90CheckBox);
//---- a98CheckBox ----
a98CheckBox.setText("98%");
windowFunctionPanel.add(a98CheckBox);
}
tilePanel.add(windowFunctionPanel, new GridBagConstraints(2, 2, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
//---- probeLabel ----
probeLabel.setFont(probeLabel.getFont());
probeLabel.setToolTipText("<html>Specifies a \"bed\" file to be used to map probe identifiers to locations. This option is useful <br>when preprocessing gct files. The bed file should contain 4 columns: chr start end name\n<br>where name is the probe name in the gct file.");
probeLabel.setText("Probe to Loci Mapping");
tilePanel.add(probeLabel, new GridBagConstraints(1, 3, 1, 1, 0.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
tilePanel.add(probeField, new GridBagConstraints(2, 3, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- probeButton ----
probeButton.setText("Browse");
tilePanel.add(probeButton, new GridBagConstraints(3, 3, 1, 1, 0.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- zoomCombo ----
zoomCombo.setEditable(false);
zoomCombo.setModel(new DefaultComboBoxModel(new String[] {
}));
tilePanel.add(zoomCombo, new GridBagConstraints(2, 1, 1, 1, 1.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//---- windowSizeLabel ----
windowSizeLabel.setToolTipText("The window size over which coverage computed when using the count command. Defaults to 25 bp.");
windowSizeLabel.setText("Window Size");
tilePanel.add(windowSizeLabel, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
tilePanel.add(windowSizeField, new GridBagConstraints(2, 4, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- extFactorLabel ----
extFactorLabel.setText("Extension Factor");
extFactorLabel.setToolTipText("Extend read by this amount. Set to average fragment size of library");
tilePanel.add(extFactorLabel, new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
tilePanel.add(extFactorField, new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
//---- pairsCB ----
pairsCB.setText("Count as Pairs");
pairsCB.setToolTipText("Count area between proper pairs as covered.");
tilePanel.add(pairsCB, new GridBagConstraints(1, 6, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
}
mainPanel.add(tilePanel, new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 10, 0), 0, 0));
//======== sortPanel ========
{
sortPanel.setBorder(new TitledBorder(null, "Sort Options", TitledBorder.LEADING, TitledBorder.TOP));
sortPanel.setLayout(new GridBagLayout());
//---- tmpDirectoryLabel ----
tmpDirectoryLabel.setToolTipText("<html>Specify a temporary working directory. For large input files this directory will be used to <br>store intermediate results of the sort. The default is the users temp directory.");
tmpDirectoryLabel.setText("Temp Directory");
sortPanel.add(tmpDirectoryLabel, new GridBagConstraints(1, 1, 1, 1, 0.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//---- maxRecordsLabel ----
maxRecordsLabel.setToolTipText("<html>The maximum number of records to keep in memory during the sort. The default value is <br>500000. Increase this number if you receive \"too many open files\" errors. Decrease it if you <br>experience \"out of memory\" errors.");
maxRecordsLabel.setText("Max Records");
sortPanel.add(maxRecordsLabel, new GridBagConstraints(1, 2, 1, 1, 0.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
//---- tempButton ----
tempButton.setText("Browse");
sortPanel.add(tempButton, new GridBagConstraints(4, 1, 1, 1, 0.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
sortPanel.add(tmpDirectoryField, new GridBagConstraints(3, 1, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
sortPanel.add(maxRecordsField, new GridBagConstraints(3, 2, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
}
mainPanel.add(sortPanel, new GridBagConstraints(1, 3, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 10, 0), 0, 0));
//======== buttonPanel ========
{
buttonPanel.setLayout(new GridBagLayout());
//---- runButton ----
runButton.setText("Run");
buttonPanel.add(runButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
//---- closeButton ----
closeButton.setText("Close");
buttonPanel.add(closeButton, new GridBagConstraints(1, 0, 1, 1, 0.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
}
mainPanel.add(buttonPanel, new GridBagConstraints(1, 4, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 10, 0), 0, 0));
//======== OutputPanel ========
{
OutputPanel.setBorder(new TitledBorder(BorderFactory.createEmptyBorder(), "Messages", TitledBorder.LEADING, TitledBorder.TOP));
OutputPanel.setLayout(null);
//======== outputScroll ========
{
//---- outputText ----
outputText.setEditable(false);
outputText.setText("");
outputText.setRows(10);
outputScroll.setViewportView(outputText);
}
OutputPanel.add(outputScroll);
outputScroll.setBounds(4, 20, 881, outputScroll.getPreferredSize().height);
{ // compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < OutputPanel.getComponentCount(); i++) {
Rectangle bounds = OutputPanel.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = OutputPanel.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
OutputPanel.setMinimumSize(preferredSize);
OutputPanel.setPreferredSize(preferredSize);
}
}
mainPanel.add(OutputPanel, new GridBagConstraints(1, 6, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 10, 0), 0, 0));
mainPanel.add(separator1, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 10, 0), 0, 0));
mainPanel.add(progressBar, new GridBagConstraints(1, 7, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
}
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// Generated using JFormDesigner non-commercial license
private JPanel mainPanel;
private JPanel requiredPanel;
private JComboBox toolCombo;
private JLabel outputLabel;
private JButton outputButton;
private JTextField inputField;
private JButton inputButton;
private JTextField outputField;
private JLabel genomeLabel;
private JTextField genomeField;
private JButton genomeButton;
private JPanel tilePanel;
private JLabel zoomLabel;
private JLabel windowFunctionLabel;
private JPanel windowFunctionPanel;
private JCheckBox minCheckBox;
private JCheckBox maxCheckBox;
private JCheckBox meanCheckBox;
private JCheckBox medianCheckBox;
private JCheckBox a2CheckBox;
private JCheckBox a10CheckBox;
private JCheckBox a90CheckBox;
private JCheckBox a98CheckBox;
private JLabel probeLabel;
private JTextField probeField;
private JButton probeButton;
private JComboBox zoomCombo;
private JLabel windowSizeLabel;
private JTextField windowSizeField;
private JLabel extFactorLabel;
private JTextField extFactorField;
private JCheckBox pairsCB;
private JPanel sortPanel;
private JLabel tmpDirectoryLabel;
private JLabel maxRecordsLabel;
private JButton tempButton;
private JTextField tmpDirectoryField;
private JTextField maxRecordsField;
private JPanel buttonPanel;
private JButton runButton;
private JButton closeButton;
private JPanel OutputPanel;
private JScrollPane outputScroll;
private JTextArea outputText;
private JProgressBar progressBar;
// JFormDesigner - End of variables declaration //GEN-END:variables
private abstract class IgvToolsSwingWorker extends SwingWorker{
@Override
protected void done() {
runButton.setEnabled(true);
setCursor(Cursor.getDefaultCursor());
updateTextArea("Done");
}
}
}