libpappsomspp
Library for mass spectrometry
pappso::BaseColorMapPlotWidget Class Reference

#include <basecolormapplotwidget.h>

Inheritance diagram for pappso::BaseColorMapPlotWidget:
pappso::BasePlotWidget pappso::DriftSpecMassSpecColorMapPlotWidget pappso::TicXicChromDriftSpecColorMapPlotWidget pappso::TicXicChromMassSpecColorMapPlotWidget

Public Member Functions

 BaseColorMapPlotWidget (QWidget *parent, const QString &x_axis_label, const QString &y_axis_label)
 
virtual ~BaseColorMapPlotWidget ()
 Destruct this BaseColorMapPlotWidget instance. More...
 
virtual void setColorMapPlotConfig (const ColorMapPlotConfig &color_map_config)
 
virtual const ColorMapPlotConfiggetColorMapPlotConfig ()
 
virtual QCPColorMap * addColorMap (std::shared_ptr< std::map< double, MapTrace >> double_map_trace_map_sp, const ColorMapPlotConfig color_map_plot_config, const QColor &color)
 
virtual void transposeAxes ()
 
virtual void zAxisScaleToLog10 ()
 
virtual void zAxisFilterLowPassPercentage (double threshold_percentage)
 
virtual void zAxisFilterHighPassPercentage (double threshold_percentage)
 
virtual void zAxisDataResetToOriginal ()
 
DataKind xAxisDataKind () const
 
DataKind yAxisDataKind () const
 
AxisScale axisScale (Axis axis) const
 
AxisScale xAxisScale () const
 
AxisScale yAxisScale () const
 
AxisScale zAxisScale () const
 
virtual void setPlottingColor (QCPAbstractPlottable *plottable_p, const QColor &new_color) override
 
virtual QColor getPlottingColor (int index=0) const override
 
QString dataToString ()
 
- Public Member Functions inherited from pappso::BasePlotWidget
 BasePlotWidget (QWidget *parent)
 
 BasePlotWidget (QWidget *parent, const QString &x_axis_label, const QString &y_axis_label)
 
virtual ~BasePlotWidget ()
 Destruct this BasePlotWidget instance. More...
 
virtual bool setupWidget ()
 
virtual void setPen (const QPen &pen)
 
virtual const QPen & getPen () const
 
virtual void setPlottingColor (int index, const QColor &new_color)
 
virtual QColor getPlottingColor (QCPAbstractPlottable *plottable_p) const
 
virtual void setAxisLabelX (const QString &label)
 
virtual void setAxisLabelY (const QString &label)
 
virtual void resetAxesRangeHistory ()
 
virtual void updateAxesRangeHistory ()
 Create new axis range history items and append them to the history. More...
 
virtual void restorePreviousAxesRangeHistory ()
 Go up one history element in the axis history. More...
 
virtual void restoreAxesRangeHistory (std::size_t index)
 Get the axis histories at index index and update the plot ranges. More...
 
virtual void keyPressEvent (QKeyEvent *event)
 KEYBOARD-related EVENTS. More...
 
virtual void keyReleaseEvent (QKeyEvent *event)
 Handle specific key codes and trigger respective actions. More...
 
virtual void spaceKeyReleaseEvent (QKeyEvent *event)
 
virtual void directionKeyPressEvent (QKeyEvent *event)
 
virtual void directionKeyReleaseEvent (QKeyEvent *event)
 
virtual void mousePseudoButtonKeyPressEvent (QKeyEvent *event)
 
virtual void mousePseudoButtonKeyReleaseEvent (QKeyEvent *event)
 
virtual void mousePressHandler (QMouseEvent *event)
 KEYBOARD-related EVENTS. More...
 
virtual void mouseReleaseHandler (QMouseEvent *event)
 
virtual void mouseReleaseHandlerLeftButton ()
 
virtual void mouseReleaseHandlerRightButton ()
 
virtual void mouseMoveHandler (QMouseEvent *event)
 KEYBOARD-related EVENTS. More...
 
virtual void mouseMoveHandlerNotDraggingCursor ()
 
virtual void mouseMoveHandlerDraggingCursor ()
 
virtual void mouseMoveHandlerLeftButtonDraggingCursor ()
 
virtual void mouseMoveHandlerRightButtonDraggingCursor ()
 
virtual void axisDoubleClickHandler (QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event)
 
bool isClickOntoXAxis (const QPointF &mousePoint)
 
bool isClickOntoYAxis (const QPointF &mousePoint)
 
int dragDirection ()
 MOUSE-related EVENTS. More...
 
virtual void moveMouseCursorGraphCoordToGlobal (QPointF plot_coordinates)
 
virtual void moveMouseCursorPixelCoordToGlobal (QPointF local_coordinates)
 
virtual void horizontalMoveMouseCursorCountPixels (int pixel_count)
 
virtual QPointF horizontalGetGraphCoordNewPointCountPixels (int pixel_count)
 
virtual void verticalMoveMouseCursorCountPixels (int pixel_count)
 
virtual QPointF verticalGetGraphCoordNewPointCountPixels (int pixel_count)
 
virtual QCPRange getRangeX (bool &found_range, int index) const
 MOUSE MOVEMENTS mouse/keyboard-triggered. More...
 
virtual QCPRange getRangeY (bool &found_range, int index) const
 
QCPRange getRange (Axis axis, RangeType range_type, bool &found_range) const
 
