Example #1
0
  public void analyze(String name, Object data) {
    if (!(data instanceof SequenceGroup)) {
      ErrorWindow.showErrorWindow(
          new Exception("Got a non-sequencegroup object for a dot plot analysis"));
    }

    SequenceGroup sg = (SequenceGroup) data;
    currentSG = sg;

    titleLabel.setText(name);

    DefaultComboBoxModel cModel1 = new DefaultComboBoxModel();
    DefaultComboBoxModel cModel2 = new DefaultComboBoxModel();

    for (int j = 0; j < sg.size(); j++) {
      cModel1.addElement(sg.get(j).getName());
      cModel2.addElement(sg.get(j).getName());
    }
    seq1Box.setModel(cModel1);

    seq2Box.setModel(cModel2);

    seq1Box.setSelectedIndex(0);
    seq2Box.setSelectedIndex(1);

    dotPlot.setBlockWidth((Integer) blockWidthSpinner.getValue());
    changeSequences();
  }
Example #2
0
  protected void changeSequences() {
    String name1 = (String) seq1Box.getSelectedItem();
    Sequence seq1 = currentSG.getSequenceForName(name1);

    if (revComp1Box.isSelected()) {
      seq1 = seq1.getReverseComplement();
      seq1.setName(name1);
    }

    String name2 = (String) seq2Box.getSelectedItem();
    Sequence seq2 = currentSG.getSequenceForName(name2);
    if (revComp2Box.isSelected()) {
      seq2 = seq2.getReverseComplement();
      seq2.setName(name2);
    }
    dotPlot.setSequences(seq1, seq2);
    repaint();
  }
Example #3
0
  private void initializeComponents() {
    mainPanel = new JPanel();
    mainScrollPane = new JScrollPane(mainPanel);
    mainPanel.setLayout(new BorderLayout());
    mainPanel.setMinimumSize(new Dimension(300, 300));
    mainPanel.setBackground(Color.white);

    mainScrollPane.setBackground(Color.white);
    this.setLayout(new BorderLayout());
    this.add(mainScrollPane, BorderLayout.CENTER);

    JPanel leftPanel = new JPanel();
    leftPanel.setBackground(Color.white);
    leftPanel.setMinimumSize(new Dimension(200, 10));
    leftPanel.setPreferredSize(new Dimension(200, 10));

    mainPanel.add(leftPanel, BorderLayout.WEST);

    leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
    titleLabel = new JLabel();
    titleLabel.setAlignmentX(RIGHT_ALIGNMENT);
    leftPanel.add(Box.createVerticalStrut(10));
    leftPanel.add(titleLabel);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setOpaque(false);
    buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

    JButton saveButton = new JButton("Save");
    saveButton.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            saveImage();
          }
        });
    buttonPanel.add(saveButton);

    JButton restoreButton = new JButton("Restore");
    restoreButton.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            restoreDefaultBounds();
          }
        });

    buttonPanel.add(restoreButton);
    JButton zoomButton = new JButton("Zoom");
    zoomButton.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            zoomSelectedBounds();
          }
        });
    buttonPanel.add(zoomButton);

    leftPanel.add(buttonPanel);

    leftPanel.add(Box.createVerticalStrut(50));
    seq1Box = new JComboBox();
    seq1Box.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            changeSequences();
          }
        });
    leftPanel.add(seq1Box);
    seq1Box.setPreferredSize(new Dimension(180, 24));
    seq1Box.setMaximumSize(new Dimension(Integer.MAX_VALUE, 28));
    seq1Box.setAlignmentX(RIGHT_ALIGNMENT);
    revComp1Box = new JCheckBox("Use reverse complement");
    revComp1Box.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
            changeSequences();
          }
        });
    revComp1Box.setAlignmentX(RIGHT_ALIGNMENT);
    leftPanel.add(revComp1Box);

    leftPanel.add(Box.createVerticalStrut(10));

    seq2Box = new JComboBox();
    seq2Box.setPreferredSize(new Dimension(180, 24));
    seq2Box.setMaximumSize(new Dimension(Integer.MAX_VALUE, 28));
    seq2Box.setAlignmentX(RIGHT_ALIGNMENT);
    seq2Box.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            changeSequences();
          }
        });
    leftPanel.add(seq2Box);
    revComp2Box = new JCheckBox("Use reverse complement");
    revComp2Box.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
            changeSequences();
          }
        });
    revComp2Box.setAlignmentX(RIGHT_ALIGNMENT);
    leftPanel.add(revComp2Box);

    leftPanel.add(Box.createVerticalStrut(15));
    blockWidthSpinner = new JSpinner();
    blockWidthSpinner.setModel(new SpinnerNumberModel(3, 1, 100, 1));
    blockWidthSpinner.setToolTipText("The number of sites used per rectangle");
    blockWidthSpinner.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            updateBlockWidth();
          }
        });
    JPanel bwPanel = new JPanel();
    bwPanel.setOpaque(false);
    bwPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
    JLabel lab = new JLabel("Block width : ");
    bwPanel.add(lab);
    bwPanel.add(blockWidthSpinner);
    bwPanel.setAlignmentX(RIGHT_ALIGNMENT);
    leftPanel.add(bwPanel);

    leftPanel.add(Box.createVerticalGlue());

    dotPlot = new DotPlotFigure();
    dotPlot.setPreferredSize(new Dimension(300, 300));
    mainPanel.add(dotPlot, BorderLayout.CENTER);
  }
