use of net.sf.mzmine.parameters.parametertypes.selectors.ScanSelection in project mzmine2 by mzmine.
the class TICVisualizerModule method runModule.
@Override
@Nonnull
public ExitCode runModule(@Nonnull MZmineProject project, @Nonnull ParameterSet parameters, @Nonnull Collection<Task> tasks) {
final RawDataFile[] dataFiles = parameters.getParameter(TICVisualizerParameters.DATA_FILES).getValue().getMatchingRawDataFiles();
final Range<Double> mzRange = parameters.getParameter(TICVisualizerParameters.MZ_RANGE).getValue();
final ScanSelection scanSelection = parameters.getParameter(TICVisualizerParameters.scanSelection).getValue();
final TICPlotType plotType = parameters.getParameter(TICVisualizerParameters.PLOT_TYPE).getValue();
final Feature[] selectionPeaks = parameters.getParameter(TICVisualizerParameters.PEAKS).getValue();
// Add the window to the desktop only if we actually have any raw
// data to show.
boolean weHaveData = false;
for (RawDataFile dataFile : dataFiles) {
Scan[] selectedScans = scanSelection.getMatchingScans(dataFile);
if (selectedScans.length > 0)
weHaveData = true;
}
if (weHaveData) {
TICVisualizerWindow window = new TICVisualizerWindow(dataFiles, plotType, scanSelection, mzRange, selectionPeaks, ((TICVisualizerParameters) parameters).getPeakLabelMap());
window.setVisible(true);
} else {
MZmineCore.getDesktop().displayErrorMessage(MZmineCore.getDesktop().getMainWindow(), "No scans found");
}
return ExitCode.OK;
}
use of net.sf.mzmine.parameters.parametertypes.selectors.ScanSelection in project mzmine2 by mzmine.
the class PeakSummaryComponent method actionPerformed.
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("SHOW")) {
String visualizerType = (String) comboShow.getSelectedItem();
int[] indexesRow = peaksInfoList.getSelectedRows();
Feature[] selectedPeaks = new Feature[indexesRow.length];
RawDataFile[] dataFiles = new RawDataFile[indexesRow.length];
Range<Double> rtRange = null, mzRange = null;
for (int i = 0; i < indexesRow.length; i++) {
selectedPeaks[i] = listElementModel.getElementAt(indexesRow[i]);
dataFiles[i] = selectedPeaks[i].getDataFile();
if ((rtRange == null) || (mzRange == null)) {
rtRange = dataFiles[i].getDataRTRange(1);
mzRange = selectedPeaks[i].getRawDataPointsMZRange();
} else {
rtRange = rtRange.span(dataFiles[i].getDataRTRange(1));
mzRange = mzRange.span(selectedPeaks[i].getRawDataPointsMZRange());
}
}
if (dataFiles.length == 0) {
return;
}
if (visualizerType.equals("Chromatogram")) {
// Label best peak with preferred identity.
final Feature bestPeak = row.getBestPeak();
final PeakIdentity peakIdentity = row.getPreferredPeakIdentity();
final Map<Feature, String> labelMap = new HashMap<Feature, String>(1);
if (bestPeak != null && peakIdentity != null) {
labelMap.put(bestPeak, peakIdentity.getName());
}
ScanSelection scanSelection = new ScanSelection(rtRange, 1);
TICVisualizerModule.showNewTICVisualizerWindow(dataFiles, selectedPeaks, labelMap, scanSelection, TICPlotType.BASEPEAK, mzRange);
return;
} else if (visualizerType.equals("Mass spectrum")) {
for (int i = 0; i < selectedPeaks.length; ++i) {
final Feature peak = selectedPeaks[i];
final IsotopePattern ip = peak.getIsotopePattern();
if (ip != null) {
// ------------------------------
// Multiply isotope pattern by -1
// ------------------------------
DataPoint[] newDataPoints = Arrays.stream(ip.getDataPoints()).map(p -> new SimpleDataPoint(p.getMZ(), -p.getIntensity())).toArray(DataPoint[]::new);
// ---------------------------
// Construct identity spectrum
// ---------------------------
List<DataPoint> identityDataPoints = new ArrayList<>();
PeakIdentity identity = row.getPreferredPeakIdentity();
if (identity != null) {
String spectrum = identity.getPropertyValue(PeakIdentity.PROPERTY_SPECTRUM);
if (spectrum != null && spectrum.length() > 2) {
spectrum = spectrum.substring(1, spectrum.length() - 1);
for (String strPair : spectrum.split(",")) {
String[] pair = strPair.split("=", 2);
if (pair.length == 2)
identityDataPoints.add(new SimpleDataPoint(Double.parseDouble(pair[0]), Double.parseDouble(pair[1])));
}
}
}
if (// Plot raw spectrum and isotope pattern
identityDataPoints.isEmpty())
SpectraVisualizerModule.showNewSpectrumWindow(dataFiles[i], peak.getRepresentativeScanNumber(), null, null, null, new SimpleIsotopePattern(newDataPoints, ip.getStatus(), ip.getDescription()));
else
// Plot raw spectrum, isotope pattern, and identity spectrum
SpectraVisualizerModule.showNewSpectrumWindow(dataFiles[i], peak.getRepresentativeScanNumber(), null, new SimpleIsotopePattern(identityDataPoints.toArray(new DataPoint[identityDataPoints.size()]), IsotopePatternStatus.DETECTED, identity.getPropertyValue(PeakIdentity.PROPERTY_FORMULA)), null, new SimpleIsotopePattern(newDataPoints, ip.getStatus(), ip.getDescription()));
} else
// Plot raw spectrum without isotope pattern
SpectraVisualizerModule.showNewSpectrumWindow(dataFiles[i], peak.getRepresentativeScanNumber());
}
} else if (visualizerType.equals("Peak in 2D")) {
for (int i = 0; i < selectedPeaks.length; i++) {
Range<Double> peakRTRange = selectedPeaks[i].getRawDataPointsRTRange();
Range<Double> peakMZRange = selectedPeaks[i].getRawDataPointsMZRange();
final double rtLen = peakRTRange.upperEndpoint() - peakRTRange.lowerEndpoint();
Range<Double> localRTRange = Range.closed(Math.max(0, peakRTRange.lowerEndpoint() - rtLen), peakRTRange.upperEndpoint() + rtLen);
final double mzLen = peakMZRange.upperEndpoint() - peakMZRange.lowerEndpoint();
Range<Double> localMZRange = Range.closed(Math.max(0, peakMZRange.lowerEndpoint() - mzLen), peakMZRange.upperEndpoint() + mzLen);
TwoDVisualizerModule.show2DVisualizerSetupDialog(dataFiles[i], localMZRange, localRTRange);
}
} else if (visualizerType.equals("Peak in 3D")) {
for (int i = 0; i < selectedPeaks.length; i++) {
Range<Double> peakRTRange = selectedPeaks[i].getRawDataPointsRTRange();
Range<Double> peakMZRange = selectedPeaks[i].getRawDataPointsMZRange();
final double rtLen = peakRTRange.upperEndpoint() - peakRTRange.lowerEndpoint();
Range<Double> localRTRange = Range.closed(Math.max(0, peakRTRange.lowerEndpoint() - rtLen), peakRTRange.upperEndpoint() + rtLen);
final double mzLen = peakMZRange.upperEndpoint() - peakMZRange.lowerEndpoint();
Range<Double> localMZRange = Range.closed(Math.max(0, peakMZRange.lowerEndpoint() - mzLen), peakMZRange.upperEndpoint() + mzLen);
Fx3DVisualizerModule.setupNew3DVisualizer(dataFiles[i], localMZRange, localRTRange);
}
} else if (visualizerType.equals("MS/MS")) {
for (int i = 0; i < selectedPeaks.length; i++) {
int scanNumber = selectedPeaks[i].getMostIntenseFragmentScanNumber();
if (scanNumber > 0) {
SpectraVisualizerModule.showNewSpectrumWindow(dataFiles[i], scanNumber);
} else {
JFrame frame = (JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, this);
MZmineCore.getDesktop().displayMessage(frame, "There is no fragment for the mass " + MZmineCore.getConfiguration().getMZFormat().format(selectedPeaks[i].getMZ()) + "m/z in the current raw data.");
return;
}
}
} else if (visualizerType.equals("Isotope pattern")) {
for (int i = 0; i < selectedPeaks.length; i++) {
IsotopePattern ip = selectedPeaks[i].getIsotopePattern();
if (ip == null) {
return;
}
SpectraVisualizerModule.showNewSpectrumWindow(dataFiles[i], selectedPeaks[i].getMostIntenseFragmentScanNumber(), ip);
}
}
return;
}
if (command.equals("CHANGE")) {
int indexRow = peaksInfoList.getSelectedRow();
if (indexRow == -1) {
return;
}
Feature selectedPeak = listElementModel.getElementAt(indexRow);
ManualPeakPickerModule.runManualDetection(selectedPeak.getDataFile(), row, null, null);
return;
}
}
use of net.sf.mzmine.parameters.parametertypes.selectors.ScanSelection in project mzmine2 by mzmine.
the class FeatureOverviewWindow method addTicPlot.
private JSplitPane addTicPlot(PeakListRow row) {
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
// labels for TIC visualizer
Map<Feature, String> labelsMap = new HashMap<Feature, String>(0);
// scan selection
ScanSelection scanSelection = new ScanSelection(rawFiles[0].getDataRTRange(1), 1);
// mz range
Range<Double> mzRange = null;
mzRange = feature.getRawDataPointsMZRange();
// optimize output by extending the range
double upper = mzRange.upperEndpoint();
double lower = mzRange.lowerEndpoint();
double fiveppm = (upper * 5E-6);
mzRange = Range.closed(lower - fiveppm, upper + fiveppm);
// labels
labelsMap.put(feature, feature.toString());
TICVisualizerWindow window = new // raw
TICVisualizerWindow(// raw
rawFiles, // plot type
TICPlotType.BASEPEAK, // scan selection
scanSelection, // mz range
mzRange, // selected features
row.getPeaks(), // labels
labelsMap);
pane.add(window.getTICPlot());
pane.add(window.getToolBar());
pane.setResizeWeight(1);
pane.setDividerSize(1);
pane.setBorder(BorderFactory.createLineBorder(Color.black));
return pane;
}
use of net.sf.mzmine.parameters.parametertypes.selectors.ScanSelection in project mzmine2 by mzmine.
the class PeakListTablePopupMenu method actionPerformed.
@Override
public void actionPerformed(final ActionEvent e) {
final Object src = e.getSource();
if (deleteRowsItem.equals(src)) {
final int[] rowsToDelete = table.getSelectedRows();
final int[] unsortedIndexes = new int[rowsToDelete.length];
for (int i = rowsToDelete.length - 1; i >= 0; i--) {
unsortedIndexes[i] = table.convertRowIndexToModel(rowsToDelete[i]);
}
// sort row indexes and start removing from the last
Arrays.sort(unsortedIndexes);
// delete the rows starting from last
for (int i = unsortedIndexes.length - 1; i >= 0; i--) {
peakList.removeRow(unsortedIndexes[i]);
}
// Notify the GUI that peaklist contents have changed
updateTableGUI();
}
if (plotRowsItem.equals(src)) {
final int[] selectedTableRows = table.getSelectedRows();
final PeakListRow[] selectedRows = new PeakListRow[selectedTableRows.length];
for (int i = 0; i < selectedTableRows.length; i++) {
selectedRows[i] = getPeakListRow(table.convertRowIndexToModel(selectedTableRows[i]));
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
IntensityPlotModule.showIntensityPlot(MZmineCore.getProjectManager().getCurrentProject(), peakList, selectedRows);
}
});
}
if (showXICItem.equals(src) && allClickedPeakListRows.length != 0) {
// Map peaks to their identity labels.
final Map<Feature, String> labelsMap = new HashMap<Feature, String>(allClickedPeakListRows.length);
final RawDataFile selectedDataFile = clickedDataFile == null ? allClickedPeakListRows[0].getBestPeak().getDataFile() : clickedDataFile;
Range<Double> mzRange = null;
final List<Feature> selectedPeaks = new ArrayList<Feature>(allClickedPeakListRows.length);
for (final PeakListRow row : allClickedPeakListRows) {
for (final Feature peak : row.getPeaks()) {
if (mzRange == null) {
mzRange = peak.getRawDataPointsMZRange();
double upper = mzRange.upperEndpoint();
double lower = mzRange.lowerEndpoint();
if ((upper - lower) < 0.000001) {
// Workaround to make ultra narrow mzRanges (e.g. from imported mzTab peaklist),
// a more reasonable default for a HRAM instrument (~5ppm)
double fiveppm = (upper * 5E-6);
mzRange = Range.closed(lower - fiveppm, upper + fiveppm);
}
} else {
mzRange = mzRange.span(peak.getRawDataPointsMZRange());
}
}
final Feature filePeak = row.getPeak(selectedDataFile);
if (filePeak != null) {
selectedPeaks.add(filePeak);
// Label the peak with the row's preferred identity.
final PeakIdentity identity = row.getPreferredPeakIdentity();
if (identity != null) {
labelsMap.put(filePeak, identity.getName());
}
}
}
ScanSelection scanSelection = new ScanSelection(selectedDataFile.getDataRTRange(1), 1);
TICVisualizerModule.showNewTICVisualizerWindow(new RawDataFile[] { selectedDataFile }, selectedPeaks.toArray(new Feature[selectedPeaks.size()]), labelsMap, scanSelection, TICPlotType.BASEPEAK, mzRange);
}
if (showXICSetupItem.equals(src) && allClickedPeakListRows.length != 0) {
// Map peaks to their identity labels.
final Map<Feature, String> labelsMap = new HashMap<Feature, String>(allClickedPeakListRows.length);
final RawDataFile[] selectedDataFiles = clickedDataFile == null ? peakList.getRawDataFiles() : new RawDataFile[] { clickedDataFile };
Range<Double> mzRange = null;
final ArrayList<Feature> allClickedPeaks = new ArrayList<Feature>(allClickedPeakListRows.length);
final ArrayList<Feature> selectedClickedPeaks = new ArrayList<Feature>(allClickedPeakListRows.length);
for (final PeakListRow row : allClickedPeakListRows) {
// Label the peak with the row's preferred identity.
final PeakIdentity identity = row.getPreferredPeakIdentity();
for (final Feature peak : row.getPeaks()) {
allClickedPeaks.add(peak);
if (peak.getDataFile() == clickedDataFile) {
selectedClickedPeaks.add(peak);
}
if (mzRange == null) {
mzRange = peak.getRawDataPointsMZRange();
} else {
mzRange = mzRange.span(peak.getRawDataPointsMZRange());
}
if (identity != null) {
labelsMap.put(peak, identity.getName());
}
}
}
ScanSelection scanSelection = new ScanSelection(selectedDataFiles[0].getDataRTRange(1), 1);
TICVisualizerModule.setupNewTICVisualizer(MZmineCore.getProjectManager().getCurrentProject().getDataFiles(), selectedDataFiles, allClickedPeaks.toArray(new Feature[allClickedPeaks.size()]), selectedClickedPeaks.toArray(new Feature[selectedClickedPeaks.size()]), labelsMap, scanSelection, mzRange);
}
if (show2DItem.equals(src)) {
final Feature showPeak = getSelectedPeak();
if (showPeak != null) {
TwoDVisualizerModule.show2DVisualizerSetupDialog(showPeak.getDataFile(), getPeakMZRange(showPeak), getPeakRTRange(showPeak));
}
}
if (show3DItem.equals(src)) {
final Feature showPeak = getSelectedPeak();
if (showPeak != null) {
Fx3DVisualizerModule.setupNew3DVisualizer(showPeak.getDataFile(), getPeakMZRange(showPeak), getPeakRTRange(showPeak), showPeak);
}
}
if (manuallyDefineItem.equals(src)) {
// ManualPeakPickerModule.runManualDetection(clickedDataFile, clickedPeakListRow, peakList,
// table);
XICManualPickerModule.runManualDetection(clickedDataFile, clickedPeakListRow, peakList, table);
}
if (showSpectrumItem.equals(src)) {
final Feature showPeak = getSelectedPeak();
if (showPeak != null) {
SpectraVisualizerModule.showNewSpectrumWindow(showPeak.getDataFile(), showPeak.getRepresentativeScanNumber(), showPeak);
}
}
if (openCompoundIdUrl.equals(src)) {
if (clickedPeakListRow != null && clickedPeakListRow.getPreferredPeakIdentity() != null) {
String url = clickedPeakListRow.getPreferredPeakIdentity().getPropertyValue(PeakIdentity.PROPERTY_URL);
if (url != null && !url.isEmpty() && Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(new URI(url));
} catch (IOException | URISyntaxException e1) {
}
}
}
}
if (showMSMSItem.equals(src)) {
if (allClickedPeakListRows != null && allClickedPeakListRows.length > 1) {
// show multi msms window of multiple rows
MultiMSMSWindow multi = new MultiMSMSWindow();
multi.setData(allClickedPeakListRows, peakList.getRawDataFiles(), clickedDataFile, true, SortingProperty.MZ, SortingDirection.Ascending);
multi.setVisible(true);
} else {
Feature showPeak = getSelectedPeakForMSMS();
if (showPeak != null) {
final int scanNumber = showPeak.getMostIntenseFragmentScanNumber();
if (scanNumber > 0) {
SpectraVisualizerModule.showNewSpectrumWindow(showPeak.getDataFile(), scanNumber);
} else {
MZmineCore.getDesktop().displayMessage(window, "There is no fragment for " + MZmineCore.getConfiguration().getMZFormat().format(showPeak.getMZ()) + " m/z in the current raw data.");
}
}
}
}
// mirror of the two best fragment scans
if (showMSMSMirrorItem.equals(src)) {
if (allClickedPeakListRows != null && allClickedPeakListRows.length == 2) {
PeakListRow a = allClickedPeakListRows[0];
PeakListRow b = allClickedPeakListRows[1];
Scan scan = a.getBestFragmentation();
Scan mirror = b.getBestFragmentation();
if (scan != null && mirror != null) {
// show mirror msms window of two rows
MirrorScanWindow mirrorWindow = new MirrorScanWindow();
mirrorWindow.setScans(scan, mirror);
mirrorWindow.setVisible(true);
}
}
}
// show spectral db matches
if (showSpectralDBResults.equals(src)) {
List<SpectralDBPeakIdentity> spectralID = Arrays.stream(clickedPeakListRow.getPeakIdentities()).filter(pi -> pi instanceof SpectralDBPeakIdentity).map(pi -> ((SpectralDBPeakIdentity) pi)).collect(Collectors.toList());
if (!spectralID.isEmpty()) {
SpectraIdentificationResultsWindow window = new SpectraIdentificationResultsWindow();
window.addMatches(spectralID);
window.setTitle("Matched " + spectralID.size() + " compounds for feature list row" + clickedPeakListRow.getID());
window.setVisible(true);
}
}
if (showAllMSMSItem.equals(src)) {
final Feature showPeak = getSelectedPeakForMSMS();
RawDataFile raw = clickedPeakListRow.getBestFragmentation().getDataFile();
if (showPeak != null && showPeak.getMostIntenseFragmentScanNumber() != 0)
raw = showPeak.getDataFile();
if (clickedPeakListRow.getBestFragmentation() != null) {
MultiSpectraVisualizerWindow multiSpectraWindow = new MultiSpectraVisualizerWindow(clickedPeakListRow, raw);
multiSpectraWindow.setVisible(true);
} else {
MZmineCore.getDesktop().displayMessage(window, "There is no fragment for " + MZmineCore.getConfiguration().getMZFormat().format(showPeak.getMZ()) + " m/z in the current raw data.");
}
}
if (showIsotopePatternItem.equals(src)) {
final Feature showPeak = getSelectedPeak();
if (showPeak != null && showPeak.getIsotopePattern() != null) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SpectraVisualizerModule.showNewSpectrumWindow(showPeak.getDataFile(), showPeak.getRepresentativeScanNumber(), showPeak.getIsotopePattern());
}
});
}
}
if (formulaItem != null && formulaItem.equals(src)) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
FormulaPredictionModule.showSingleRowIdentificationDialog(clickedPeakListRow);
}
});
}
// peak.
if (siriusItem != null && siriusItem.equals(src)) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SiriusProcessingModule.showSingleRowIdentificationDialog(clickedPeakListRow);
}
});
}
if (onlineDbSearchItem != null && onlineDbSearchItem.equals(src)) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
OnlineDBSearchModule.showSingleRowIdentificationDialog(clickedPeakListRow);
}
});
}
if (spectralDbSearchItem != null && spectralDbSearchItem.equals(src)) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
LocalSpectralDBSearchModule.showSelectedRowsIdentificationDialog(allClickedPeakListRows, table);
}
});
}
if (nistSearchItem != null && nistSearchItem.equals(src)) {
NistMsSearchModule.singleRowSearch(peakList, clickedPeakListRow);
}
if (addNewRowItem.equals(src)) {
// find maximum ID and add 1
int newID = 1;
for (final PeakListRow row : peakList.getRows()) {
if (row.getID() >= newID) {
newID = row.getID() + 1;
}
}
// create a new row
final PeakListRow newRow = new SimplePeakListRow(newID);
ManualPeakPickerModule.runManualDetection(peakList.getRawDataFiles(), newRow, peakList, table);
}
if (showPeakRowSummaryItem.equals(src)) {
PeakSummaryVisualizerModule.showNewPeakSummaryWindow(clickedPeakListRow);
}
if (exportIsotopesItem.equals(src)) {
IsotopePatternExportModule.exportIsotopePattern(clickedPeakListRow);
}
if (exportToSirius.equals(src)) {
// export all selected rows
SiriusExportModule.exportSingleRows(allClickedPeakListRows);
}
if (exportMSMSLibrary.equals(src)) {
// open window with all selected rows
MSMSLibrarySubmissionWindow libraryWindow = new MSMSLibrarySubmissionWindow();
libraryWindow.setData(allClickedPeakListRows, SortingProperty.MZ, SortingDirection.Ascending, true);
libraryWindow.setVisible(true);
}
if (exportMS1Library.equals(src)) {
// open window with all selected rows
MSMSLibrarySubmissionWindow libraryWindow = new MSMSLibrarySubmissionWindow();
libraryWindow.setData(allClickedPeakListRows, SortingProperty.MZ, SortingDirection.Ascending, false);
libraryWindow.setVisible(true);
}
if (exportMSMSItem.equals(src)) {
MSMSExportModule.exportMSMS(clickedPeakListRow);
}
if (clearIdsItem.equals(src)) {
// Delete identities of selected rows.
for (final PeakListRow row : allClickedPeakListRows) {
// Selected row index.
for (final PeakIdentity id : row.getPeakIdentities()) {
// Remove id.
row.removePeakIdentity(id);
}
}
// Update table GUI.
updateTableGUI();
}
if (copyIdsItem.equals(src) && allClickedPeakListRows.length > 0) {
final PeakIdentity id = allClickedPeakListRows[0].getPreferredPeakIdentity();
if (id != null) {
copiedId = (PeakIdentity) id.clone();
}
}
if (pasteIdsItem.equals(src) && copiedId != null) {
// Paste identity into selected rows.
for (final PeakListRow row : allClickedPeakListRows) {
row.setPreferredPeakIdentity((PeakIdentity) copiedId.clone());
}
// Update table GUI.
updateTableGUI();
}
}
Aggregations