From 9060c2b51902fb35dee73945ed60196f171328e1 Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Tue, 19 Dec 2017 16:58:22 +0100
Subject: [PATCH] beautifull mass delta histogram

---
 src/gui/project_view/project_view.ui   | 149 ++++++++++++++-----------
 src/gui/project_view/projectwindow.cpp |  29 +++--
 src/utils/utils.cpp                    |   7 +-
 3 files changed, 109 insertions(+), 76 deletions(-)

diff --git a/src/gui/project_view/project_view.ui b/src/gui/project_view/project_view.ui
index 92edffd52..b50818ffe 100644
--- a/src/gui/project_view/project_view.ui
+++ b/src/gui/project_view/project_view.ui
@@ -24,7 +24,7 @@
        <string/>
       </property>
       <property name="currentIndex">
-       <number>0</number>
+       <number>3</number>
       </property>
       <widget class="QWidget" name="identifications">
        <attribute name="title">
@@ -270,73 +270,92 @@
         <item row="0" column="0">
          <layout class="QVBoxLayout" name="verticalLayout_5">
           <item>
-           <layout class="QFormLayout" name="formLayout_2">
-            <item row="0" column="0">
-             <layout class="QFormLayout" name="formLayout_3"/>
-            </item>
-            <item row="0" column="1">
-             <widget class="QComboBox" name="precision_unit_combobox">
-              <item>
-               <property name="text">
-                <string>ppm</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>dalton</string>
+           <widget class="QWidget" name="widget" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <layout class="QVBoxLayout" name="verticalLayout_7">
+             <item>
+              <layout class="QFormLayout" name="formLayout_2">
+               <property name="sizeConstraint">
+                <enum>QLayout::SetMinimumSize</enum>
                </property>
-              </item>
-             </widget>
-            </item>
-            <item row="1" column="0">
-             <widget class="QLabel" name="label_2">
-              <property name="text">
-               <string>mean</string>
-              </property>
-             </widget>
-            </item>
-            <item row="1" column="1">
-             <widget class="QLabel" name="mass_precision_mean_label">
-              <property name="text">
-               <string>0</string>
-              </property>
-             </widget>
-            </item>
-            <item row="2" column="0">
-             <widget class="QLabel" name="label_4">
-              <property name="text">
-               <string>median</string>
-              </property>
-             </widget>
-            </item>
-            <item row="2" column="1">
-             <widget class="QLabel" name="mass_precision_median_label">
-              <property name="text">
-               <string>0</string>
-              </property>
-             </widget>
-            </item>
-            <item row="3" column="0">
-             <widget class="QLabel" name="label_5">
-              <property name="text">
-               <string>standard deviation</string>
-              </property>
-             </widget>
-            </item>
-            <item row="3" column="1">
-             <widget class="QLabel" name="mass_precision_sd_label">
-              <property name="toolTip">
-               <string>Mass deviation is computed on all valid and checked proteins but not decoy</string>
-              </property>
-              <property name="text">
-               <string>0</string>
-              </property>
-             </widget>
-            </item>
-           </layout>
+               <item row="0" column="1">
+                <widget class="QComboBox" name="precision_unit_combobox">
+                 <item>
+                  <property name="text">
+                   <string>ppm</string>
+                  </property>
+                 </item>
+                 <item>
+                  <property name="text">
+                   <string>dalton</string>
+                  </property>
+                 </item>
+                </widget>
+               </item>
+               <item row="1" column="0">
+                <widget class="QLabel" name="label_2">
+                 <property name="text">
+                  <string>mean</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="1">
+                <widget class="QLabel" name="mass_precision_mean_label">
+                 <property name="text">
+                  <string>0</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="2" column="0">
+                <widget class="QLabel" name="label_4">
+                 <property name="text">
+                  <string>median</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="2" column="1">
+                <widget class="QLabel" name="mass_precision_median_label">
+                 <property name="text">
+                  <string>0</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="3" column="0">
+                <widget class="QLabel" name="label_5">
+                 <property name="text">
+                  <string>standard deviation</string>
+                 </property>
+                </widget>
+               </item>
+               <item row="3" column="1">
+                <widget class="QLabel" name="mass_precision_sd_label">
+                 <property name="toolTip">
+                  <string>Mass deviation is computed on all valid and checked proteins but not decoy</string>
+                 </property>
+                 <property name="text">
+                  <string>0</string>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </item>
+            </layout>
+           </widget>
           </item>
           <item>
