68 const QString &x_axis_label,
69 const QString &y_axis_label)
107 const std::vector<double> &keys,
108 const std::vector<double> &values)
110 QCPGraph *graph_p = graph(graph_index);
112 if(graph_p ==
nullptr)
113 qFatal(
"Programming error.");
121 const std::vector<double> &keys,
122 const std::vector<double> &values)
124 if(graph_p ==
nullptr)
125 qFatal(
"Pointer cannot be nullptr.");
131 QVector<double> key_qvector;
132 QVector<double> value_qvector;
143 QVector(keys.begin(),
146 QVector(values.begin(),
150 for(
auto &value : keys)
151 key_qvector.push_back(value);
153 for(
auto &value : values)
154 value_qvector.push_back(value);
156 graph_p->setData(key_qvector, value_qvector,
true);
158 graph_p->setPen(
m_pen);
169 QCPGraph *graph_p = graph(graph_index);
171 if(graph_p ==
nullptr)
172 qFatal(
"Programming error.");
174 graph_p->data().clear();
188 throw PappsoException(QString(
"The color to be used for the plot graph is invalid."));
193 QCPGraph *graph_p = addGraph();
195 graph_p->setLayer(
"plotsLayer");
201 QVector<double> key_qvector;
202 QVector<double> value_qvector;
212 QVector(trace.
xValues().begin(),
213 .trace.xValues()end());
215 QVector(trace.
yValues().begin(),
219 for(
auto &value : trace.
xValues())
221 key_qvector.push_back(value);
224 for(
auto &value : trace.
yValues())
226 value_qvector.push_back(value);
231 qDebug() <<
"The size of the x values for trace is:" << key_qvector.size()
232 <<
"and for y values is:" << value_qvector.size();
236 for(qsizetype iter = 0; iter < key_qvector.size(); ++iter)
237 text += QString(
"(%1,%2)\n")
238 .arg(key_qvector.at(iter), 0,
'f', 6)
239 .arg(value_qvector.at(iter), 0,
'f', 6);
241 qDebug().noquote() << text;
246 graph_p->setData(key_qvector, value_qvector,
true);
248 QPen pen = graph()->pen();
250 graph()->setPen(pen);
257 static_cast<void (QCPAbstractPlottable::*)(
bool)
>(&QCPAbstractPlottable::selectionChanged),
264 if(graphCount() == 1)
294 QCPGraph *theGraph = graph(index);
296 if(theGraph ==
nullptr)
298 "basetraceplotwidget.cpp @ indIntegrationLowerRangeForKey() -- ERROR "
299 "theGraph cannot be nullptr.");
305 QSharedPointer<QCPGraphDataContainer> graph_data_container_p = theGraph->data();
307 QCPDataRange dataRange = graph_data_container_p->dataRange();
309 if(!dataRange.isValid())
312 if(!dataRange.size())
315 if(dataRange.size() > 1)
317 double firstKey = graph_data_container_p->at(dataRange.begin())->key;
318 double lastKey = graph_data_container_p->at(dataRange.end())->key;
330 range.lower = graph_data_container_p->at(dataRange.end() - 2)->key;
331 range.upper = graph_data_container_p->at(dataRange.end() - 1)->key;
342 range.lower = firstKey;
343 range.upper = graph_data_container_p->at(dataRange.begin() + 1)->key;
351 range.lower = graph_data_container_p->findBegin(key,
true)->key;
352 range.upper = std::prev(graph_data_container_p->findEnd(key,
true))->key;
364 std::vector<double> keys;
366 QCPGraph *graph_p = graph(graph_index);
368 if(graph_p ==
nullptr)
369 qFatal(
"Programming error.");
371 QSharedPointer<QCPGraphDataContainer> graph_data_container_p = graph_p->data();
374 auto beginIt = graph_data_container_p->begin();
375 auto endIt = graph_data_container_p->end();
377 for(
auto iter = beginIt; iter != endIt; ++iter)
378 keys.push_back(iter->key);
387 std::vector<double> values;
389 QCPGraph *graph_p = graph(graph_index);
391 if(graph_p ==
nullptr)
392 qFatal(
"Programming error.");
394 QSharedPointer<QCPGraphDataContainer> graph_data_container_p = graph_p->data();
397 auto beginIt = graph_data_container_p->begin();
398 auto endIt = graph_data_container_p->end();
400 for(
auto iter = beginIt; iter != endIt; ++iter)
401 values.push_back(iter->key);
416 QCPRange key_range(xAxis->range().lower, xAxis->range().upper);
418 if(plottable_p !=
nullptr)
421 return plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
427 int graph_count = graphCount();
434 double temp_min_value = std::numeric_limits<double>::max();
435 double temp_max_value = std::numeric_limits<double>::min();
437 bool found_range =
false;
439 for(
int iter = 0; iter < graph_count; ++iter)
441 QCPGraph *plottable_p = graph(iter);
443 QCPRange value_range = plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
448 if(value_range.lower < temp_min_value)
449 temp_min_value = value_range.lower;
450 if(value_range.upper > temp_max_value)
451 temp_max_value = value_range.upper;
457 return QCPRange(temp_min_value, temp_max_value);
471 QCPAbstractPlottable *plottable_p = plottable(index);
473 if(plottable_p ==
nullptr)
474 qFatal(
"Programming error.");
483 if(graph_p ==
nullptr)
484 qFatal(
"Programming error.");
486 QCPItemTracer *tracer_p =
new QCPItemTracer(
this);
487 tracer_p->setGraph(graph_p);
488 tracer_p->setInterpolating(
true);
489 tracer_p->setGraphKey(
x);
490 tracer_p->updatePosition();
492 double value = tracer_p->position->value();
494 tracer_p->setGraph(
nullptr);
497 removeItem(tracer_p);
506 QCPGraph *graph_p = graph(index);
508 if(graph_p ==
nullptr)
509 qFatal(
"Programming error.");
517 [[maybe_unused]] QCPAxis::SelectablePart part,
522 m_context.m_keyboardModifiers = QGuiApplication::queryKeyboardModifiers();
524 if(
m_context.m_keyboardModifiers & Qt::ControlModifier)
543 if(axis->orientation() == Qt::Vertical)
545 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
556 yAxis->setRange(value_range);
574 m_context.m_pressedMouseButtons ^=
event->button();
587 double xLower = xAxis->range().lower;
588 double xUpper = xAxis->range().upper;
591 double yLower = yAxis->range().lower;
592 double yUpper = yAxis->range().upper;
618 xAxis->setRange(xLower, xUpper - xDelta);
644 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
654 yAxis->setRange(value_range);
669 yAxis->setRange(yLower, yUpper - yDelta);
713 xAxis->setRange(QCPRange(
m_context.m_xRegionRangeStart,
m_context.m_xRegionRangeEnd));
719 yAxis->setRange(xAxis->range().lower,
728 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
735 yAxis->setRange(value_range);
757 xAxis->setRange(QCPRange(
m_context.m_xRegionRangeStart,
m_context.m_xRegionRangeEnd));
761 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
768 yAxis->setRange(value_range);
771 yAxis->setRange(QCPRange(
m_context.m_yRegionRangeStart,
m_context.m_yRegionRangeEnd));
789 "This function can only be called if the mouse click was on one of the "
799 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
806 yAxis->setRange(value_range);
839 QCPGraph *graph_p = graph(index);
848 if(graph_p ==
nullptr)
849 qFatal(
"Programming error. Pointer cannot be nullptr.");
853 QSharedPointer<QCPGraphDataContainer> graph_data_container_p = graph_p->data();
856 auto beginIt = graph_data_container_p->begin();
857 auto endIt = graph_data_container_p->end();
859 for(
auto iter = beginIt; iter != endIt; ++iter)
869 QCPGraph *graph_p = graph(index);
871 if(graph_p ==
nullptr)
872 qFatal(
"Programming error.");
874 return toTrace(x_axis_range, graph_p);
885 QSharedPointer<QCPGraphDataContainer> graph_data_container_sp;
887 graph_data_container_sp = graph_p->data();
890 auto beginIt = graph_data_container_sp->findBegin(x_axis_range.lower,
893 auto endIt = graph_data_container_sp->findEnd(x_axis_range.upper,
896 for(
auto iter = beginIt; iter != endIt; ++iter)
897 data_trace.push_back(
DataPoint(iter->key, iter->value));
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...