Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.vcell.N5.reduction.DTO;

import ij.ImagePlus;
import ij.gui.Roi;
import org.vcell.N5.reduction.GUI.conclusion.SelectMeasurements;

import java.io.File;
import java.util.ArrayList;

public class DataReductionSubmission {
public final boolean normalizeMeasurementsBool;
public final ArrayList<Roi> arrayOfSimRois;
public final ArrayList<Roi> arrayOfLabRois;
public final ImagePlus labResults;
public final int numOfSimImages;
public final File fileToSaveResultsTo;
public final RangeOfImage experiementNormRange;
public final RangeOfImage simNormRange;
public final RangeOfImage experimentImageRange;
public final RangeOfImage simImageRange;
public final ArrayList<SelectMeasurements.AvailableMeasurements> selectedMeasurements;
public final boolean wideTable;

public DataReductionSubmission(boolean normalizeMeasurementsBool, ArrayList<Roi> arrayOfSimRois, ArrayList<Roi> arrayOfLabRois,
ImagePlus labResults, int simStartPointNorm, int simEndPointNorm, int imageStartPointNorm,
int imageEndPointNorm, int numOfSimImages, File fileToSaveResultsTo,
RangeOfImage simRange, ArrayList<SelectMeasurements.AvailableMeasurements> selectedMeasurements, boolean wideTable) {
this.normalizeMeasurementsBool = normalizeMeasurementsBool;
this.arrayOfSimRois = arrayOfSimRois;
this.arrayOfLabRois = arrayOfLabRois;
this.labResults = labResults;
this.numOfSimImages = numOfSimImages;
this.fileToSaveResultsTo = fileToSaveResultsTo;
this.experiementNormRange = new RangeOfImage(imageStartPointNorm, imageEndPointNorm);
this.simNormRange = new RangeOfImage(simStartPointNorm, simEndPointNorm);
this.experimentImageRange = new RangeOfImage(1, labResults.getNFrames(),
1, labResults.getNSlices(), 1, labResults.getNChannels());
this.simImageRange = simRange;
this.selectedMeasurements = selectedMeasurements;
this.wideTable = wideTable;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.vcell.N5.reduction.DTO;

import org.vcell.N5.reduction.GUI.SelectMeasurements;
import org.vcell.N5.reduction.GUI.conclusion.SelectMeasurements;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.vcell.N5.UI.MainPanel;
import org.vcell.N5.reduction.DTO.RangeOfImage;
import org.vcell.N5.reduction.DTO.ReducedData;
import org.vcell.N5.reduction.GUI.DataReductionGUI;
import org.vcell.N5.reduction.DTO.DataReductionSubmission;
import org.vcell.N5.retrieving.SimLoadingListener;
import org.vcell.N5.retrieving.SimResultsLoader;

Expand All @@ -27,14 +27,14 @@ public class DataReductionManager implements SimLoadingListener {
private int numOfImagesToOpen;
private final ReductionCalculations calculations;

public final DataReductionGUI.DataReductionSubmission submission;
public final DataReductionSubmission submission;

private final ConcurrentHashMap<String, ThreadStruct> threadPool = new ConcurrentHashMap<>();
private final Object threadPoolLock = new Object();

private DataReductionWriter dataReductionWriter;

public DataReductionManager(DataReductionGUI.DataReductionSubmission submission){
public DataReductionManager(DataReductionSubmission submission){
N5ImageHandler.loadingManager.addSimLoadingListener(this);
this.submission = submission;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import org.vcell.N5.UI.N5ExportTable;
import org.vcell.N5.reduction.DTO.RangeOfImage;
import org.vcell.N5.reduction.DTO.ReducedData;
import org.vcell.N5.reduction.GUI.DataReductionGUI;
import org.vcell.N5.reduction.GUI.SelectMeasurements;
import org.vcell.N5.reduction.DTO.DataReductionSubmission;
import org.vcell.N5.reduction.GUI.conclusion.SelectMeasurements;
import org.vcell.N5.retrieving.SimResultsLoader;

import java.io.File;
Expand All @@ -21,7 +21,7 @@ public class DataReductionWriter{
private final Object metaDataLock = new Object();
private final File file;

public final DataReductionGUI.DataReductionSubmission submission;
public final DataReductionSubmission submission;

private final ArrayList<ArrayList<String>> averageMatrix = new ArrayList<>();
private final ArrayList<ArrayList<String>> standardDivMatrix = new ArrayList<>();
Expand Down Expand Up @@ -52,7 +52,7 @@ public class DataReductionWriter{
// Initialize Sheet and Lab results //
/////////////////////////////////////

public DataReductionWriter(DataReductionGUI.DataReductionSubmission submission, int maxT, int maxZ){
public DataReductionWriter(DataReductionSubmission submission, int maxT, int maxZ){
this.submission = submission;
this.selectedMeasurements = submission.selectedMeasurements;
this.file = submission.fileToSaveResultsTo;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,82 +1,60 @@
package org.vcell.N5.reduction.GUI;

import ij.ImagePlus;
import ij.WindowManager;
import ij.gui.Roi;
import org.vcell.N5.UI.ControlButtonsPanel;
import org.vcell.N5.UI.MainPanel;
import org.vcell.N5.reduction.DTO.RangeOfImage;
import org.vcell.N5.reduction.DTO.DataReductionSubmission;
import org.vcell.N5.reduction.GUI.ROIs.RoiSelection;
import org.vcell.N5.reduction.GUI.conclusion.Conclusion;
import org.vcell.N5.reduction.GUI.images.ImagesToMeasure;
import org.vcell.N5.retrieving.SimResultsLoader;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;

public class DataReductionGUI extends JPanel implements ActionListener {
private JComboBox<String> chosenImage;
private final JCheckBox selectRangeOfMeasurement = new JCheckBox("Select Measurement Range: ");
private final JCheckBox normalizeMeasurement = new JCheckBox("Normalize Measurement: ");
private final JCheckBox choseCSVTableFormat = new JCheckBox("Choose CSV Format: ");

private final JDialog jDialog = new JDialog(MainPanel.exportTableDialog, true);
private final JButton okayButton = new JButton("Okay");
private final JButton cancelButton = new JButton("Cancel");
private File chosenFile;

private final ArrayList<SimResultsLoader> filesToOpen;
private File resultSaveFile;

private final ArrayList<SimResultsLoader> simsToOpen;
private final ArrayList<JPanel> panels = new ArrayList<>();

public int fileChooserReturnValue;

private final SelectSimRange selectSimRange;
private final RoiSelection roiSelection;
private final ImagesToMeasure imagesToMeasurePanel;
private final NormalizeGUI normalizeGUI;
private final SelectMeasurements selectMeasurements;
private final SelectTableFormat selectTableFormat;
private final Conclusion conclusion;

private boolean continueWithProcess = false;

private final Border lowerEtchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);

public DataReductionGUI(ArrayList<SimResultsLoader> filesToOpen, double simCSize, double simZSize, double simTSize){
this.filesToOpen = filesToOpen;
public DataReductionGUI(ArrayList<SimResultsLoader> simsToOpen, double simCSize, double simZSize, double simTSize){
this.simsToOpen = simsToOpen;
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
okayButton.setEnabled(false);


selectSimRange = new SelectSimRange(jDialog, simCSize, simZSize, simTSize);
roiSelection = new RoiSelection(this);
normalizeGUI = new NormalizeGUI(jDialog, simTSize);
selectMeasurements = new SelectMeasurements(this);
selectTableFormat = new SelectTableFormat();

JPanel imagesToMeasurePanel = new JPanel();
imagesToMeasurePanel.setLayout(new BoxLayout(imagesToMeasurePanel, BoxLayout.Y_AXIS));
imagesToMeasurePanel.setBorder(BorderFactory.createTitledBorder(lowerEtchedBorder, "Images To Measure"));
imagesToMeasurePanel.add(imageSelectionPanel());
imagesToMeasurePanel.add(selectedImagesToOpenPanel());
conclusion = new Conclusion(this, simCSize, simZSize, simTSize);
imagesToMeasurePanel = new ImagesToMeasure(simsToOpen);

add(imagesToMeasurePanel);
add(roiSelection);
add(selectMeasurements);
add(displayOptionsPanel());
add(selectTableFormat);
// add(normalizeGUI);
add(selectSimRange);
add(conclusion);
add(okayCancelPanel());

setVisible(true);

okayButton.addActionListener(this);
cancelButton.addActionListener(this);
normalizeMeasurement.addActionListener(this);
selectRangeOfMeasurement.addActionListener(this);
choseCSVTableFormat.addActionListener(this);


this.setBorder(new EmptyBorder(15, 12, 15, 12));

Expand All @@ -91,11 +69,11 @@ public DataReductionGUI(ArrayList<SimResultsLoader> filesToOpen, double simCSize
public DataReductionSubmission createSubmission(){
int[] simRange = normalizeGUI.getSimTimRange();
int[] labRange = normalizeGUI.getImageTimeRange();
return new DataReductionSubmission(normalizeMeasurement.isSelected(),
return new DataReductionSubmission(false,
roiSelection.getSimROIList(), roiSelection.getImageROIList(),
WindowManager.getImage((String) chosenImage.getSelectedItem()),
simRange[0], simRange[1], labRange[0], labRange[1], filesToOpen.size(), chosenFile,
selectSimRange.getRangeOfSim(), selectMeasurements.getChosenMeasurements(), selectTableFormat.isWideTableSelected());
imagesToMeasurePanel.getChosenExpImage(),
simRange[0], simRange[1], labRange[0], labRange[1], simsToOpen.size(), resultSaveFile,
conclusion.selectSimRange.getRangeOfSim(), conclusion.selectMeasurements.getChosenMeasurements(), conclusion.selectTableFormat.isWideTableSelected());
}

private JPanel okayCancelPanel(){
Expand All @@ -105,65 +83,26 @@ private JPanel okayCancelPanel(){
return jPanel;
}

private JPanel imageSelectionPanel(){
JPanel jPanel = new JPanel(new GridLayout(1, 2));
jPanel.add(new JLabel("Experimental"));
chosenImage = new JComboBox<>(WindowManager.getImageTitles());
jPanel.add(chosenImage);
return jPanel;
}

private JPanel selectedImagesToOpenPanel(){
JPanel jPanel = new JPanel();
String[] namesOfImagesToOpen = new String[filesToOpen.size()];
for (int i = 0; i < filesToOpen.size(); i++){
namesOfImagesToOpen[i] = filesToOpen.get(i).userSetFileName;
}
JList<String> selectedImagesToOpen = new JList<>(namesOfImagesToOpen);
selectedImagesToOpen.setEnabled(false);
selectedImagesToOpen.setVisibleRowCount(4);
JScrollPane jScrollPane = new JScrollPane(selectedImagesToOpen);
jPanel.add(new JLabel("Selected Simulations"));
jPanel.add(jScrollPane);
jPanel.setLayout(new GridLayout(1, 2));
return jPanel;
}

private JPanel displayOptionsPanel(){
JPanel jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
// jPanel.add(normalizeMeasurement);
jPanel.add(selectRangeOfMeasurement);
jPanel.add(choseCSVTableFormat);
return jPanel;
}

public void activateOkayButton(){
boolean selectedAMeasurement = !selectMeasurements.getChosenMeasurements().isEmpty();
boolean chosenExperimentImage = chosenImage.getSelectedItem() != null;
// boolean roisIsSelected = !roiSelection.getImageROIList().isEmpty() && !roiSelection.getSimROIList().isEmpty();
boolean selectedAMeasurement = !conclusion.selectMeasurements.getChosenMeasurements().isEmpty();
boolean chosenExperimentImage = imagesToMeasurePanel.getChosenExpImage() != null;
okayButton.setEnabled(selectedAMeasurement && chosenExperimentImage);
}

public void updateDisplay(){
jDialog.revalidate();
jDialog.repaint();
jDialog.pack();
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(normalizeMeasurement)) {
normalizeGUI.setVisible(normalizeMeasurement.isSelected());
} else if (e.getSource().equals(selectRangeOfMeasurement)){
selectSimRange.setVisible(selectRangeOfMeasurement.isSelected());
} else if (e.getSource().equals(choseCSVTableFormat)) {
selectTableFormat.setVisible(choseCSVTableFormat.isSelected());
selectTableFormat.revalidate();
selectTableFormat.repaint();
jDialog.revalidate();
jDialog.repaint();
jDialog.pack();
} else if (e.getSource().equals(okayButton)) {
if (e.getSource().equals(okayButton)) {
JFileChooser saveToFile = new JFileChooser();
saveToFile.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooserReturnValue = saveToFile.showDialog(this, "Save Results To File");
if (fileChooserReturnValue == JFileChooser.APPROVE_OPTION){
chosenFile = saveToFile.getSelectedFile();
resultSaveFile = saveToFile.getSelectedFile();
MainPanel.controlButtonsPanel.updateButtonsToMatchState();
continueWithProcess = true;
jDialog.dispose();
Expand All @@ -178,45 +117,6 @@ public boolean shouldContinueWithProcess() {
return continueWithProcess;
}

public static class DataReductionSubmission{
public final boolean normalizeMeasurementsBool;
public final ArrayList<Roi> arrayOfSimRois;
public final ArrayList<Roi> arrayOfLabRois;
public final ImagePlus labResults;
public final int numOfSimImages;
public final File fileToSaveResultsTo;

public final RangeOfImage experiementNormRange;
public final RangeOfImage simNormRange;

public final RangeOfImage experimentImageRange;
public final RangeOfImage simImageRange;
public final ArrayList<SelectMeasurements.AvailableMeasurements> selectedMeasurements;

public final boolean wideTable;

public DataReductionSubmission(boolean normalizeMeasurementsBool, ArrayList<Roi> arrayOfSimRois, ArrayList<Roi> arrayOfLabRois,
ImagePlus labResults, int simStartPointNorm, int simEndPointNorm, int imageStartPointNorm,
int imageEndPointNorm, int numOfSimImages, File fileToSaveResultsTo,
RangeOfImage simRange, ArrayList<SelectMeasurements.AvailableMeasurements> selectedMeasurements, boolean wideTable){
this.normalizeMeasurementsBool = normalizeMeasurementsBool;
this.arrayOfLabRois = arrayOfLabRois;
this.arrayOfSimRois = arrayOfSimRois;
this.labResults = labResults;
this.numOfSimImages = numOfSimImages;
this.fileToSaveResultsTo = fileToSaveResultsTo;

this.experiementNormRange = new RangeOfImage(imageStartPointNorm, imageEndPointNorm);
this.simNormRange = new RangeOfImage(simStartPointNorm, simEndPointNorm);

this.experimentImageRange = new RangeOfImage(1, labResults.getNFrames(),
1, labResults.getNSlices(), 1, labResults.getNChannels());
this.simImageRange = simRange;
this.selectedMeasurements = selectedMeasurements;
this.wideTable = wideTable;
}
}

public static void main(String[] args) {
DataReductionGUI dataReductionGUI = new DataReductionGUI(new ArrayList<>(), 0, 0, 0);
}
Expand Down
Loading