36#include "../../exception/exceptionnotpossible.h"
37#include "../../pappsoexception.h"
69 const QString &x_axis_label,
70 const QString &y_axis_label)
108 const std::vector<double> &keys,
109 const std::vector<double> &values)
111 QCPGraph *graph_p = graph(graph_index);
113 if(graph_p ==
nullptr)
114 qFatal(
"Programming error.");
122 const std::vector<double> &keys,
123 const std::vector<double> &values)
125 if(graph_p ==
nullptr)
126 qFatal(
"Pointer cannot be nullptr.");
132 QVector<double> key_qvector;
133 QVector<double> value_qvector;
135#pragma GCC warning "Filippo Rusconi: Please check if the bug was fixed in Qt"
145 QVector(keys.begin(),
148 QVector(values.begin(),
152 for(
auto &value : keys)
153 key_qvector.push_back(value);
155 for(
auto &value : values)
156 value_qvector.push_back(value);
158 graph_p->setData(key_qvector, value_qvector,
true);
160 graph_p->setPen(
m_pen);
171 QCPGraph *graph_p = graph(graph_index);
173 if(graph_p ==
nullptr)
174 qFatal(
"Programming error.");
176 graph_p->data().clear();
191 QString(
"The color to be used for the plot graph is invalid."));
196 QCPGraph *graph_p = addGraph();
198 graph_p->setLayer(
"plotsLayer");
204 QVector<double> key_qvector;
205 QVector<double> value_qvector;
207#pragma GCC warning "Filippo Rusconi: Please check if the bug was fixed in Qt"
217 QVector(trace.
xValues().begin(),
218 .trace.xValues()end());
220 QVector(trace.
yValues().begin(),
224 for(
auto &value : trace.
xValues())
225 key_qvector.push_back(value);
227 for(
auto &value : trace.
yValues())
228 value_qvector.push_back(value);
230 graph_p->setData(key_qvector, value_qvector,
true);
232 QPen pen = graph()->pen();
234 graph()->setPen(pen);
240 static_cast<void (QCPAbstractPlottable::*)(
bool)
>(
241 &QCPAbstractPlottable::selectionChanged),
250 if(graphCount() == 1)
282 QCPGraph *theGraph = graph(index);
284 if(theGraph ==
nullptr)
286 "basetraceplotwidget.cpp @ indIntegrationLowerRangeForKey() -- ERROR "
287 "theGraph cannot be nullptr.");
293 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
296 QCPDataRange dataRange = graph_data_container_p->dataRange();
298 if(!dataRange.isValid())
301 if(!dataRange.size())
304 if(dataRange.size() > 1)
306 double firstKey = graph_data_container_p->at(dataRange.begin())->key;
307 double lastKey = graph_data_container_p->at(dataRange.end())->key;
319 range.lower = graph_data_container_p->at(dataRange.end() - 2)->key;
320 range.upper = graph_data_container_p->at(dataRange.end() - 1)->key;
331 range.lower = firstKey;
332 range.upper = graph_data_container_p->at(dataRange.begin() + 1)->key;
341 graph_data_container_p->findBegin(key,
true)->key;
343 std::prev(graph_data_container_p->findEnd(key,
true))
356 std::vector<double> keys;
358 QCPGraph *graph_p = graph(graph_index);
360 if(graph_p ==
nullptr)
361 qFatal(
"Programming error.");
363 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
367 auto beginIt = graph_data_container_p->begin();
368 auto endIt = graph_data_container_p->end();
370 for(
auto iter = beginIt; iter != endIt; ++iter)
371 keys.push_back(iter->key);
380 std::vector<double> values;
382 QCPGraph *graph_p = graph(graph_index);
384 if(graph_p ==
nullptr)
385 qFatal(
"Programming error.");
387 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
391 auto beginIt = graph_data_container_p->begin();
392 auto endIt = graph_data_container_p->end();
394 for(
auto iter = beginIt; iter != endIt; ++iter)
395 values.push_back(iter->key);
411 QCPRange key_range(xAxis->range().lower, xAxis->range().upper);
413 if(plottable_p !=
nullptr)
416 return plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
422 int graph_count = graphCount();
429 double temp_min_value = std::numeric_limits<double>::max();
430 double temp_max_value = std::numeric_limits<double>::min();
432 bool found_range =
false;
434 for(
int iter = 0; iter < graph_count; ++iter)
436 QCPGraph *plottable_p = graph(iter);
438 QCPRange value_range =
439 plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
444 if(value_range.lower < temp_min_value)
445 temp_min_value = value_range.lower;
446 if(value_range.upper > temp_max_value)
447 temp_max_value = value_range.upper;
453 return QCPRange(temp_min_value, temp_max_value);
467 QCPAbstractPlottable *plottable_p = plottable(index);
469 if(plottable_p ==
nullptr)
470 qFatal(
"Programming error.");
479 if(graph_p ==
nullptr)
480 qFatal(
"Programming error.");
482 QCPItemTracer tracer(
this);
483 tracer.setGraph(graph_p);
484 tracer.setInterpolating(
true);
485 tracer.setGraphKey(
x);
486 tracer.updatePosition();
488 return tracer.position->value();
495 QCPGraph *graph_p = graph(index);
497 if(graph_p ==
nullptr)
498 qFatal(
"Programming error.");
507 [[maybe_unused]] QCPAxis::SelectablePart part,
533 if(axis->orientation() == Qt::Vertical)
546 yAxis->setRange(value_range);
577 double xLower = xAxis->range().lower;
578 double xUpper = xAxis->range().upper;
581 double yLower = yAxis->range().lower;
582 double yUpper = yAxis->range().upper;
609 xAxis->setRange(xLower, xUpper - xDelta);
645 yAxis->setRange(value_range);
661 yAxis->setRange(yLower, yUpper - yDelta);
712 yAxis->setRange(xAxis->range().lower,
729 yAxis->setRange(value_range);
763 yAxis->setRange(value_range);
785 "This function can only be called if the mouse click was on one of the "
802 yAxis->setRange(value_range);
835 QCPGraph *graph_p = graph(index);
844 if(graph_p ==
nullptr)
845 qFatal(
"Programming error. Pointer cannot be nullptr.");
849 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
853 auto beginIt = graph_data_container_p->begin();
854 auto endIt = graph_data_container_p->end();
856 for(
auto iter = beginIt; iter != endIt; ++iter)
866 QCPGraph *graph_p = graph(index);
868 if(graph_p ==
nullptr)
869 qFatal(
"Programming error.");
871 return toTrace(x_axis_range, graph_p);
877 const QCPGraph *graph_p)
const
883 QSharedPointer<QCPGraphDataContainer> graph_data_container_sp;
885 graph_data_container_sp = graph_p->data();
888 auto beginIt = graph_data_container_sp->findBegin(x_axis_range.lower,
891 auto endIt = graph_data_container_sp->findEnd(x_axis_range.upper,
894 for(
auto iter = beginIt; iter != endIt; ++iter)
895 data_trace.push_back(
DataPoint(iter->key, iter->value));
double m_xRegionRangeStart
Qt::KeyboardModifiers m_keyboardModifiers
QPointF m_currentDragPoint
double m_yRegionRangeStart
Qt::MouseButtons m_pressedMouseButtons
A simple container of DataPoint instances.
std::vector< pappso_double > xValues() const
std::vector< pappso_double > yValues() const
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...