/*
* Copyright 2006-2015 The MZmine 3 Development Team
*
* This file is part of MZmine 3.
*
* MZmine 3 is free software; you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* MZmine 3 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with MZmine 3; if not,
* write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
package io.github.mzmine.modules.plots.msspectrum;
import java.net.URL;
import java.util.Collection;
import java.util.List;
import javax.annotation.Nonnull;
import com.google.common.base.Preconditions;
import com.google.common.collect.Range;
import io.github.msdk.datamodel.msspectra.MsSpectrum;
import io.github.msdk.datamodel.rawdata.MsScan;
import io.github.msdk.datamodel.rawdata.RawDataFile;
import io.github.mzmine.gui.MZmineGUI;
import io.github.mzmine.modules.MZmineRunnableModule;
import io.github.mzmine.parameters.ParameterSet;
import io.github.mzmine.parameters.parametertypes.selectors.RawDataFilesSelection;
import io.github.mzmine.parameters.parametertypes.selectors.ScanSelection;
import io.github.mzmine.project.MZmineProject;
import io.github.mzmine.util.MsScanUtils;
import javafx.application.Platform;
import javafx.concurrent.Task;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
/**
* MS spectrum plot
*/
public class MsSpectrumPlotModule implements MZmineRunnableModule {
private static final String PLOT_FXML = "MsSpectrumPlotWindow.fxml";
private static final @Nonnull String MODULE_NAME = "MS spectrum plot";
private static final @Nonnull String MODULE_DESCRIPTION = "MS spectrum plot";
@Override
public @Nonnull String getName() {
return MODULE_NAME;
}
@Override
public @Nonnull String getDescription() {
return MODULE_DESCRIPTION;
}
@Override
public void runModule(@Nonnull MZmineProject project, @Nonnull ParameterSet parameters,
@Nonnull Collection<Task<?>> tasks) {
final RawDataFilesSelection fileSelection =
parameters.getParameter(MsSpectrumPlotParameters.inputFiles).getValue();
final Integer scanNumber =
parameters.getParameter(MsSpectrumPlotParameters.scanNumber).getValue();
Preconditions.checkNotNull(fileSelection);
Preconditions.checkNotNull(scanNumber);
final ScanSelection scanSelection =
new ScanSelection(Range.singleton(scanNumber), null, null, null, null, null);
final List<RawDataFile> dataFiles = fileSelection.getMatchingRawDataFiles();
// Add the window to the desktop only if we actually have any raw
// data to show.
boolean weHaveData = false;
for (RawDataFile dataFile : dataFiles) {
if (!scanSelection.getMatchingScans(dataFile).isEmpty()) {
weHaveData = true;
break;
}
}
if (!weHaveData) {
MZmineGUI.displayMessage("Scan not found");
return;
}
try {
// Load the main window
URL mainFXML = this.getClass().getResource(PLOT_FXML);
FXMLLoader loader = new FXMLLoader(mainFXML);
Parent node = loader.load();
MZmineGUI.addWindow(node, "MS spectrum");
MsSpectrumPlotWindowController controller = loader.getController();
Platform.runLater(() -> {
for (RawDataFile dataFile : dataFiles) {
for (MsScan scan : scanSelection.getMatchingScans(dataFile)) {
String title = MsScanUtils.createSingleLineMsScanDescription(scan);
controller.addSpectrum(scan, title);
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public @Nonnull Class<? extends ParameterSet> getParameterSetClass() {
return MsSpectrumPlotParameters.class;
}
public static void showNewSpectrumWindow(@Nonnull MsScan scan) {
try {
URL mainFXML = MsSpectrumPlotModule.class.getResource(PLOT_FXML);
FXMLLoader loader = new FXMLLoader(mainFXML);
Parent node = loader.load();
String title = MsScanUtils.createSingleLineMsScanDescription(scan);
MZmineGUI.addWindow(node, title);
MsSpectrumPlotWindowController controller = loader.getController();
controller.addSpectrum(scan, title);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
public static void showNewSpectrumWindow(@Nonnull MsSpectrum spectrum, @Nonnull String name) {
try {
URL mainFXML = MsSpectrumPlotModule.class.getResource(PLOT_FXML);
FXMLLoader loader = new FXMLLoader(mainFXML);
Parent node = loader.load();
MZmineGUI.addWindow(node, name);
MsSpectrumPlotWindowController controller = loader.getController();
controller.addSpectrum(spectrum, name);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}