-           <widget class="QCustomPlot" name="mass_histogram_widget" native="true"/>
+           <widget class="QCustomPlot" name="mass_histogram_widget" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+           </widget>
           </item>
          </layout>
         </item>
diff --git a/src/gui/project_view/projectwindow.cpp b/src/gui/project_view/projectwindow.cpp
index 76dd32d65..bc914c275 100644
--- a/src/gui/project_view/projectwindow.cpp
+++ b/src/gui/project_view/projectwindow.cpp
@@ -67,6 +67,26 @@ ProjectWindow::ProjectWindow(MainWindow *parent):
     _p_waiting_message_dialog = new WaitingMessageDialog(this);
 
 
+    ui->mass_histogram_widget->xAxis->setLabel("mass delta");
+    ui->mass_histogram_widget->yAxis->setLabel("count");
+    ui->mass_histogram_widget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom );
+    ui->mass_histogram_widget->axisRects().at(0)->setRangeDrag(Qt::Horizontal);
+    ui->mass_histogram_widget->axisRects().at(0)->setRangeZoom(Qt::Horizontal);
+    //legend->setVisible(false);
+    ui->mass_histogram_widget->legend->setFont(QFont("Helvetica",9));
+// set locale to english, so we get english decimal separator:
+//setLocale(QLocale(QLocale::English, QLocale::UnitedKingdom));
+    setFocusPolicy(Qt::ClickFocus);
+
+    QCPGraph * p_graph = ui->mass_histogram_widget->addGraph();
+    //p_graph->setName("raw xic");
+    //QPen pen;
+    //pen.setColor(getNewColors());
+    //graph()->setPen(pen);
+    //graph()->setName(lineNames.at(i-QCPGraph::lsNone));
+    p_graph->setLineStyle(QCPGraph::LineStyle::lsStepCenter);
+    //p_graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 2.0));
+
 
 #if QT_VERSION >= 0x050000
     // Qt5 code
@@ -294,14 +314,7 @@ void ProjectWindow::computeMassPrecision() {
             y.push_back(mass_pair.second);
         }
 
-        QCPGraph * p_graph = ui->mass_histogram_widget->addGraph();
-        //p_graph->setName("raw xic");
-        //QPen pen;
-        //pen.setColor(getNewColors());
-        //graph()->setPen(pen);
-        //graph()->setName(lineNames.at(i-QCPGraph::lsNone));
-        p_graph->setLineStyle(QCPGraph::LineStyle::lsStepCenter);
-        //p_graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 2.0));
+        QCPGraph * p_graph = ui->mass_histogram_widget->graph();
         p_graph->setData(x,y);
         p_graph->rescaleAxes(true);
         ui->mass_histogram_widget->rescaleAxes();
diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp
index 32aaeb9df..0b9292d37 100644
--- a/src/utils/utils.cpp
+++ b/src/utils/utils.cpp
@@ -39,7 +39,7 @@ const QString Utils::getDatabaseName(ExternalDatabase database) {
 
 
 std::vector<std::pair<pappso::pappso_double, size_t>> Utils::getHistogram(std::vector<pappso::pappso_double> data_values, unsigned int number_of_class) {
-    std::vector<std::pair<pappso::pappso_double, size_t>> histogram(number_of_class);
+    std::vector<std::pair<pappso::pappso_double, size_t>> histogram(number_of_class+1);
     try {
         qDebug() << "Utils::getHistogram begin";
 
@@ -51,11 +51,12 @@ std::vector<std::pair<pappso::pappso_double, size_t>> Utils::getHistogram(std::v
         qDebug() << "Utils::getHistogram number_of_class offset=" << offset;
         for (unsigned int i= 0; i < histogram.size(); i++) {
             histogram[i] = std::pair<pappso::pappso_double, size_t> {(min + (offset * i) + (offset/2)), 0};
+            qDebug() << "Utils::getHistogram x=" << histogram[i].first;
         }
         qDebug() << "Utils::getHistogram data_values";
         for (pappso::pappso_double value :data_values) {
-            qDebug() << "Utils::getHistogram value=" << value;
-            unsigned int i = std::abs((min+(min-value))/offset );
+            //qDebug() << "Utils::getHistogram value=" << value;
+            unsigned int i = std::abs((value-min)/offset );
             qDebug() << "Utils::getHistogram i=" << i << " size=" << histogram.size();
             histogram.at(i).second++; 
         }
-- 
GitLab