OpenMS  2.8.0
Plot2DCanvas.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2021.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Timo Sachsenberg$
32 // $Authors: Marc Sturm $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
37 // OpenMS_GUI config
38 #include <OpenMS/VISUAL/OpenMS_GUIConfig.h>
39 
40 // OpenMS
44 
45 // QT
46 class QPainter;
47 class QMouseEvent;
48 class QAction;
49 class QMenu;
50 
51 namespace OpenMS
52 {
70  class OPENMS_GUI_DLLAPI Plot2DCanvas :
71  public PlotCanvas
72  {
73  Q_OBJECT
74 
75 public:
77  Plot2DCanvas(const Param& preferences, QWidget* parent = nullptr);
78 
80  ~Plot2DCanvas() override;
81 
82  // Docu in base class
83  void showCurrentLayerPreferences() override;
84 
85  // Docu in base class
86  void saveCurrentLayer(bool visible) override;
87 
90 
93 
95  void mergeIntoLayer(Size i, std::vector<PeptideIdentification>& peptides);
96 
99 
100 signals:
106  void showProjectionInfo(int, double, double);
110  void showSpectrumAsNew1D(int index);
111  void showChromatogramsAsNew1D(std::vector<int, std::allocator<int> > indices);
114 
115 public slots:
116  // Docu in base class
117  void activateLayer(Size layer_index) override;
118  // Docu in base class
119  void removeLayer(Size layer_index) override;
120  //docu in base class
121  void updateLayer(Size i) override;
122  // Docu in base class
123  void horizontalScrollBarChange(int value) override;
124  // Docu in base class
125  void verticalScrollBarChange(int value) override;
126 
137 
138 protected slots:
139 
142 
143 protected:
144  // Docu in base class
145  bool finishAdding_() override;
146 
148  bool collectFragmentScansInArea(double rt_min, double rt_max, double mz_min, double mz_max, QAction* a, QMenu * msn_scans, QMenu * msn_meta);
149 
151  void drawCoordinates_(QPainter& painter, const PeakIndex& peak);
153  void drawDeltas_(QPainter& painter, const PeakIndex& start, const PeakIndex& end);
154 
157  void mousePressEvent(QMouseEvent* e) override;
158  void mouseReleaseEvent(QMouseEvent* e) override;
159  void mouseMoveEvent(QMouseEvent* e) override;
160  void paintEvent(QPaintEvent* e) override;
161  void contextMenuEvent(QContextMenuEvent* e) override;
162  void keyPressEvent(QKeyEvent* e) override;
163  void keyReleaseEvent(QKeyEvent* e) override;
164  void mouseDoubleClickEvent(QMouseEvent* e) override;
166 
167  // Docu in base class
168  void updateScrollbars_() override;
169 
178  void paintDots_(Size layer_index, QPainter& p);
179 
180  void paintAllIntensities_(Size layer_index, double pen_width, QPainter& painter);
181 
193  void paintMaximumIntensities_(Size layer_index, Size rt_pixel_count, Size mz_pixel_count, QPainter& p);
194 
201  void paintPrecursorPeaks_(Size layer_index, QPainter& painter);
202 
209  void paintFeatureData_(Size layer_index, QPainter& p);
210 
217  void paintTraceConvexHulls_(Size layer_index, QPainter& p);
218 
225  void paintFeatureConvexHulls_(Size layer_index, QPainter& p);
226 
233  void paintIdentifications_(Size layer_index, QPainter& p);
234 
241  void paintConsensusElements_(Size layer_index, QPainter& p);
242 
251  void paintConsensusElement_(Size layer_index, const ConsensusFeature& cf, QPainter& p, bool use_buffer);
252 
259  bool isConsensusFeatureVisible_(const ConsensusFeature& ce, Size layer_index);
260 
268  void paintConvexHulls_(const std::vector<ConvexHull2D>& hulls, bool has_identifications, QPainter& p);
269 
270  // Docu in base class
271  void intensityModeChange_() override;
272  // DOcu in base class
273  void recalculateSnapFactor_() override;
274 
280  inline Int precalculatedColorIndex_(float val, const MultiGradient& gradient, double snap_factor)
281  {
282  float gradientPos = val;
283  switch (intensity_mode_)
284  {
285  case IM_NONE:
286  gradientPos = val;
287  break;
288 
289  case IM_PERCENTAGE:
290  gradientPos = val * percentage_factor_;
291  break;
292 
293  case IM_SNAP:
294  gradientPos = val * snap_factor;
295  break;
296 
297  case IM_LOG:
298  gradientPos = std::log(val + 1);
299  break;
300  }
301  return gradient.precalculatedColorIndex(gradientPos);
302  }
303 
309  inline QColor heightColor_(float val, const MultiGradient& gradient, double snap_factor)
310  {
311  return gradient.precalculatedColorByIndex(precalculatedColorIndex_(val, gradient, snap_factor));
312  }
313 
322  inline void dataToWidget_(double x, double y, QPoint& point)
323  {
324  if (!isMzToXAxis())
325  {
326  point.setX(int((y - visible_area_.minY()) / visible_area_.height() * width()));
327  point.setY(height() - int((x - visible_area_.minX()) / visible_area_.width() * height()));
328  }
329  else
330  {
331  point.setX(int((x - visible_area_.minX()) / visible_area_.width() * width()));
332  point.setY(height() - int((y - visible_area_.minY()) / visible_area_.height() * height()));
333  }
334  }
335 
347  double adaptPenScaling_(double ratio_data2pixel, double& pen_size) const;
348 
351 
353  void highlightPeak_(QPainter& p, const PeakIndex& peak);
354 
356  PeakIndex findNearestPeak_(const QPoint& pos);
357 
359  void paintIcon_(const QPoint& pos, const QRgb& color, const String& icon, Size s, QPainter& p) const;
360 
362  virtual void translateVisibleArea_(double mzShiftRel, double rtShiftRel);
363 
364  //docu in base class
365  void translateLeft_(Qt::KeyboardModifiers m) override;
366  //docu in base class
367  void translateRight_(Qt::KeyboardModifiers m) override;
368  //docu in base class
369  void translateForward_() override;
370  //docu in base class
371  void translateBackward_() override;
372 
374  void finishContextMenu_(QMenu* context_menu, QMenu* settings_menu);
375 
380 
385 
388 
389  double pen_size_min_;
390  double pen_size_max_;
392 
393  private:
396 
397  };
398 }
399 
A consensus feature spanning multiple LC-MS/MS experiments.
Definition: ConsensusFeature.h:71
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:73
A gradient of multiple colors and arbitrary distances between colors.
Definition: MultiGradient.h:68
Int precalculatedColorIndex(double position) const
index of color in precalculated table by position in gradient
Definition: MultiGradient.h:136
QColor precalculatedColorByIndex(Int index) const
precalculated color by its index in the table
Definition: MultiGradient.h:147
Management and storage of parameters / INI files.
Definition: Param.h:70
Canvas for 2D-visualization of peak map, feature map and consensus map data.
Definition: Plot2DCanvas.h:72
void translateForward_() override
Translation bound to the 'Up' key.
void paintAllIntensities_(Size layer_index, double pen_width, QPainter &painter)
void mergeIntoLayer(Size i, ConsensusMapSharedPtrType map)
Merges the consensus features in map into the features layer i.
double pen_size_max_
maximum number of pixels for one data point
Definition: Plot2DCanvas.h:390
void showProjectionHorizontal(ExperimentSharedPtrType)
Sets the data for the horizontal projection.
void drawCoordinates_(QPainter &painter, const PeakIndex &peak)
Draws the coordinates (or coordinate deltas) to the widget's upper left corner.
bool isConsensusFeatureVisible_(const ConsensusFeature &ce, Size layer_index)
checks if any element of a consensus feature is currently visible.
void paintPrecursorPeaks_(Size layer_index, QPainter &painter)
Paints the precursor peaks.
bool collectFragmentScansInArea(double rt_min, double rt_max, double mz_min, double mz_max, 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.
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:382
double canvas_coverage_min_
minimum coverage of the canvas required; if lower, points are upscaled in size
Definition: Plot2DCanvas.h:391
bool finishAdding_() override
Method that is called when a new layer has been added.
ExperimentType projection_rt_
RT projection data.
Definition: Plot2DCanvas.h:379
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.
void recalculateCurrentLayerDotGradient()
recalculates the dot gradient of the active layer
Plot2DCanvas(const Param &preferences, QWidget *parent=nullptr)
Default constructor.
void mouseMoveEvent(QMouseEvent *e) override
void paintIdentifications_(Size layer_index, QPainter &p)
Paints peptide identifications (for idXML and unassigned peptides in featureXML).
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 mergeIntoLayer(Size i, FeatureMapSharedPtrType map)
Merges the features in map into the features layer i.
void keyReleaseEvent(QKeyEvent *e) override
void paintMaximumIntensities_(Size layer_index, Size rt_pixel_count, Size mz_pixel_count, QPainter &p)
Paints maximum intensity of individual peaks.
void paintFeatureData_(Size layer_index, QPainter &p)
Paints feature data.
void updateProjections()
Updates the projection data and emits some related signals.
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 paintConsensusElement_(Size layer_index, const ConsensusFeature &cf, QPainter &p, bool use_buffer)
Paints one consensus element of a consensus features layer.
void paintDots_(Size layer_index, QPainter &p)
Paints individual peaks.
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 paintConvexHulls_(const std::vector< ConvexHull2D > &hulls, bool has_identifications, QPainter &p)
Paints convex hulls (one for each mass trace) for a single feature.
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 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.
virtual void translateVisibleArea_(double mzShiftRel, double rtShiftRel)
translates the visible area by a given offset specified in fractions of current visible area
void intensityModeChange_() override
This method is called whenever the intensity mode changes. Reimplement if you need to react on such c...
Int precalculatedColorIndex_(float val, const MultiGradient &gradient, double snap_factor)
Returns the position on color gradient associated with given intensity.
Definition: Plot2DCanvas.h:280
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:389
~Plot2DCanvas() override
Destructor.
void showProjectionInfo(int, double, double)
Shows the number of peaks and the intensity sum of the projection.
void mouseDoubleClickEvent(QMouseEvent *e) override
void showProjectionVertical(ExperimentSharedPtrType)
Sets the data for the vertical projection.
void verticalScrollBarChange(int value) override
void showCurrentPeaksAs3D()
Requests to display all spectra in 3D plot.
Plot2DCanvas()
Default C'tor hidden.
PeakIndex measurement_start_
start peak/feature of measuring mode
Definition: Plot2DCanvas.h:384
void dataToWidget_(double x, double y, QPoint &point)
Convert chart to widget coordinates.
Definition: Plot2DCanvas.h:322
MultiGradient linear_gradient_
stores the linear color gradient for non-log modes
Definition: Plot2DCanvas.h:387
void paintConsensusElements_(Size layer_index, QPainter &p)
Paints the consensus elements of a consensus features layer.
void paintFeatureConvexHulls_(Size layer_index, QPainter &p)
Paints the convex hulls (one for each feature) of a features layer.
void paintTraceConvexHulls_(Size layer_index, QPainter &p)
Paints convex hulls (one for each mass trace) of a features layer.
PeakIndex findNearestPeak_(const QPoint &pos)
Returns the nearest peak to position pos.
void translateBackward_() override
Translation bound to the 'Down' key.
QColor heightColor_(float val, const MultiGradient &gradient, double snap_factor)
Returns the color associated with val for the gradient gradient.
Definition: Plot2DCanvas.h:309
void saveCurrentLayer(bool visible) override
Saves the current layer data.
void paintEvent(QPaintEvent *e) override
ExperimentType projection_mz_
m/z projection data
Definition: Plot2DCanvas.h:377
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:138
LayerDataBase::ConsensusMapSharedPtrType ConsensusMapSharedPtrType
Main managed data type (consensus features)
Definition: PlotCanvas.h:159
LayerDataBase::FeatureMapSharedPtrType FeatureMapSharedPtrType
Main managed data type (features)
Definition: PlotCanvas.h:155
LayerDataBase::ExperimentSharedPtrType ExperimentSharedPtrType
Main managed data type (experiment)
Definition: PlotCanvas.h:148
A more convenient string class.
Definition: String.h:60
int Int
Signed integer type.
Definition: Types.h:102
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
Index of a peak or feature.
Definition: PeakIndex.h:51