Example #1
0
  private void updateHistogramGraph(double min, double max) {
    xAxis.clear();
    currentMaxMin.max = max;
    currentMaxMin.min = min;
    histogramFunc.setMinMax(min, max);
    histogramFunc.setIgnoreOutliers(true);
    // sanity check if there is actually a histogram live
    List<? extends Dataset> newHistogram = histogramFunc.value(data);
    Dataset histogram = newHistogram.get(0);
    if (histograms != null && histograms.size() > 1) {
      histograms.set(histograms.size() - 1, histogram);
    } else {
      histograms = new ArrayList<Dataset>();
      histograms.add(histogram);
    }

    // Some logging to check on the histograms size
    logger.debug("number of histograms stored is {}", histograms.size());
    if (histograms.size() > 10) {
      logger.warn(
          "Number of stored histograms is over expected levels, now at {}", histograms.size());
    }

    xAxis.setValues(
        DatasetUtils.linSpace(min, max, Math.max(1, histogram.getSize() + 1), Dataset.FLOAT64));
    histogramPlotter.setXAxisValues(xAxis, 1);
    generateHistogramUpdate();
    updateChannelGraphs();
    histogramPlotter.refresh(true);
  }
Example #2
0
  @Override
  public void createPartControl(Composite parent) {

    this.parent = parent;
    container = new Composite(parent, SWT.NONE);
    container.setLayout(new GridLayout(1, false));

    final Composite top = new Composite(container, SWT.NONE);
    top.setLayout(new GridLayout(3, false));
    top.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

    final Label scheme = new Label(top, SWT.NONE);
    scheme.setText("Colour Scheme");
    cmbColourMap = new CCombo(top, SWT.BORDER | SWT.READ_ONLY);
    cmbColourMap.setToolTipText("Change the color scheme.");
    cmbColourMap.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    btnExpertMode = new Button(top, SWT.CHECK);
    btnExpertMode.setText("Expert");
    btnExpertMode.setToolTipText("Enable expert mode for customising colour channels");
    btnExpertMode.addSelectionListener(this);

    advancedComp = new Composite(container, SWT.NONE);
    // controlGroup.setText("RGB Settings");   // Looks a bit busy with this label
    advancedComp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
    advancedComp.setLayout(new GridLayout(3, false));

    expertGroup = new Group(advancedComp, SWT.NONE);
    expertGroup.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
    expertGroup.setLayout(new GridLayout(3, false));
    {
      Label lblRed = new Label(expertGroup, SWT.NONE);
      lblRed.setText("Red");
      cmbRedColour = new CCombo(expertGroup, SWT.BORDER | SWT.READ_ONLY);

      btnRedInverse = new Button(expertGroup, SWT.CHECK);
      btnRedInverse.setText("Inverse");
      btnRedInverse.addSelectionListener(this);

      Label lblGreen = new Label(expertGroup, SWT.NONE);
      lblGreen.setText("Green");
      cmbGreenColour = new CCombo(expertGroup, SWT.BORDER | SWT.READ_ONLY);
      btnGreenInverse = new Button(expertGroup, SWT.CHECK);
      btnGreenInverse.setText("Inverse");
      btnGreenInverse.addSelectionListener(this);

      Label lblBlue = new Label(expertGroup, SWT.NONE);
      lblBlue.setText("Blue");
      cmbBlueColour = new CCombo(expertGroup, SWT.BORDER | SWT.READ_ONLY);
      btnBlueInverse = new Button(expertGroup, SWT.CHECK);
      btnBlueInverse.setText("Inverse");
      btnBlueInverse.addSelectionListener(this);

      Label lblAlpha = new Label(expertGroup, SWT.NONE);
      lblAlpha.setText("Alpha");
      cmbAlpha = new CCombo(expertGroup, SWT.BORDER | SWT.READ_ONLY);
      btnAlphaInverse = new Button(expertGroup, SWT.CHECK);
      btnAlphaInverse.setText("Inverse");
      btnAlphaInverse.addSelectionListener(this);
    }
    expertGroup.setVisible(getPreferenceColourMapExpertMode());
    ((GridData) expertGroup.getLayoutData()).exclude = !getPreferenceColourMapExpertMode();

    threshPanel = new Group(advancedComp, SWT.NONE);
    threshPanel.setText("Mark's special threshhold"); // Looks a bit busy with this label
    threshPanel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
    threshPanel.setLayout(new GridLayout(2, false));
    {
      Label lblMinValue = new Label(threshPanel, SWT.NONE);
      lblMinValue.setText("Min threshold");
      spnMinValue = new Spinner(threshPanel, SWT.BORDER);
      spnMinValue.setMinimum(0);
      spnMinValue.setMaximum(100);
      spnMinValue.addSelectionListener(this);
      Label lblMaxValue = new Label(threshPanel, SWT.NONE);
      lblMaxValue.setText("Max threshold");
      spnMaxValue = new Spinner(threshPanel, SWT.BORDER);
      spnMaxValue.setMinimum(0);
      spnMaxValue.setMaximum(100);
      spnMaxValue.addSelectionListener(this);
    }
    threshPanel.setVisible(false);
    ((GridData) threshPanel.getLayoutData()).exclude = true;

    rangePanel = new Group(container, SWT.NONE);
    rangePanel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    rangePanel.setLayout(new GridLayout(3, false));
    rangePanel.setText("Histogram range");
    {
      Label lblStartValue = new Label(rangePanel, SWT.NONE);
      lblStartValue.setText("Minimum");
      spnRangeStart = new FloatSpinner(rangePanel, SWT.BORDER);
      GridData gridData = new GridData(SWT.NONE, SWT.NONE, true, false);
      spnRangeStart.setLayoutData(gridData);
      spnRangeStart.addSelectionListener(this);
      sldMinValue = new Slider(rangePanel, SWT.BORDER);
      gridData = new GridData(SWT.FILL, SWT.NONE, true, false);
      gridData.minimumWidth = 90;
      sldMinValue.setLayoutData(gridData);
      sldMinValue.addSelectionListener(this);
      sldMinValue.setMinimum(0);
      sldMinValue.setMaximum(SLIDERSECTIONS);
      sldMinValue.setIncrement(1);
      Label lblStopValue = new Label(rangePanel, SWT.NONE);
      lblStopValue.setText("Maximum");
      gridData = new GridData(SWT.NONE, SWT.NONE, true, false);
      spnRangeStop = new FloatSpinner(rangePanel, SWT.BORDER);
      spnRangeStop.setLayoutData(gridData);
      spnRangeStop.addSelectionListener(this);
      spnRangeStart.setEnabled(false);
      spnRangeStop.setEnabled(false);
      sldMaxValue = new Slider(rangePanel, SWT.BORDER);
      gridData = new GridData(SWT.FILL, SWT.NONE, true, false);
      gridData.minimumWidth = 90;
      sldMaxValue.setLayoutData(gridData);
      sldMaxValue.addSelectionListener(this);
      sldMaxValue.setMinimum(0);
      sldMaxValue.setMaximum(SLIDERSECTIONS);
      sldMaxValue.setIncrement(1);

      spnRangeStart.setEnabled(false);
      spnRangeStop.setEnabled(false);
      sldMinValue.setEnabled(false);
      sldMaxValue.setEnabled(false);
    }
    {
      composite = new Composite(container, SWT.NONE);
      composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
      composite.setLayout(new FillLayout());

      histogramPlotter = new DataSetPlotter(PlottingMode.BARCHART, composite, false);
      histogramPlotter.setXAxisLabel("Intensity Value");
      histogramPlotter.setYAxisLabel("Count");
      histogramPlotter.setAxisModes(AxisMode.CUSTOM, AxisMode.LINEAR, AxisMode.LINEAR);
      histogramPlotter.setXTickLabelFormat(TickFormatting.plainMode);
      histogramPlotter.setXAxisValues(xAxis, 1);

      Plot1DGraphTable colourTable = histogramPlotter.getColourTable();
      Plot1DAppearance plotApp = new Plot1DAppearance(Color.RED, Plot1DStyles.SOLID, "");
      colourTable.addEntryOnLegend(plotApp);
      plotApp = new Plot1DAppearance(Color.GREEN, Plot1DStyles.SOLID, "");
      colourTable.addEntryOnLegend(plotApp);
      plotApp = new Plot1DAppearance(Color.BLUE, Plot1DStyles.SOLID, "");
      colourTable.addEntryOnLegend(plotApp);
      plotApp = new Plot1DAppearance(Color.ORANGE, Plot1DStyles.SOLID, "");
      colourTable.addEntryOnLegend(plotApp);
    }

    cmbColourMap.addSelectionListener(this);
    cmbRedColour.addSelectionListener(this);
    cmbGreenColour.addSelectionListener(this);
    cmbBlueColour.addSelectionListener(this);
    cmbAlpha.addSelectionListener(this);
    buildToolbar();
    GlobalColourMaps.InitializeColourMaps();
    fillupColourComboBoxes();
    fillupColourMapBox();
    buildGradientImage();
  }