Example #4
0
 protected void updateBlockWidth() {
   dotPlot.setBlockWidth((Integer) blockWidthSpinner.getValue());
   dotPlot.repaint();
 }
Example #5
0
 protected void restoreDefaultBounds() {
   dotPlot.restoreDefaultBounds();
 }
Example #6
0
 /** Zoom in to the selection box */
 protected void zoomSelectedBounds() {
   dotPlot.zoomToSelection();
 }
  public void paint(Graphics2D g) {
    if (sequenceOne == null || sequenceTwo == null) {
      System.out.println("Not drawing plot since one of the sequences is null");
      return;
    }

    redrawImage = redrawImage || getVariablesHaveChanged();

    if (redrawImage) drawImage();

    int imageX = (int) Math.round(bounds.x * xFactor);
    int imageY = (int) Math.round(bounds.y * yFactor);

    if (imageIsBeingRedrawn) {
      g.drawString("Please wait", 20, 20);
    } else {
      if (useZoom) {
        // g.drawImage(dotPlotImage, imageX, imageY, dotPlotImage.getWidth(),
        // dotPlotImage.getHeight(), null);
        g.drawImage(
            dotPlotImage,
            imageX,
            imageY,
            imageX + dotPlotImage.getWidth(),
            imageY + dotPlotImage.getHeight(),
            sx1,
            sy1,
            sx2,
            sy2,
            null);
        //				g.setColor(Color.RED);
        //				g.drawRect(imageX+ sx1, imageY + sy1, sx2-sx1, sy2-sy1);
        //				g.setColor(Color.black);
      } else
        g.drawImage(
            dotPlotImage, imageX, imageY, dotPlotImage.getWidth(), dotPlotImage.getHeight(), null);

      // Draw x-axis
      g.setColor(Color.black);
      int xAxisY = imageY + dotPlotImage.getHeight() + 1; // y-value in pixels of x-axis
      g.drawLine(imageX, xAxisY, imageX + dotPlotImage.getWidth(), xAxisY);
      g.setFont(labelFont);
      FontMetrics fm = g.getFontMetrics();
      double tickStep = dotPlotImage.getWidth() / ((double) xAxisTicks - 1);
      for (int i = 0; i < xAxisTicks; i++) {
        int tickX = (int) Math.round(imageX + i * tickStep);
        g.drawLine(tickX, xAxisY, tickX, xAxisY + 4);
        String label = formatter.format(dataXForPixelX(tickX));
        g.drawString(label, tickX - fm.stringWidth(label) / 2, xAxisY + 5 + fm.getHeight());
      }

      // Draw the y-axis
      int yAxisX = (int) Math.round(bounds.x * xFactor);
      g.drawLine(yAxisX, imageY, yAxisX, imageY + dotPlotImage.getHeight());
      tickStep = dotPlotImage.getHeight() / ((double) yAxisTicks - 1);
      for (int i = 0; i < yAxisTicks; i++) {
        int tickY = (int) Math.round(imageY + i * tickStep);
        g.drawLine(yAxisX - 4, tickY, yAxisX, tickY);
        String label = formatter.format(dataYForPixelY(tickY));
        g.drawString(label, yAxisX - fm.stringWidth(label) - 6, tickY + 5);
      }

      if (yMarkerMax > 0
          && (dotPlotParent.isCurrentlyRectSelecting()
              || dotPlotParent.isSelectionRectIsPreserved())) {
        g.setColor(Color.GRAY);
        g.drawLine(yAxisX - 6, yMarkerMax, yAxisX - 1, yMarkerMax);
        g.drawLine(yAxisX - 6, yMarkerMin, yAxisX - 1, yMarkerMin);
        g.drawLine(xMarkerMin, xAxisY + 1, xMarkerMin, xAxisY + 6);
        g.drawLine(xMarkerMax, xAxisY + 1, xMarkerMax, xAxisY + 6);
        g.drawString(formatter.format(dataXForPixelX(xMarkerMin)), xMarkerMin - 6, xAxisY + 17);
        g.drawString(formatter.format(dataXForPixelX(xMarkerMax)), xMarkerMax - 6, xAxisY + 17);

        String lab = formatter.format(dataYForPixelY(yMarkerMin));
        g.drawString(lab, yAxisX - fm.stringWidth(lab) - 6, yMarkerMin + 4);

        lab = formatter.format(dataYForPixelY(yMarkerMax));
        g.drawString(lab, yAxisX - fm.stringWidth(lab) - 6, yMarkerMax + 4);
      }
    }
  }