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;
144 QVector(keys.begin(),
147 QVector(values.begin(),
151 for(
auto &value : keys)
152 key_qvector.push_back(value);
154 for(
auto &value : values)
155 value_qvector.push_back(value);
157 graph_p->setData(key_qvector, value_qvector,
true);
159 graph_p->setPen(
m_pen);
170 QCPGraph *graph_p = graph(graph_index);
172 if(graph_p ==
nullptr)
173 qFatal(
"Programming error.");
175 graph_p->data().clear();
190 QString(
"The color to be used for the plot graph is invalid."));
195 QCPGraph *graph_p = addGraph();
197 graph_p->setLayer(
"plotsLayer");
203 QVector<double> key_qvector;
204 QVector<double> value_qvector;
214 QVector(trace.
xValues().begin(),
215 .trace.xValues()end());
217 QVector(trace.
yValues().begin(),
221 for(
auto &value : trace.
xValues())
222 key_qvector.push_back(value);
224 for(
auto &value : trace.
yValues())
225 value_qvector.push_back(value);
227 graph_p->setData(key_qvector, value_qvector,
true);
229 QPen pen = graph()->pen();
231 graph()->setPen(pen);
237 static_cast<void (QCPAbstractPlottable::*)(
bool)
>(
238 &QCPAbstractPlottable::selectionChanged),
247 if(graphCount() == 1)
279 QCPGraph *theGraph = graph(index);
281 if(theGraph ==
nullptr)
283 "basetraceplotwidget.cpp @ indIntegrationLowerRangeForKey() -- ERROR "
284 "theGraph cannot be nullptr.");
290 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
293 QCPDataRange dataRange = graph_data_container_p->dataRange();
295 if(!dataRange.isValid())
298 if(!dataRange.size())
301 if(dataRange.size() > 1)
303 double firstKey = graph_data_container_p->at(dataRange.begin())->key;
304 double lastKey = graph_data_container_p->at(dataRange.end())->key;
316 range.lower = graph_data_container_p->at(dataRange.end() - 2)->key;
317 range.upper = graph_data_container_p->at(dataRange.end() - 1)->key;
328 range.lower = firstKey;
329 range.upper = graph_data_container_p->at(dataRange.begin() + 1)->key;
338 graph_data_container_p->findBegin(key,
true)->key;
340 std::prev(graph_data_container_p->findEnd(key,
true))
353 std::vector<double> keys;
355 QCPGraph *graph_p = graph(graph_index);
357 if(graph_p ==
nullptr)
358 qFatal(
"Programming error.");
360 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
364 auto beginIt = graph_data_container_p->begin();
365 auto endIt = graph_data_container_p->end();
367 for(
auto iter = beginIt; iter != endIt; ++iter)
368 keys.push_back(iter->key);
377 std::vector<double> values;
379 QCPGraph *graph_p = graph(graph_index);
381 if(graph_p ==
nullptr)
382 qFatal(
"Programming error.");
384 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
388 auto beginIt = graph_data_container_p->begin();
389 auto endIt = graph_data_container_p->end();
391 for(
auto iter = beginIt; iter != endIt; ++iter)
392 values.push_back(iter->key);
408 QCPRange key_range(xAxis->range().lower, xAxis->range().upper);
410 if(plottable_p !=
nullptr)
413 return plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
419 int graph_count = graphCount();
426 double temp_min_value = std::numeric_limits<double>::max();
427 double temp_max_value = std::numeric_limits<double>::min();
429 bool found_range =
false;
431 for(
int iter = 0; iter < graph_count; ++iter)
433 QCPGraph *plottable_p = graph(iter);
435 QCPRange value_range =
436 plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
441 if(value_range.lower < temp_min_value)
442 temp_min_value = value_range.lower;
443 if(value_range.upper > temp_max_value)
444 temp_max_value = value_range.upper;
450 return QCPRange(temp_min_value, temp_max_value);
464 QCPAbstractPlottable *plottable_p = plottable(index);
466 if(plottable_p ==
nullptr)
467 qFatal(
"Programming error.");
476 if(graph_p ==
nullptr)
477 qFatal(
"Programming error.");
479 QCPItemTracer tracer(
this);
480 tracer.setGraph(graph_p);
481 tracer.setInterpolating(
true);
482 tracer.setGraphKey(
x);
483 tracer.updatePosition();
485 return tracer.position->value();
492 QCPGraph *graph_p = graph(index);
494 if(graph_p ==
nullptr)
495 qFatal(
"Programming error.");
504 [[maybe_unused]] QCPAxis::SelectablePart part,
530 if(axis->orientation() == Qt::Vertical)
543 yAxis->setRange(value_range);
574 double xLower = xAxis->range().lower;
575 double xUpper = xAxis->range().upper;
578 double yLower = yAxis->range().lower;
579 double yUpper = yAxis->range().upper;
606 xAxis->setRange(xLower, xUpper - xDelta);
642 yAxis->setRange(value_range);
658 yAxis->setRange(yLower, yUpper - yDelta);
709 yAxis->setRange(xAxis->range().lower,
726 yAxis->setRange(value_range);
760 yAxis->setRange(value_range);
782 "This function can only be called if the mouse click was on one of the "
799 yAxis->setRange(value_range);
832 QCPGraph *graph_p = graph(index);
841 if(graph_p ==
nullptr)
842 qFatal(
"Programming error. Pointer cannot be nullptr.");
846 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
850 auto beginIt = graph_data_container_p->begin();
851 auto endIt = graph_data_container_p->end();
853 for(
auto iter = beginIt; iter != endIt; ++iter)
863 QCPGraph *graph_p = graph(index);
865 if(graph_p ==
nullptr)
866 qFatal(
"Programming error.");
868 return toTrace(x_axis_range, graph_p);
874 const QCPGraph *graph_p)
const
880 QSharedPointer<QCPGraphDataContainer> graph_data_container_sp;
882 graph_data_container_sp = graph_p->data();
885 auto beginIt = graph_data_container_sp->findBegin(x_axis_range.lower,
888 auto endIt = graph_data_container_sp->findEnd(x_axis_range.upper,
891 for(
auto iter = beginIt; iter != endIt; ++iter)
892 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...