]> Devoid-pointer.net GitWeb - anyanka.git/commitdiff
Integrate peaks even when the baseline is drawn from right to left
authorMichal Malý <madcatxster@prifuk.cz>
Mon, 10 Mar 2014 18:21:16 +0000 (19:21 +0100)
committerMichal Malý <madcatxster@prifuk.cz>
Mon, 10 Mar 2014 18:21:16 +0000 (19:21 +0100)
gui/graphview.cpp
integrator.cpp
signalcontroller.cpp
signaldrawer.cpp

index ee5ee904eb634ee4fbee3ca215f386454286026a..329e1145fbb13ffead58a4492811651733acdd78 100644 (file)
@@ -142,9 +142,6 @@ void GraphView::mousePressEvent(QMouseEvent* ev)
           m_mouseMode = GraphView::MouseMode::CROSSHAIR;
           break;
         case GraphView::MouseMode::INTEGRATE:
-          if (m_integrateStartXPix > m_integrateStopXPix)
-            std::swap(m_integrateStartXPix, m_integrateStopXPix);
-
           PeakDrawData pdData = m_controller->integratePeak(xPixToRel(m_integrateStartXPix), yPixToRel(m_integrateStartYPix),
                                       xPixToRel(m_integrateStopXPix), yPixToRel(m_integrateStopYPix));
           eraseIntegrationBaseline(true);
index 5e8365c3fec1b4b59e274b712626881712d1e211..6c376121436ba245932a32f7b06784ac3130d333 100644 (file)
@@ -90,27 +90,32 @@ Integrator::ReturnCode Integrator::integrate(size_t startIdx, size_t stopIdx, do
     return ReturnCode::E_INVAL;
   }
 
+  if (startIdx > stopIdx) {
+    std::swap(startIdx, stopIdx);
+    std::swap(startY, stopY);
+  }
+
   qDebug() << "INTEG" << startIdx << stopIdx << startY << stopY;
 
-  slope = (stopY - startY) / (stopIdx - startIdx);
+  slope = (stopY - startY) / static_cast<double>(stopIdx - startIdx);
   /* Try to find first intersection */
   if (startY < m_signal->valueAt(startIdx)) {
     expectDownward = true;
-    qDebug() << "Expecting downward peak";
+    //qDebug() << "Expecting downward peak";
   } else {
     expectDownward = false;
-    qDebug() << "Expecting upward peak";
+    //qDebug() << "Expecting upward peak";
   }
   for (i = startIdx; i <= stopIdx; i++) {
     double value = m_signal->valueAt(i);
-    double blY = slope * (i - startIdx) + startY;
+    double blY = slope * static_cast<double>(i - startIdx) + startY;
 
     if (expectDownward && blY > value) { /* Found first intersection */
-      startIntersIdx = i-1;
+      startIntersIdx = i;
       startYVal = blY;
       break;
     } else if (!expectDownward && blY < value) { /* Found first intersection */
-      startIntersIdx = i-1;
+      startIntersIdx = i;
       startYVal = blY;
       break;
     }
@@ -123,13 +128,13 @@ Integrator::ReturnCode Integrator::integrate(size_t startIdx, size_t stopIdx, do
   /* Try to find second intersection */
   for (; i <= stopIdx; i++) {
     double value = m_signal->valueAt(i);
-    double blY = slope * (i - startIdx) + startY;
+    double blY = slope * static_cast<double>(i - startIdx) + startY;
 
-    if (expectDownward && blY <= value) {
+    if (expectDownward && blY < value) {
       stopIntersIdx = i;
       stopYVal = blY;
       break;
-    } else if (!expectDownward && blY >= value) {
+    } else if (!expectDownward && blY > value) {
       stopIntersIdx = i;
       stopYVal = blY;
       break;
@@ -143,7 +148,7 @@ Integrator::ReturnCode Integrator::integrate(size_t startIdx, size_t stopIdx, do
   /* Integrate */
   peakValueIdx = startIntersIdx;
   for (i = startIntersIdx+1; i < stopIntersIdx; i++) {
-    double blXA = slope * (i - startIntersIdx - 1) + startY;
+    double blXA = slope * (i - startIntersIdx) + startY;
     double blXB = slope * (i - startIntersIdx) + startY;
     double valA = m_signal->valueAt(i-1);
     double valB = m_signal->valueAt(i);
index 70e0f784ee0e5f6f6698adb5a924323382657a98..88f685ca1b18c7af56c84efcab32f3fa84b65dc8 100644 (file)
@@ -23,6 +23,7 @@
 #include "signalcontroller.h"
 #include "logger.h"
 #include <cfloat>
+#include <utility>
 
 #include <QDebug>
 
index b61433a35885ab12e846810e24f1aed05609cb85..107f60dfe26fb93411952a2765602c8a9f5f8209 100644 (file)
@@ -102,7 +102,7 @@ bool SignalDrawer::setDimensions(const int width, const int height)
   m_gWidth = width - SCALE_MARGIN_VALUE;
   m_gHeight = height - SCALE_MARGIN_TIME;
 
-  qDebug() << __QFUNC__ << width << height << m_width << m_height;
+  //qDebug() << __QFUNC__ << width << height << m_width << m_height;
 
   return draw(m_relXMin, m_relYMin, m_relXMax, m_relYMax);
 }
@@ -305,8 +305,8 @@ bool SignalDrawer::renderGraph(QPixmap* const target)
 
   xStep = static_cast<double>(m_gWidth) / m_gdData->ddataLen;
   yStep = static_cast<double>(m_gHeight) / (m_relYMax - m_relYMin);
-  Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + " yStep: " + QString::number(yStep)
-              + " fY " + QString::number(m_relYMin) + " tY " + QString::number(m_relYMax));
+  /*Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + " yStep: " + QString::number(yStep)
+              + " fY " + QString::number(m_relYMin) + " tY " + QString::number(m_relYMax));*/
   fromYPix = m_gHeight - yStep * (m_gdData->ddata[0] - m_relYMin);
   for (size_t i = 1; i < m_gdData->ddataLen; i++) {
     int toXPix = xStep * i + SCALE_MARGIN_VALUE;