virtual QCPRange getInnermostRangeX (bool &found_range) const
 
virtual QCPRange getOutermostRangeX (bool &found_range) const
 
virtual QCPRange getInnermostRangeY (bool &found_range) const
 
virtual QCPRange getOutermostRangeY (bool &found_range) const
 
void yMinMaxOnXAxisCurrentRange (double &min, double &max, QCPAbstractPlottable *plottable_p=nullptr)
 
void yMinMaxOnXAxisCurrentRange (double &min, double &max, int index)
 
virtual void axisRescale ()
 RANGE-related functions. More...
 
virtual void axisReframe ()
 
virtual void axisZoom ()
 
virtual void axisPan ()
 
virtual void replotWithAxesRanges (QCPRange xAxisRange, QCPRange yAxisRange, Axis whichAxis)
 
virtual void replotWithAxisRangeX (double lower, double upper)
 
virtual void replotWithAxisRangeY (double lower, double upper)
 
virtual void hideAllPlotItems ()
 PLOTTING / REPLOTTING functions. More...
 
virtual void showTracers ()
 Show the traces (vertical and horizontal). More...
 
virtual void hideTracers ()
 Hide the traces (vertical and horizontal). More...
 
virtual void drawXDeltaFeatures ()
 
virtual void drawYDeltaFeatures ()
 
virtual void calculateDragDeltas ()
 
virtual bool isVerticalDisplacementAboveThreshold ()
 
virtual void drawSelectionRectangleAndPrepareZoom (bool as_line_segment=false, bool for_integration=false)
 
virtual void updateSelectionRectangle (bool as_line_segment=false, bool for_integration=false)
 
virtual void resetSelectionRectangle ()
 
virtual void hideSelectionRectangle (bool reset_values=false)
 
virtual bool isSelectionRectangleVisible ()
 
virtual PolygonType whatIsVisibleOfTheSelectionRectangle ()
 
virtual void setFocus ()
 PLOT ITEMS : TRACER TEXT ITEMS... More...
 
virtual void redrawPlotBackground (QWidget *focusedPlotWidget)
 Redraw the background of the focusedPlotWidget plot widget. More...
 
virtual void updateContextXandYAxisRanges ()
 
virtual const BasePlotContextgetContext () const
 

Protected Attributes

QCPColorMapData * mpa_backupColorMapData = nullptr
 
ColorMapPlotConfig m_colorMapPlotConfig
 
ColorMapPlotConfigmpa_backupColorMapPlotConfig = nullptr
 
- Protected Attributes inherited from pappso::BasePlotWidget
QString m_name = "NOT_SET"
 Name of the plot widget. More...
 
QString m_desc = "NOT_SET"
 Description of the plot widget. More...
 
QString m_fileName
 The name of the data file from which the mass data were read. More...
 
QString m_axisLabelX
 
QString m_axisLabelY
 
BasePlotContext m_context
 
int m_leftMousePseudoButtonKey = Qt::Key_Less
 
int m_rightMousePseudoButtonKey = Qt::Key_Greater
 
QCPItemLine * mp_selectionRectangeLine1 = nullptr
 Rectangle defining the borders of zoomed-in/out data. More...
 
QCPItemLine * mp_selectionRectangeLine2 = nullptr
 
QCPItemLine * mp_selectionRectangeLine3 = nullptr
 
QCPItemLine * mp_selectionRectangeLine4 = nullptr
 
QCPItemText * mp_xDeltaTextItem = nullptr
 Text describing the x-axis delta value during a drag operation. More...
 
QCPItemText * mp_yDeltaTextItem = nullptr
 
bool m_shouldTracersBeVisible = true
 Tells if the tracers should be visible. More...
 
QCPItemLine * mp_hPosTracerItem = nullptr
 Horizontal position tracer. More...
 
QCPItemLine * mp_vPosTracerItem = nullptr
 Vertical position tracer. More...
 
QCPItemLine * mp_vStartTracerItem = nullptr
 Vertical selection start tracer (typically in green). More...
 
QCPItemLine * mp_vEndTracerItem = nullptr
 Vertical selection end tracer (typically in red). More...
 
std::size_t m_lastAxisRangeHistoryIndex = 0
 Index of the last axis range history item. More...
 
std::vector< QCPRange * > m_xAxisRangeHistory
 List of x axis ranges occurring during the panning zooming actions. More...
 
std::vector< QCPRange * > m_yAxisRangeHistory
 List of y axis ranges occurring during the panning zooming actions. More...
 
int m_mouseMoveHandlerSkipAmount = 10
 How many mouse move events must be skipped *‍/. More...
 
int m_mouseMoveHandlerSkipCount = 0
 Counter to handle the "fat data" mouse move event handling. More...
 
QColor m_unfocusedColor = QColor("lightgray")
 Color used for the background of unfocused plot. More...
 
QBrush m_unfocusedBrush = QBrush(m_unfocusedColor)
 Color used for the background of unfocused plot. More...
 
QColor m_focusedColor = QColor(Qt::transparent)
 Color used for the background of focused plot. More...
 
QBrush m_focusedBrush = QBrush(m_focusedColor)
 Color used for the background of focused plot. More...
 
QPen m_pen
 Pen used to draw the graph and textual elements in the plot widget. More...
 

Additional Inherited Members

