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())
223 key_qvector.push_back(value);
226 for(
auto &value : trace.
yValues())
228 value_qvector.push_back(value);
233 qDebug() <<
"The size of the x values for trace is:" << key_qvector.size()
234 <<
"and for y values is:" << value_qvector.size();
238 for(qsizetype iter = 0; iter < key_qvector.size(); ++iter)
239 text += QString(
"(%1,%2)\n")
240 .arg(key_qvector.at(iter), 0,
'f', 6)
241 .arg(value_qvector.at(iter), 0,
'f', 6);
243 qDebug().noquote() << text;
248 graph_p->setData(key_qvector, value_qvector,
true);
250 QPen pen = graph()->pen();
252 graph()->setPen(pen);
258 static_cast<void (QCPAbstractPlottable::*)(
bool)
>(
259 &QCPAbstractPlottable::selectionChanged),
268 if(graphCount() == 1)
300 QCPGraph *theGraph = graph(index);
302 if(theGraph ==
nullptr)
304 "basetraceplotwidget.cpp @ indIntegrationLowerRangeForKey() -- ERROR "
305 "theGraph cannot be nullptr.");
311 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
314 QCPDataRange dataRange = graph_data_container_p->dataRange();
316 if(!dataRange.isValid())
319 if(!dataRange.size())
322 if(dataRange.size() > 1)
324 double firstKey = graph_data_container_p->at(dataRange.begin())->key;
325 double lastKey = graph_data_container_p->at(dataRange.end())->key;
337 range.lower = graph_data_container_p->at(dataRange.end() - 2)->key;
338 range.upper = graph_data_container_p->at(dataRange.end() - 1)->key;
349 range.lower = firstKey;
350 range.upper = graph_data_container_p->at(dataRange.begin() + 1)->key;
359 graph_data_container_p->findBegin(key,
true)->key;
361 std::prev(graph_data_container_p->findEnd(key,
true))
374 std::vector<double> keys;
376 QCPGraph *graph_p = graph(graph_index);
378 if(graph_p ==
nullptr)
379 qFatal(
"Programming error.");
381 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
385 auto beginIt = graph_data_container_p->begin();
386 auto endIt = graph_data_container_p->end();
388 for(
auto iter = beginIt; iter != endIt; ++iter)
389 keys.push_back(iter->key);
398 std::vector<double> values;
400 QCPGraph *graph_p = graph(graph_index);
402 if(graph_p ==
nullptr)
403 qFatal(
"Programming error.");
405 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
409 auto beginIt = graph_data_container_p->begin();
410 auto endIt = graph_data_container_p->end();
412 for(
auto iter = beginIt; iter != endIt; ++iter)
413 values.push_back(iter->key);
429 QCPRange key_range(xAxis->range().lower, xAxis->range().upper);
431 if(plottable_p !=
nullptr)
434 return plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
440 int graph_count = graphCount();
447 double temp_min_value = std::numeric_limits<double>::max();
448 double temp_max_value = std::numeric_limits<double>::min();
450 bool found_range =
false;
452 for(
int iter = 0; iter < graph_count; ++iter)
454 QCPGraph *plottable_p = graph(iter);
456 QCPRange value_range =
457 plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
462 if(value_range.lower < temp_min_value)
463 temp_min_value = value_range.lower;
464 if(value_range.upper > temp_max_value)
465 temp_max_value = value_range.upper;
471 return QCPRange(temp_min_value, temp_max_value);
485 QCPAbstractPlottable *plottable_p = plottable(index);
487 if(plottable_p ==
nullptr)
488 qFatal(
"Programming error.");
497 if(graph_p ==
nullptr)
498 qFatal(
"Programming error.");
500 QCPItemTracer *tracer_p =
new QCPItemTracer(
this);
501 tracer_p->setGraph(graph_p);
502 tracer_p->setInterpolating(
true);
503 tracer_p->setGraphKey(
x);
504 tracer_p->updatePosition();
506 double value = tracer_p->position->value();
508 tracer_p->setGraph(
nullptr);
511 removeItem(tracer_p);
520 QCPGraph *graph_p = graph(index);
522 if(graph_p ==
nullptr)
523 qFatal(
"Programming error.");
532 [[maybe_unused]] QCPAxis::SelectablePart part,
537 m_context.m_keyboardModifiers = QGuiApplication::queryKeyboardModifiers();
539 if(
m_context.m_keyboardModifiers & Qt::ControlModifier)
558 if(axis->orientation() == Qt::Vertical)
560 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
571 yAxis->setRange(value_range);
589 m_context.m_pressedMouseButtons ^=
event->button();
602 double xLower = xAxis->range().lower;
603 double xUpper = xAxis->range().upper;
606 double yLower = yAxis->range().lower;
607 double yUpper = yAxis->range().upper;
634 xAxis->setRange(xLower, xUpper - xDelta);
660 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
670 yAxis->setRange(value_range);
686 yAxis->setRange(yLower, yUpper - yDelta);
737 yAxis->setRange(xAxis->range().lower,
738 std::max<double>(
m_context.m_yRegionRangeStart,
747 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
754 yAxis->setRange(value_range);
781 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
788 yAxis->setRange(value_range);
810 "This function can only be called if the mouse click was on one of the "
820 if(
m_context.m_keyboardModifiers & Qt::ShiftModifier)
827 yAxis->setRange(value_range);
860 QCPGraph *graph_p = graph(index);
869 if(graph_p ==
nullptr)
870 qFatal(
"Programming error. Pointer cannot be nullptr.");
874 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
878 auto beginIt = graph_data_container_p->begin();
879 auto endIt = graph_data_container_p->end();
881 for(
auto iter = beginIt; iter != endIt; ++iter)
891 QCPGraph *graph_p = graph(index);
893 if(graph_p ==
nullptr)
894 qFatal(
"Programming error.");
896 return toTrace(x_axis_range, graph_p);
902 const QCPGraph *graph_p)
const
908 QSharedPointer<QCPGraphDataContainer> graph_data_container_sp;
910 graph_data_container_sp = graph_p->data();
913 auto beginIt = graph_data_container_sp->findBegin(x_axis_range.lower,
916 auto endIt = graph_data_container_sp->findEnd(x_axis_range.upper,
919 for(
auto iter = beginIt; iter != endIt; ++iter)
920 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...