OpenMS
Plot2DCanvas.h
Go to the documentation of this file.
1 // Copyright (c) 2002-2023, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin
2 // SPDX-License-Identifier: BSD-3-Clause
3 //
4 // --------------------------------------------------------------------------
5 // $Maintainer: Timo Sachsenberg$
6 // $Authors: Marc Sturm $
7 // --------------------------------------------------------------------------
8 
9 #pragma once
10 
11 // OpenMS_GUI config
12 #include <OpenMS/VISUAL/OpenMS_GUIConfig.h>
13 
14 // OpenMS
18 
19 // QT
20 class QPainter;
21 class QMouseEvent;
22 class QAction;
23 class QMenu;
24 
25 namespace OpenMS
26 {
44  class OPENMS_GUI_DLLAPI Plot2DCanvas :
45  public PlotCanvas
46  {
47  Q_OBJECT
48 
49 public:
51  Plot2DCanvas() = delete;
52 
54  Plot2DCanvas(const Param& preferences, QWidget* parent = nullptr);
55 
57  ~Plot2DCanvas() override;
58 
59  // Docu in base class
60  void showCurrentLayerPreferences() override;
61 
64 
67 
69  void mergeIntoLayer(Size i, std::vector<PeptideIdentification>& peptides);
70 
73 
74 signals:
76  void showProjections(const LayerDataBase* source_layer);
80  void showSpectrumAsNew1D(int index);
81  void showChromatogramsAsNew1D(std::vector<int, std::allocator<int> > indices);
84 
85 public slots:
86  // Docu in base class
87  void activateLayer(Size layer_index) override;
88  // Docu in base class
89  void removeLayer(Size layer_index) override;
90  //docu in base class
91  void updateLayer(Size i) override;
92  // Docu in base class
93  void horizontalScrollBarChange(int value) override;
94  // Docu in base class
95  void verticalScrollBarChange(int value) override;
96 
99 
100 protected slots:
101 
104 
105 protected:
106  // Docu in base class
107  bool finishAdding_() override;
108 
110  bool collectFragmentScansInArea_(const RangeType& range, QAction* a, QMenu* msn_scans, QMenu* msn_meta);
111 
113  void drawCoordinates_(QPainter& painter, const PeakIndex& peak);
115  void drawDeltas_(QPainter& painter, const PeakIndex& start, const PeakIndex& end);
116 
119  void mousePressEvent(QMouseEvent* e) override;
120  void mouseReleaseEvent(QMouseEvent* e) override;
121  void mouseMoveEvent(QMouseEvent* e) override;
122  void paintEvent(QPaintEvent* e) override;
123  void contextMenuEvent(QContextMenuEvent* e) override;
124  void keyPressEvent(QKeyEvent* e) override;
125  void keyReleaseEvent(QKeyEvent* e) override;
126  void mouseDoubleClickEvent(QMouseEvent* e) override;
128 
129  // Docu in base class
130  void updateScrollbars_() override;
131 
132  // Docu in base class
133  void intensityModeChange_() override;
134  // Docu in base class
135  void recalculateSnapFactor_() override;
136 
142  Int precalculatedColorIndex_(float val, const MultiGradient& gradient, double snap_factor)
143  {
144  float gradientPos = val;
145  switch (intensity_mode_)
146  {
147  case IM_NONE:
148  gradientPos = val;
149  break;
150 
151  case IM_PERCENTAGE:
152  gradientPos = val * percentage_factor_;
153  break;
154 
155  case IM_SNAP:
156  gradientPos = val * snap_factor;
157  break;
158 
159  case IM_LOG:
160  gradientPos = std::log(val + 1);
161  break;
162  }
163  return gradient.precalculatedColorIndex(gradientPos);
164  }
165 
171  QColor heightColor_(float val, const MultiGradient& gradient, double snap_factor)
172  {
173  return gradient.precalculatedColorByIndex(precalculatedColorIndex_(val, gradient, snap_factor));
174  }
175 
187  double adaptPenScaling_(double ratio_data2pixel, double& pen_size) const;
188 
191 
193  void highlightPeak_(QPainter& p, const PeakIndex& peak);
194 
196  PeakIndex findNearestPeak_(const QPoint& pos);
197 
199  void paintIcon_(const QPoint& pos, const QRgb& color, const String& icon, Size s, QPainter& p) const;
200 
202  void translateVisibleArea_(double x_axis_rel, double y_axis_rel);
203 
212  QPoint dataToWidget_(double x, double y) const
213  {
214  QPoint point;
215  const auto& xy = visible_area_.getAreaXY();
216  point.setX(int((x - xy.minX()) / xy.width() * width()));
217  point.setY(int((xy.maxY() - y) / xy.height() * height()));
218  return point;
219  }
220 
221  QPoint dataToWidget_(const DPosition<2>& xy)
222  {
223  return dataToWidget_(xy.getX(), xy.getY());
224  }
225 
226  //docu in base class
227  void translateLeft_(Qt::KeyboardModifiers m) override;
228  //docu in base class
229  void translateRight_(Qt::KeyboardModifiers m) override;
230  //docu in base class
231  void translateForward_() override;
232  //docu in base class
233  void translateBackward_() override;
234 
236  void finishContextMenu_(QMenu* context_menu, QMenu* settings_menu);
237 
238  friend class Painter2DBase;
239  friend class Painter2DChrom;
240  friend class Painter2DConsensus;
241  friend class Painter2DIdent;
242  friend class Painter2DFeature;
243  friend class Painter2DIonMobility;
244  friend class Painter2DPeak;
245 
250 
253 
254  double pen_size_min_;
255  double pen_size_max_;
257  };
258 }
259 
CoordinateType getY() const
Name accessor for the second dimension. Only for DPosition<2>, for visualization.
Definition: DPosition.h:149
CoordinateType getX() const
Name accessor for the first dimension. Only for DPosition<2>, for visualization.
Definition: DPosition.h:142
Class that stores the data for one layer.
Definition: LayerDataBase.h:169
A gradient of multiple colors and arbitrary distances between colors.
Definition: MultiGradient.h:42
Int precalculatedColorIndex(double position) const
index of color in precalculated table by position in gradient
Definition: MultiGradient.h:110
QColor precalculatedColorByIndex(Int index) const
precalculated color by its index in the table
Definition: MultiGradient.h:121
A base class for painting all items from a data layer (as supported by class derived from here) onto ...
Definition: Painter2DBase.h:42
Painter2D for chromatograms.
Definition: Painter2DBase.h:131
Painter2D for ConsensusFeatures.
Definition: Painter2DBase.h:191
Painter2D for Features.
Definition: Painter2DBase.h:163
Painter2D for Identifications.
Definition: Painter2DBase.h:236
Painter2D for ion mobilograms.
Definition: Painter2DBase.h:147
Painter2D for spectra.
Definition: Painter2DBase.h:94
Management and storage of parameters / INI files.
Definition: Param.h:44
Canvas for 2D-visualization of peak map, feature map and consensus map data.
Definition: Plot2DCanvas.h:46
void translateForward_() override
Translation bound to the 'Up' key.
Plot2DCanvas()=delete
Default C'tor hidden.
double pen_size_max_
maximum number of pixels for one data point
Definition: Plot2DCanvas.h:255
void drawCoordinates_(QPainter &painter, const PeakIndex &peak)
Draws the coordinates (or coordinate deltas) to the widget's upper left corner.
void mergeIntoLayer(Size i, const ConsensusMapSharedPtrType &map)
Merges the consensus features in map into the features layer i.
void showSpectrumAsNew1D(int index)
Requests to display the spectrum with index index in 1D.
PeakIndex selected_peak_
the nearest peak/feature to the mouse cursor
Definition: Plot2DCanvas.h:247
double canvas_coverage_min_
minimum coverage of the canvas required; if lower, points are upscaled in size
Definition: Plot2DCanvas.h:256
bool finishAdding_() override
Method that is called when a new layer has been added.
void removeLayer(Size layer_index) override
void mousePressEvent(QMouseEvent *e) override
void horizontalScrollBarChange(int value) override
void toggleProjections()
Signal emitted when the projections are to be shown/hidden (e.g. via context menu)
void recalculateCurrentLayerDotGradient()
recalculates the dot gradient of the active layer
Plot2DCanvas(const Param &preferences, QWidget *parent=nullptr)
Constructor.
void mouseMoveEvent(QMouseEvent *e) override
void highlightPeak_(QPainter &p, const PeakIndex &peak)
Highlights a single peak and prints coordinates to screen.
void finishContextMenu_(QMenu *context_menu, QMenu *settings_menu)
Finishes context menu after customization to peaks, features or consensus features.
void mouseReleaseEvent(QMouseEvent *e) override
void keyReleaseEvent(QKeyEvent *e) override
void keyPressEvent(QKeyEvent *e) override
void updateScrollbars_() override
Updates the scroll bars.
void recalculateSnapFactor_() override
Recalculates the intensity scaling factor for 'snap to maximum intensity mode'.
void showCurrentLayerPreferences() override
Shows the preferences dialog of the active layer.
void translateLeft_(Qt::KeyboardModifiers m) override
Translation bound to the 'Left' key.
void currentLayerParametersChanged_()
Reacts on changed layer parameters.
void drawDeltas_(QPainter &painter, const PeakIndex &start, const PeakIndex &end)
Draws the coordinates (or coordinate deltas) to the widget's upper left corner.
void recalculateDotGradient_(Size layer)
Recalculates the dot gradient of a layer.
void mergeIntoLayer(Size i, const FeatureMapSharedPtrType &map)
Merges the features in map into the features layer i.
void showProjections(const LayerDataBase *source_layer)
Requests to show projections for the source_layer. Emitted after calling pickProjectionLayer().
void paintIcon_(const QPoint &pos, const QRgb &color, const String &icon, Size s, QPainter &p) const
Paints a peak icon for feature and consensus feature peaks.
void intensityModeChange_() override
This method is called whenever the intensity mode changes. Reimplement if you need to react on such c...
bool collectFragmentScansInArea_(const RangeType &range, QAction *a, QMenu *msn_scans, QMenu *msn_meta)
Collects fragment ion scans in the indicated RT/mz area and adds them to the indicated action.
Int precalculatedColorIndex_(float val, const MultiGradient &gradient, double snap_factor)
Returns the position on color gradient associated with given intensity.
Definition: Plot2DCanvas.h:142
double adaptPenScaling_(double ratio_data2pixel, double &pen_size) const
For a certain dimension: computes the size a data point would need, such that the image reaches a cer...
void activateLayer(Size layer_index) override
void translateRight_(Qt::KeyboardModifiers m) override
Translation bound to the 'Right' key.
void showChromatogramsAsNew1D(std::vector< int, std::allocator< int > > indices)
void updateLayer(Size i) override
void contextMenuEvent(QContextMenuEvent *e) override
double pen_size_min_
minimum number of pixels for one data point
Definition: Plot2DCanvas.h:254
~Plot2DCanvas() override
Destructor.
void mouseDoubleClickEvent(QMouseEvent *e) override
void verticalScrollBarChange(int value) override
void showCurrentPeaksAs3D()
Requests to display all spectra in 3D plot.
PeakIndex measurement_start_
start peak/feature of measuring mode
Definition: Plot2DCanvas.h:249
MultiGradient linear_gradient_
stores the linear color gradient for non-log modes
Definition: Plot2DCanvas.h:252
void pickProjectionLayer()
Picks an appropriate layer for projection and emits the signal showProjections(LayerDataBase*).
PeakIndex findNearestPeak_(const QPoint &pos)
Returns the nearest peak to position pos.
QPoint dataToWidget_(const DPosition< 2 > &xy)
Definition: Plot2DCanvas.h:221
void translateBackward_() override
Translation bound to the 'Down' key.
void translateVisibleArea_(double x_axis_rel, double y_axis_rel)
Translates the visible area by a given offset specified in fractions of current visible area.
QPoint dataToWidget_(double x, double y) const
Convert chart to widget coordinates.
Definition: Plot2DCanvas.h:212
QColor heightColor_(float val, const MultiGradient &gradient, double snap_factor)
Returns the color associated with val for the gradient gradient.
Definition: Plot2DCanvas.h:171
void paintEvent(QPaintEvent *e) override
void mergeIntoLayer(Size i, std::vector< PeptideIdentification > &peptides)
Merges the peptide identifications in peptides into the peptide layer i.
Base class for visualization canvas classes.
Definition: PlotCanvas.h:120
LayerDataBase::ConsensusMapSharedPtrType ConsensusMapSharedPtrType
Main managed data type (consensus features)
Definition: PlotCanvas.h:140
LayerDataBase::FeatureMapSharedPtrType FeatureMapSharedPtrType
Main managed data type (features)
Definition: PlotCanvas.h:136
A more convenient string class.
Definition: String.h:34
int Int
Signed integer type.
Definition: Types.h:76
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:101
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:22
Index of a peak or feature.
Definition: PeakIndex.h:25