- Signals inherited from pappso::BasePlotWidget
void setFocusSignal ()
 
void lastCursorHoveredPointSignal (const QPointF &pointf)
 
void plotRangesChangedSignal (const BasePlotContext &context)
 
void xAxisMeasurementSignal (const BasePlotContext &context, bool with_delta)
 
void keyPressEventSignal (const BasePlotContext &context)
 
void keyReleaseEventSignal (const BasePlotContext &context)
 
void mouseReleaseEventSignal (const BasePlotContext &context)
 
void plottableSelectionChangedSignal (QCPAbstractPlottable *plottable_p, bool selected)
 
void integrationRequestedSignal (const BasePlotContext &context)
 
void plottableDestructionRequestedSignal (BasePlotWidget *base_plot_widget_p, QCPAbstractPlottable *plottable_p, const BasePlotContext &context)
 
- Protected Member Functions inherited from pappso::BasePlotWidget
virtual void createAllAncillaryItems ()
 
virtual void update1DSelectionRectangle (bool for_integration=false)
 
virtual void update2DSelectionRectangleSquare (bool for_integration=false)
 
virtual void update2DSelectionRectangleSkewed (bool for_integration=false)
 
virtual QString allLayerNamesToString () const
 
virtual QString layerableLayerName (QCPLayerable *layerable_p) const
 
virtual int layerableLayerIndex (QCPLayerable *layerable_p) const
 

Detailed Description

Definition at line 61 of file basecolormapplotwidget.h.

Constructor & Destructor Documentation

◆ BaseColorMapPlotWidget()

pappso::BaseColorMapPlotWidget::BaseColorMapPlotWidget ( QWidget *  parent,
const QString &  x_axis_label,
const QString &  y_axis_label 
)
explicit

Definition at line 44 of file basecolormapplotwidget.cpp.

47  : BasePlotWidget(parent, x_axis_label, y_axis_label)
48 {
49  // Do not call createAllAncillaryItems() in this base class because all the
50  // items will have been created *before* the addition of plots and then the
51  // rendering order will hide them to the viewer, since the rendering order is
52  // according to the order in which the items have been created.
53  //
54  // The fact that the ancillary items are created before trace plots is not a
55  // problem because the trace plots are sparse and do not effectively hide the
56  // data.
57  //
58  // But, in the color map plot widgets, we cannot afford to create the
59  // ancillary items *before* the plot itself because then, the rendering of the
60  // plot (created after) would screen off the ancillary items (created before).
61  //
62  // So, the createAllAncillaryItems() function needs to be called in the
63  // derived classes at the most appropriate moment in the setting up of the
64  // widget.
65  //
66  // In the present case, the function needs to be called right after addition
67  // of the color map plot.
68 }
BasePlotWidget(QWidget *parent)

◆ ~BaseColorMapPlotWidget()

pappso::BaseColorMapPlotWidget::~BaseColorMapPlotWidget ( )
virtual

Destruct this BaseColorMapPlotWidget instance.

The destruction involves clearing the history, deleting all the axis range history items for x and y axes.

Definition at line 78 of file basecolormapplotwidget.cpp.

79 {
80  if(mpa_backupColorMapData != nullptr)
82  if(mpa_backupColorMapData != nullptr)
84 }
ColorMapPlotConfig * mpa_backupColorMapPlotConfig

References mpa_backupColorMapData, and mpa_backupColorMapPlotConfig.

Member Function Documentation

◆ addColorMap()

QCPColorMap * pappso::BaseColorMapPlotWidget::addColorMap ( std::shared_ptr< std::map< double, MapTrace >>  double_map_trace_map_sp,
const ColorMapPlotConfig  color_map_plot_config,
const QColor &  color 
)
virtual

Definition at line 103 of file basecolormapplotwidget.cpp.

