use of net.sf.mzmine.modules.visualization.spectra.multimsms.pseudospectra.PseudoSpectraRenderer in project mzmine2 by mzmine.
the class MirrorScanWindow method setScans.
/**
* Based on a data base match to a spectral library
*
* @param row
* @param db
*/
public void setScans(SpectralDBPeakIdentity db) {
Scan scan = db.getQueryScan();
if (scan == null)
return;
// get highest data intensity to calc relative intensity
double mostIntenseQuery = Arrays.stream(db.getQueryDataPoints(DataPointsTag.ORIGINAL)).mapToDouble(DataPoint::getIntensity).max().orElse(0d);
double mostIntenseDB = Arrays.stream(db.getLibraryDataPoints(DataPointsTag.ORIGINAL)).mapToDouble(DataPoint::getIntensity).max().orElse(0d);
if (mostIntenseDB == 0d)
logger.warning("This data set has no original data points in the library spectrum (development error)");
if (mostIntenseQuery == 0d)
logger.warning("This data set has no original data points in the query spectrum (development error)");
if (mostIntenseDB == 0d || mostIntenseQuery == 0d)
return;
// get colors for vision
Vision vision = MZmineCore.getConfiguration().getColorVision();
// colors for the different DataPointsTags:
final Color[] colors = new Color[] { // black = filtered
Color.black, // unaligned
ColorPalettes.getNegativeColor(vision), // aligned
ColorPalettes.getPositiveColor(vision) };
// scan a
double precursorMZA = scan.getPrecursorMZ();
double rtA = scan.getRetentionTime();
Double precursorMZB = db.getEntry().getPrecursorMZ();
Double rtB = (Double) db.getEntry().getField(DBEntryField.RT).orElse(0d);
contentPane.removeAll();
// create without data
mirrorSpecrumPlot = SpectrumChartFactory.createMirrorChartPanel("Query: " + scan.getScanDefinition(), precursorMZA, rtA, null, "Library: " + db.getName(), precursorMZB == null ? 0 : precursorMZB, rtB, null, false, true);
mirrorSpecrumPlot.setMaximumDrawWidth(4200);
mirrorSpecrumPlot.setMaximumDrawHeight(2500);
// add data
DataPoint[][] query = new DataPoint[tags.length][];
DataPoint[][] library = new DataPoint[tags.length][];
for (int i = 0; i < tags.length; i++) {
DataPointsTag tag = tags[i];
query[i] = db.getQueryDataPoints(tag);
library[i] = db.getLibraryDataPoints(tag);
}
// add datasets and renderer
// set up renderer
CombinedDomainXYPlot domainPlot = (CombinedDomainXYPlot) mirrorSpecrumPlot.getChart().getXYPlot();
NumberAxis axis = (NumberAxis) domainPlot.getDomainAxis();
axis.setLabel("m/z");
XYPlot queryPlot = (XYPlot) domainPlot.getSubplots().get(0);
XYPlot libraryPlot = (XYPlot) domainPlot.getSubplots().get(1);
// add all datapoints to a dataset that are not present in subsequent masslist
for (int i = 0; i < tags.length; i++) {
DataPointsTag tag = tags[i];
PseudoSpectrumDataSet qdata = new PseudoSpectrumDataSet(true, "Query " + tag.toRemainderString());
for (DataPoint dp : query[i]) {
// not contained in other
if (notInSubsequentMassList(dp, query, i) && mostIntenseQuery > 0)
qdata.addDP(dp.getMZ(), dp.getIntensity() / mostIntenseQuery * 100d, null);
}
PseudoSpectrumDataSet ldata = new PseudoSpectrumDataSet(true, "Library " + tag.toRemainderString());
for (DataPoint dp : library[i]) {
if (notInSubsequentMassList(dp, library, i) && mostIntenseDB > 0)
ldata.addDP(dp.getMZ(), dp.getIntensity() / mostIntenseDB * 100d, null);
}
Color color = colors[i];
PseudoSpectraRenderer renderer = new PseudoSpectraRenderer(color, false);
PseudoSpectraRenderer renderer2 = new PseudoSpectraRenderer(color, false);
queryPlot.setDataset(i, qdata);
queryPlot.setRenderer(i, renderer);
libraryPlot.setDataset(i, ldata);
libraryPlot.setRenderer(i, renderer2);
}
// add legend
LegendItem item;
LegendItemCollection collection = new LegendItemCollection();
for (int i = 0; i < tags.length; i++) {
item = new LegendItem(tags[i].toRemainderString(), colors[i]);
collection.add(item);
}
mirrorSpecrumPlot.getChart().removeLegend();
LegendTitle legend = new LegendTitle(() -> collection);
legend.setPosition(RectangleEdge.BOTTOM);
mirrorSpecrumPlot.getChart().addLegend(legend);
// set y axis title
queryPlot.getRangeAxis().setLabel("rel. intensity [%] (query)");
libraryPlot.getRangeAxis().setLabel("rel. intensity [%] (library)");
contentPane.add(mirrorSpecrumPlot, BorderLayout.CENTER);
contentPane.revalidate();
contentPane.repaint();
}
use of net.sf.mzmine.modules.visualization.spectra.multimsms.pseudospectra.PseudoSpectraRenderer in project mzmine2 by mzmine.
the class SpectrumChartFactory method createMirrorChartPanel.
public static EChartPanel createMirrorChartPanel(String labelA, double precursorMZA, double rtA, DataPoint[] dpsA, String labelB, double precursorMZB, double rtB, DataPoint[] dpsB, boolean showTitle, boolean showLegend) {
PseudoSpectrumDataSet data = dpsA == null ? null : createMSMSDataSet(precursorMZA, rtA, dpsA, labelA);
PseudoSpectrumDataSet dataMirror = dpsB == null ? null : createMSMSDataSet(precursorMZB, rtB, dpsB, labelB);
NumberFormat mzForm = MZmineCore.getConfiguration().getMZFormat();
NumberFormat intensityFormat = new DecimalFormat("0.#");
// set the X axis (retention time) properties
NumberAxis xAxis = new NumberAxis("m/z");
xAxis.setNumberFormatOverride(mzForm);
xAxis.setUpperMargin(0.08);
xAxis.setLowerMargin(0.00);
xAxis.setTickLabelInsets(new RectangleInsets(0, 0, 20, 20));
xAxis.setAutoRangeIncludesZero(false);
xAxis.setMinorTickCount(5);
PseudoSpectraRenderer renderer1 = new PseudoSpectraRenderer(Color.BLACK, false);
PseudoSpectraRenderer renderer2 = new PseudoSpectraRenderer(Color.BLACK, false);
// create subplot 1...
final NumberAxis rangeAxis1 = new NumberAxis("rel. intensity [%]");
final XYPlot subplot1 = new XYPlot(data, null, rangeAxis1, renderer1);
subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
rangeAxis1.setNumberFormatOverride(intensityFormat);
rangeAxis1.setAutoRangeIncludesZero(true);
rangeAxis1.setAutoRangeStickyZero(true);
// create subplot 2...
final NumberAxis rangeAxis2 = new NumberAxis("rel. intensity [%]");
rangeAxis2.setNumberFormatOverride(intensityFormat);
rangeAxis2.setAutoRangeIncludesZero(true);
rangeAxis2.setAutoRangeStickyZero(true);
rangeAxis2.setInverted(true);
final XYPlot subplot2 = new XYPlot(dataMirror, null, rangeAxis2, renderer2);
subplot2.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
// parent plot...
final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new NumberAxis("Domain"));
plot.setGap(0);
// add the subplots...
plot.add(subplot1, 1);
plot.add(subplot2, 1);
plot.setOrientation(PlotOrientation.VERTICAL);
// set the plot properties
plot.setBackgroundPaint(Color.white);
plot.setAxisOffset(RectangleInsets.ZERO_INSETS);
// set rendering order
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
// set crosshair (selection) properties
plot.setDomainCrosshairVisible(false);
plot.setRangeCrosshairVisible(false);
// return a new chart containing the overlaid plot...
JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
chart.setBackgroundPaint(Color.white);
chart.getTitle().setVisible(false);
// chart.getXYPlot().setRangeZeroBaselineVisible(true);
chart.getTitle().setVisible(showTitle);
chart.getLegend().setVisible(showLegend);
return new EChartPanel(chart);
}
use of net.sf.mzmine.modules.visualization.spectra.multimsms.pseudospectra.PseudoSpectraRenderer in project mzmine2 by mzmine.
the class SpectrumChartFactory method createChart.
public static JFreeChart createChart(PseudoSpectrumDataSet dataset, boolean showTitle, boolean showLegend, double rt, double precursorMZ) {
//
if (dataset == null)
return null;
//
NumberFormat mzForm = MZmineCore.getConfiguration().getMZFormat();
NumberFormat rtForm = MZmineCore.getConfiguration().getRTFormat();
NumberFormat intensityFormat = MZmineCore.getConfiguration().getIntensityFormat();
String title = "";
if (precursorMZ == 0)
title = "RT=" + mzForm.format(precursorMZ);
else
title = MessageFormat.format("MSMS for m/z={0} RT={1}", mzForm.format(precursorMZ), rtForm.format(rt));
JFreeChart chart = // title
ChartFactory.createXYLineChart(// title
title, // x-axis label
"m/z", // y-axis label
"Intensity", // data set
dataset, // orientation
PlotOrientation.VERTICAL, // isotopeFlag, // create legend?
true, // generate tooltips?
true, // generate URLs?
false);
chart.setBackgroundPaint(Color.white);
chart.getTitle().setVisible(false);
// set the plot properties
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.white);
plot.setAxisOffset(RectangleInsets.ZERO_INSETS);
// set rendering order
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
// set crosshair (selection) properties
plot.setDomainCrosshairVisible(false);
plot.setRangeCrosshairVisible(false);
// set the X axis (retention time) properties
NumberAxis xAxis = (NumberAxis) plot.getDomainAxis();
xAxis.setNumberFormatOverride(mzForm);
xAxis.setUpperMargin(0.08);
xAxis.setLowerMargin(0.00);
xAxis.setTickLabelInsets(new RectangleInsets(0, 0, 20, 20));
xAxis.setAutoRangeIncludesZero(true);
xAxis.setMinorTickCount(5);
// set the Y axis (intensity) properties
NumberAxis yAxis = (NumberAxis) plot.getRangeAxis();
yAxis.setNumberFormatOverride(intensityFormat);
yAxis.setUpperMargin(0.20);
PseudoSpectraRenderer renderer = new PseudoSpectraRenderer(Color.BLACK, false);
plot.setRenderer(0, renderer);
plot.setRenderer(1, renderer);
plot.setRenderer(2, renderer);
renderer.setSeriesVisibleInLegend(1, false);
renderer.setSeriesPaint(2, Color.ORANGE);
//
chart.getTitle().setVisible(showTitle);
chart.getLegend().setVisible(showLegend);
//
if (precursorMZ != 0)
addPrecursorMarker(chart, precursorMZ);
return chart;
}
Aggregations