107 {
108  // qDebug() << "Adding color map with config:" <<
109  // color_map_plot_config.toString();
110 
111  if(!color.isValid())
112  throw PappsoException(
113  QString("The color to be used for the plot graph is invalid."));
114 
115  QCPColorMap *color_map_p = new QCPColorMap(xAxis, yAxis);
116 
117  color_map_p->setLayer("plotsLayer");
118 
119  // Do not forget to copy the config!
120  m_colorMapPlotConfig = color_map_plot_config;
121 
122  // Immediately create a copy for backup.
123  mpa_backupColorMapPlotConfig = new ColorMapPlotConfig(color_map_plot_config);
124 
125 #if 0
126  // This is the code on the QCustomPlot documentation and it works fine.
127  QCPColorMap *color_map_p = new QCPColorMap(xAxis, yAxis);
128 
129  color_map_p->data()->setSize(50, 50);
130  color_map_p->data()->setRange(QCPRange(0, 2), QCPRange(0, 2));
131  for(int x = 0; x < 50; ++x)
132  for(int y = 0; y < 50; ++y)
133  color_map_p->data()->setCell(x, y, qCos(x / 10.0) + qSin(y / 10.0));
134  color_map_p->setGradient(QCPColorGradient::gpPolar);
135  color_map_p->rescaleDataRange(true);
136  rescaleAxes();
137  replot();
138 #endif
139 
140  // Only now can afford to call createAllAncillaryItems() in this derived class
141  // because the color map has been created already. The rendering order will
142  // thus not hide the ancillary items, since they have been created after the
143  // color map plot (since the rendering order is according to the
144  // order in which the items have been created). See contructor note.
146 
147  // Connect the signal of selection change so that we can re-emit it for the
148  // widget that is using *this widget.
149 
150  connect(color_map_p,
151  static_cast<void (QCPAbstractPlottable::*)(bool)>(
152  &QCPAbstractPlottable::selectionChanged),
153  [this, color_map_p]() {
154  emit plottableSelectionChangedSignal(color_map_p,
155  color_map_p->selected());
156  });
157 
158  // qDebug() << "Configuring the color map with this config:"
159  //<< color_map_plot_config.toString();
160 
161  color_map_p->data()->setSize(color_map_plot_config.keyCellCount,
162  color_map_plot_config.mzCellCount);
163 
164  color_map_p->data()->setRange(QCPRange(color_map_plot_config.minKeyValue,
165  color_map_plot_config.maxKeyValue),
166  QCPRange(color_map_plot_config.minMzValue,
167  color_map_plot_config.maxMzValue));
168  color_map_p->data()->fill(0.0);
169 
170  // We have now to fill the color map.
171 
172  for(auto &&pair : *double_map_trace_map_sp)
173  {
174 
175  // The first value is the key and the second value is the MapTrace into
176  // which we need to iterated and for each point (double mz, double
177  // intensity) create a map cell.
178 
179  double dt_or_rt_key = pair.first;
180  MapTrace map_trace = pair.second;
181 
182  for(auto &&data_point_pair : map_trace)
183  {
184  double mz = data_point_pair.first;
185  double intensity = data_point_pair.second;
186 
187  // We are filling dynamically the color map. If a cell had already
188  // something in, then we need to take that into account. This is
189  // because we let QCustomPlot handle the fuzzy transition between
190  // color map plot cells.
191 
192  double prev_intensity = color_map_p->data()->data(dt_or_rt_key, mz);
193  double new_intensity = prev_intensity + intensity;
194 
195  // Record the max cell intensity value (maxZValue). We will need that
196  // later.
198  std::max(m_colorMapPlotConfig.maxZValue, new_intensity);
199 
200  // qDebug() << "Setting tri-point:" << dt_or_rt_key << "," << mz <<
201  // ","
202  //<< new_intensity;
203 
204  color_map_p->data()->setData(dt_or_rt_key, mz, new_intensity);
205  }
206  }
207 
208  // At this point we have finished filling-up the color map.
209 
210  // The gpThermal is certainly one of the best.
211 
212  color_map_p->setGradient(QCPColorGradient::gpThermal);
213 
214  color_map_p->rescaleDataRange(true);
215 
216  color_map_p->rescaleAxes();
218 
219  // The pen of the color map itself is of no use. Instead the user will see the
220  // color of the axes' labels.
221 
222  QPen pen = xAxis->basePen();
223  pen.setColor(color);
224 
225  xAxis->setBasePen(pen);
226  xAxis->setLabelColor(color);
227  xAxis->setTickLabelColor(color);
228 
229  yAxis->setBasePen(pen);
230  yAxis->setLabelColor(color);
231  yAxis->setTickLabelColor(color);
232 
233  // And now set the color map's pen to the same color, even if we do not use
234  // it, we need it for coloring the plots that might be integrated from this
235  // color map.
236 
237  color_map_p->setPen(pen);
238 
239  // Copy the color map's data into a backup copy.
240 
241  mpa_backupColorMapData = new QCPColorMapData(*(color_map_p->data()));
242 
243  replot();
244 
245  return color_map_p;
246 }
virtual void createAllAncillaryItems()
virtual void resetAxesRangeHistory()
void plottableSelectionChangedSignal(QCPAbstractPlottable *plottable_p, bool selected)

References pappso::BasePlotWidget::createAllAncillaryItems(), pappso::ColorMapPlotConfig::keyCellCount, m_colorMapPlotConfig, pappso::ColorMapPlotConfig::maxKeyValue, pappso::ColorMapPlotConfig::maxMzValue, pappso::ColorMapPlotConfig::maxZValue, pappso::ColorMapPlotConfig::minKeyValue, pappso::ColorMapPlotConfig::minMzValue, mpa_backupColorMapData, mpa_backupColorMapPlotConfig, pappso::mz, pappso::ColorMapPlotConfig::mzCellCount, pappso::BasePlotWidget::plottableSelectionChangedSignal(), pappso::BasePlotWidget::resetAxesRangeHistory(), pappso::x, and pappso::y.

◆ axisScale()

AxisScale pappso::BaseColorMapPlotWidget::axisScale ( Axis  axis) const

Definition at line 676 of file basecolormapplotwidget.cpp.

677 {
678  if(axis == Axis::x)
680  else if(axis == Axis::y)
682  else if(axis == Axis::z)
684  else
685  throw PappsoException(
686  QString("basecolormapplotwidget.cpp: The axis cannot be different than "
687  "x, y or z."));
688 
689  return AxisScale::unset;
690 }

References m_colorMapPlotConfig, pappso::unset, pappso::x, pappso::ColorMapPlotConfig::xAxisScale, pappso::y, pappso::ColorMapPlotConfig::yAxisScale, pappso::z, and pappso::ColorMapPlotConfig::zAxisScale.

◆ dataToString()

QString pappso::BaseColorMapPlotWidget::dataToString ( )

Definition at line 757 of file basecolormapplotwidget.cpp.

758 {
759  // We want to export the data to a string in the x y z format, with
760  // x=key (cell's x coordinate)
761  // y=value (cell's y coordinate)
762  // z=intensity (cell value)
763 
764  QCPColorMap *color_map_p = static_cast<QCPColorMap *>(plottable(0));
765 
766  QCPColorMapData *map_data = color_map_p->data();
767 
768  int keySize = map_data->keySize();
769  int valueSize = map_data->valueSize();
770 
771  QString text;
772 
773  for(int iter = 0; iter < keySize; ++iter)
774  {
775  for(int jter = 0; jter < valueSize; ++jter)
776  {
777  text += QString("%1 %2 %3\n")
778  .arg(iter, 0, 'f', 6, ' ')
779  .arg(jter, 0, 'f', 6, ' ')
780  .arg(map_data->cell(iter, jter), 0, 'f', 6, ' ');
781  }
782  }
783 
784  return text;
785 }

◆ getColorMapPlotConfig()

const ColorMapPlotConfig & pappso::BaseColorMapPlotWidget::getColorMapPlotConfig ( )
virtual

Definition at line 96 of file basecolormapplotwidget.cpp.

97 {
98  return m_colorMapPlotConfig;
99 }

References m_colorMapPlotConfig.

◆ getPlottingColor()

QColor pappso::BaseColorMapPlotWidget::getPlottingColor ( int  index = 0) const
overridevirtual

Reimplemented from pappso::BasePlotWidget.

Definition at line 747 of file basecolormapplotwidget.cpp.

748 {
749  Q_UNUSED(index);
750 
751  QPen pen = xAxis->basePen();
752  return pen.color();
753 }

◆ setColorMapPlotConfig()

void pappso::BaseColorMapPlotWidget::setColorMapPlotConfig ( const ColorMapPlotConfig color_map_config)
virtual

Definition at line 88 of file basecolormapplotwidget.cpp.

90 {
91  m_colorMapPlotConfig = color_map_config;
92 }

References m_colorMapPlotConfig.

◆ setPlottingColor()

void pappso::BaseColorMapPlotWidget::setPlottingColor ( QCPAbstractPlottable *  plottable_p,
const QColor &  new_color 
)
overridevirtual

Reimplemented from pappso::BasePlotWidget.

Definition at line 715 of file basecolormapplotwidget.cpp.

717 {
718  Q_UNUSED(plottable_p);
719 
720  // The pen of the color map itself is of no use. Instead the user will see the
721  // color of the axes' labels.
722 
723  QPen pen = xAxis->basePen();
724  pen.setColor(new_color);
725 
726  xAxis->setBasePen(pen);
727  xAxis->setLabelColor(new_color);
728  xAxis->setTickLabelColor(new_color);
729 
730  yAxis->setBasePen(pen);
731  yAxis->setLabelColor(new_color);
732  yAxis->setTickLabelColor(new_color);
733 
734  // And now set the color map's pen to the same color, even if we do not use
735  // it, we need it for coloring the plots that might be integrated from this
736  // color map.
737 
738  QCPColorMap *color_map_p = static_cast<QCPColorMap *>(plottable(0));
739 
740  color_map_p->setPen(pen);
741 
742  replot();
743 }

◆ transposeAxes()

void pappso::BaseColorMapPlotWidget::transposeAxes ( )
virtual

Definition at line 250 of file basecolormapplotwidget.cpp.

251 {
252  // qDebug() << __FILE__ << __LINE__ << __FUNCTION__ << "()" ;
253 
254  QCPColorMap *color_map_p = static_cast<QCPColorMap *>(plottable(0));
255 
256  QCPColorMapData *origData = color_map_p->data();
257 
258  int keySize = origData->keySize();
259  int valueSize = origData->valueSize();
260 
261  // qDebug() << __FILE__ << __LINE__ << __FUNCTION__ << "()"
262  //<< "Orig data size:" << keySize << valueSize;
263 
264  QCPRange keyRange = origData->keyRange();
265  QCPRange valueRange = origData->valueRange();
266 
267  // qDebug() << __FILE__ << __LINE__ << __FUNCTION__ << "()"
268  //<< "Value at cell 80,650:" << origData->cell(80,650);
269 
270  // Transposed map.
271  QCPColorMapData *newData =
272  new QCPColorMapData(valueSize, keySize, valueRange, keyRange);
273 
274  for(int iter = 0; iter < keySize; ++iter)
275  {
276  for(int jter = 0; jter < valueSize; ++jter)
277  {
278  double cellData = origData->cell(iter, jter);
279 
280  newData->setCell(jter, iter, cellData);
281  }
282  }
283 
284  // qDebug() << __FILE__ << __LINE__ << __FUNCTION__ << "()"
285  //<< "New data size:" << newData->keySize() << newData->valueSize();
286 
287  // At this point the transposition has been done.
288 
289  color_map_p->data()->clear();
290  color_map_p->rescaleDataRange(true);
291 
292  // Now we need to invert the labels and data kinds.
293 
296  m_colorMapPlotConfig.yAxisDataKind = temp_data_kind;
297 
298  QString temp_axis_label = xAxis->label();
299  xAxis->setLabel(yAxis->label());
300  yAxis->setLabel(temp_axis_label);
301 
302  // Will take ownership of the newData.
303  color_map_p->setData(newData);
304 
305  // qDebug() << __FILE__ << __LINE__ << __FUNCTION__ << "()"
306  //<< "Value at cell 80,650:" << newData->cell(80,650)
307  //<< "Value at cell 650, 80:" << newData->cell(650,80);
308 
309  // QCPAxis *p_keyAxis = mp_colorMap->keyAxis();
310  // QCPAxis *p_valueAxis = mp_colorMap->valueAxis();
311 
312  // mp_colorMap->setKeyAxis(p_valueAxis);
313  // mp_colorMap->setValueAxis(p_keyAxis);
314 
315  color_map_p->rescaleAxes();
316 
317  replot();
318 }
DataKind
Definition: types.h:171

References m_colorMapPlotConfig, pappso::ColorMapPlotConfig::xAxisDataKind, and pappso::ColorMapPlotConfig::yAxisDataKind.

◆ xAxisDataKind()

DataKind pappso::BaseColorMapPlotWidget::xAxisDataKind ( ) const

◆ xAxisScale()

AxisScale pappso::BaseColorMapPlotWidget::xAxisScale ( ) const

Definition at line 694 of file basecolormapplotwidget.cpp.

695 {
697 }

References m_colorMapPlotConfig, and pappso::ColorMapPlotConfig::xAxisScale.

◆ yAxisDataKind()

DataKind pappso::BaseColorMapPlotWidget::yAxisDataKind ( ) const

◆ yAxisScale()

AxisScale pappso::BaseColorMapPlotWidget::yAxisScale ( ) const

Definition at line 701 of file basecolormapplotwidget.cpp.

702 {
704 }

References m_colorMapPlotConfig, and pappso::ColorMapPlotConfig::yAxisScale.

◆ zAxisDataResetToOriginal()

void pappso::BaseColorMapPlotWidget::zAxisDataResetToOriginal ( )
virtual

Definition at line 633 of file basecolormapplotwidget.cpp.

634 {
635  QCPColorMap *color_map_p = static_cast<QCPColorMap *>(plottable(0));
636  color_map_p->data()->clear();
637 
638  if(mpa_backupColorMapData == nullptr)
639  throw(PappsoException(
640  "Not possible that the mpa_backupColorMapData pointer is null."));
641 
642  // We do no want that the color_map_p takes ownership of the data, because
643  // these must remain there always, so pass true, to say that we want to copy
644  // the data not transfer the pointer.
645  color_map_p->setData(mpa_backupColorMapData, true);
646 
647  color_map_p->data()->recalculateDataBounds();
648  color_map_p->rescaleDataRange(true);
649 
650  // We should not do this, as the user might have zoomed to a region of
651  // interest.
652  // color_map_p->rescaleAxes();
653 
654  // Reset the current plot config to what it was originally.
656 
657  replot();
658 }

References m_colorMapPlotConfig, mpa_backupColorMapData, and mpa_backupColorMapPlotConfig.

◆ zAxisFilterHighPassPercentage()

void pappso::BaseColorMapPlotWidget::zAxisFilterHighPassPercentage ( double  threshold_percentage)
virtual

Definition at line 530 of file basecolormapplotwidget.cpp.

532 {
533  // We want to zAxisFilter the cell data by eliminating the contents of all the
534  // cells that have an intensity value higher than threshold.
535 
536  QCPColorMap *color_map_p = static_cast<QCPColorMap *>(plottable(0));
537 
538  QCPColorMapData *map_data = color_map_p->data();
539 
540  int keySize = map_data->keySize();
541  int valueSize = map_data->valueSize();
542 
543  QCPRange keyRange = map_data->keyRange();
544  QCPRange valueRange = map_data->valueRange();
545 
546  double threshold =
547  m_colorMapPlotConfig.maxZValue * (threshold_percentage / 100);
548 
549  qDebug() << "maxZValue:" << m_colorMapPlotConfig.maxZValue
550  << "threshold:" << threshold;
551 
552  // Make a copy of the current config so that we can modify
553  // the xxxZvalue values.
554  ColorMapPlotConfig new_color_map_plot_config(m_colorMapPlotConfig);
555 
556  // But we need to reset these two values to be able to update them using
557  // std::min() and std::max() below.
558  new_color_map_plot_config.minZValue = std::numeric_limits<double>::max();
559  new_color_map_plot_config.maxZValue = std::numeric_limits<double>::min();
560 
561  qDebug() << "new_color_map_plot_config"
562  << new_color_map_plot_config.toString();
563 
564  // Filtered
565  QCPColorMapData *new_map_data =
566  new QCPColorMapData(keySize, valueSize, keyRange, valueRange);
567 
568  for(int iter = 0; iter < keySize; ++iter)
569  {
570  for(int jter = 0; jter < valueSize; ++jter)
571  {
572  double cell_data = map_data->cell(iter, jter);
573 
574  double new_cell_data = 0;
575 
576  if(cell_data < threshold)
577  new_cell_data = threshold;
578  else
579  new_cell_data = cell_data;
580 
581  // Store the new values here.
582  new_color_map_plot_config.minZValue =
583  //(new_cell_data < new_color_map_plot_config.minZValue
584  //? new_cell_data
585  //: new_color_map_plot_config.minZValue);
586  std::min(new_color_map_plot_config.minZValue, new_cell_data);
587 
588  new_color_map_plot_config.maxZValue =
589  //(new_cell_data > new_color_map_plot_config.maxZValue
590  //? new_cell_data
591  //: new_color_map_plot_config.maxZValue);
592  std::max(new_color_map_plot_config.maxZValue, new_cell_data);
593 
594  // qDebug() << "cell_data:" << cell_data
595  //<< "new_cell_data:" << new_cell_data
596  //<< "new_color_map_plot_config.minZValue:"
597  //<< new_color_map_plot_config.minZValue
598  //<< "new_color_map_plot_config.maxZValue:"
599  //<< new_color_map_plot_config.maxZValue;
600 
601  new_map_data->setCell(iter, jter, new_cell_data);
602  }
603  }
604 
605  color_map_p->data()->clear();
606 
607  // Will take ownership of the new_map_data.
608  color_map_p->setData(new_map_data);
609 
610  color_map_p->data()->recalculateDataBounds();
611  color_map_p->rescaleDataRange(true);
612 
613  qDebug() << "new_color_map_plot_config"
614  << new_color_map_plot_config.toString();
615 
616 
617  // At this point the new color map data have taken their place, we can update
618  // the config. This, way any new filtering can take advantage of the new
619  // values and compute the threshold correctly.
620  m_colorMapPlotConfig = new_color_map_plot_config;
621 
622  qDebug() << "m_colorMapPlotConfig:" << m_colorMapPlotConfig.toString();
623 
624  // We should not do this, as the user might have zoomed to a region of
625  // interest.
626  // color_map_p->rescaleAxes();
627 
628  replot();
629 }

References m_colorMapPlotConfig, pappso::ColorMapPlotConfig::maxZValue, pappso::ColorMapPlotConfig::minZValue, and pappso::ColorMapPlotConfig::toString().

◆ zAxisFilterLowPassPercentage()

void pappso::BaseColorMapPlotWidget::zAxisFilterLowPassPercentage ( double  threshold_percentage)
virtual

Definition at line 436 of file basecolormapplotwidget.cpp.

438 {
439  // We want to zAxisFilter the cell data by eliminating the contents of all the
440  // cells that have an intensity value less than threshold.
441 
442  QCPColorMap *color_map_p = static_cast<QCPColorMap *>(plottable(0));
443 
444  QCPColorMapData *map_data = color_map_p->data();
445 
446  int keySize = map_data->keySize();
447  int valueSize = map_data->valueSize();
448 
449  QCPRange keyRange = map_data->keyRange();
450  QCPRange valueRange = map_data->valueRange();
451 
452  double threshold =
453  m_colorMapPlotConfig.maxZValue * (threshold_percentage / 100);
454 
455  qDebug() << "maxZValue:" << m_colorMapPlotConfig.maxZValue
456  << "threshold:" << threshold;
457 
458  // Make a copy of the current config so that we can modify
459  // the xxxZvalue values.
460  ColorMapPlotConfig new_color_map_plot_config(m_colorMapPlotConfig);
461 
462  // But we need to reset these two values to be able to update them using
463  // std::min() and std::max() below.
464  new_color_map_plot_config.minZValue = std::numeric_limits<double>::max();
465  new_color_map_plot_config.maxZValue = std::numeric_limits<double>::min();
466 
467  // Filtered
468  QCPColorMapData *new_map_data =
469  new QCPColorMapData(keySize, valueSize, keyRange, valueRange);
470 
471  for(int iter = 0; iter < keySize; ++iter)
472  {
473  for(int jter = 0; jter < valueSize; ++jter)
474  {
475  double cell_data = map_data->cell(iter, jter);
476 
477  double new_cell_data = 0;
478 
479  if(cell_data > threshold)
480  new_cell_data = threshold;
481  else
482  new_cell_data = cell_data;
483 
484  // Store the new values here.
485  new_color_map_plot_config.minZValue =
486  //(new_cell_data < new_color_map_plot_config.minZValue
487  //? new_cell_data
488  //: new_color_map_plot_config.minZValue);
489  std::min(new_color_map_plot_config.minZValue, new_cell_data);
490 
491  new_color_map_plot_config.maxZValue =
492  //(new_cell_data > new_color_map_plot_config.maxZValue
493  //? new_cell_data
494  //: new_color_map_plot_config.maxZValue);
495  std::max(new_color_map_plot_config.maxZValue, new_cell_data);
496 
497  // qDebug() << "cell_data:" << cell_data
498  //<< "new_cell_data:" << new_cell_data
499  //<< "new_color_map_plot_config.minZValue:"
500  //<< new_color_map_plot_config.minZValue
501  //<< "new_color_map_plot_config.maxZValue:"
502  //<< new_color_map_plot_config.maxZValue;
503 
504  new_map_data->setCell(iter, jter, new_cell_data);
505  }
506  }
507 
508  color_map_p->data()->clear();
509 
510  // Will take ownership of the new_map_data.
511  color_map_p->setData(new_map_data);
512 
513  color_map_p->data()->recalculateDataBounds();
514  color_map_p->rescaleDataRange(true);
515 
516  // At this point the new color map data have taken their place, we can update
517  // the config. This, way any new filtering can take advantage of the new
518  // values and compute the threshold correctly.
519  m_colorMapPlotConfig = new_color_map_plot_config;
520 
521  // We should not do this, as the user might have zoomed to a region of
522  // interest.
523  // color_map_p->rescaleAxes();
524 
525  replot();
526 }

References m_colorMapPlotConfig, pappso::ColorMapPlotConfig::maxZValue, and pappso::ColorMapPlotConfig::minZValue.

◆ zAxisScale()

AxisScale pappso::BaseColorMapPlotWidget::zAxisScale ( ) const

Definition at line 708 of file basecolormapplotwidget.cpp.

709 {
711 }

References m_colorMapPlotConfig, and pappso::ColorMapPlotConfig::zAxisScale.

◆ zAxisScaleToLog10()

void pappso::BaseColorMapPlotWidget::zAxisScaleToLog10 ( )
virtual

Definition at line 322 of file basecolormapplotwidget.cpp.

323 {
324  // qDebug() << __FILE__ << __LINE__ << __FUNCTION__ << "()" ;
325 
327  {
328  qDebug() << "Asking to change z axis scale to log10 while it is already "
329  "like so.";
330 
331  return;
332  }
333 
334  // qDebug() << "m_colorMapPlotConfig:" << m_colorMapPlotConfig.toString();
335 
336  QCPColorMap *color_map_p = static_cast<QCPColorMap *>(plottable(0));
337 
338  QCPColorMapData *map_data = color_map_p->data();
339 
340  int keySize = map_data->keySize();
341  int valueSize = map_data->valueSize();
342 
343  QCPRange keyRange = map_data->keyRange();
344  QCPRange valueRange = map_data->valueRange();
345 
346  // Make a copy of the current config so that we can modify
347  // the xxxZvalue values.
348  ColorMapPlotConfig new_color_map_plot_config(m_colorMapPlotConfig);
349 
350  // But we need to reset these two values to be able to update them using
351  // std::min() and std::max() below.
352  new_color_map_plot_config.minZValue = std::numeric_limits<double>::max();
353  new_color_map_plot_config.maxZValue = std::numeric_limits<double>::min();
354 
355  // qDebug() << "new_color_map_plot_config"
356  //<< new_color_map_plot_config.toString();
357 
358  // Log-ified heat map.
359  QCPColorMapData *new_map_data =
360  new QCPColorMapData(keySize, valueSize, keyRange, valueRange);
361 
362  // qDebug() << "Starting iteration in the color map.";
363 
364  for(int iter = 0; iter < keySize; ++iter)
365  {
366  for(int jter = 0; jter < valueSize; ++jter)
367  {
368  double cell_data = map_data->cell(iter, jter);
369 
370  double new_cell_data = 0;
371 
372  if(!cell_data)
373  // The log10 would be -inf, but then we'd have a huge data range and
374  // the color map would look totally blue... that is like 0 intensity
375  // all over.
376  new_cell_data = -1;
377  else
378  new_cell_data = std::log10(cell_data);
379 
380  // Store the new values here.
381  new_color_map_plot_config.minZValue =
382  //(new_cell_data < new_color_map_plot_config.minZValue
383  //? new_cell_data
384  //: new_color_map_plot_config.minZValue);
385  std::min(new_color_map_plot_config.minZValue, new_cell_data);
386 
387  new_color_map_plot_config.maxZValue =
388  //(new_cell_data > new_color_map_plot_config.maxZValue
389  //? new_cell_data
390  //: new_color_map_plot_config.maxZValue);
391  std::max(new_color_map_plot_config.maxZValue, new_cell_data);
392 
393  // qDebug() << "cell_data:" << cell_data
394  //<< "new_cell_data:" << new_cell_data
395  //<< "new_color_map_plot_config.minZValue:"
396  //<< new_color_map_plot_config.minZValue
397  //<< "new_color_map_plot_config.maxZValue:"
398  //<< new_color_map_plot_config.maxZValue;
399 
400  new_map_data->setCell(iter, jter, new_cell_data);
401  }
402  }
403 
404  // qDebug() << "Finished iteration in the color map.";
405 
406  color_map_p->data()->clear();
407 
408  // Will take ownership of the new_map_data.
409  color_map_p->setData(new_map_data);
410 
411  color_map_p->data()->recalculateDataBounds();
412  color_map_p->rescaleDataRange(true);
413 
414  // At this point the new color map data have taken their place, we can update
415  // the config. This, way any new filtering can take advantage of the new
416  // values and compute the threshold correctly.
417  m_colorMapPlotConfig = new_color_map_plot_config;
418 
419  // Now we need to document the change.
421 
422  // qDebug() << "new_color_map_plot_config"
423  //<< new_color_map_plot_config.toString();
424 
425  // qDebug() << "m_colorMapPlotConfig:" << m_colorMapPlotConfig.toString();
426 
427  // We should not do this, as the user might have zoomed to a region of
428  // interest.
429  // color_map_p->rescaleAxes();
430 
431  replot();
432 }

References pappso::log10, m_colorMapPlotConfig, pappso::ColorMapPlotConfig::maxZValue, pappso::ColorMapPlotConfig::minZValue, and pappso::ColorMapPlotConfig::zAxisScale.

Member Data Documentation

◆ m_colorMapPlotConfig

◆ mpa_backupColorMapData

QCPColorMapData* pappso::BaseColorMapPlotWidget::mpa_backupColorMapData = nullptr
protected

◆ mpa_backupColorMapPlotConfig

ColorMapPlotConfig* pappso::BaseColorMapPlotWidget::mpa_backupColorMapPlotConfig = nullptr
protected

The documentation for this class was generated from the following files: