From cbd2c5595c6b1dc26b3ba4415c5fb5648875e616 Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Fri, 22 Dec 2017 14:28:22 +0100
Subject: [PATCH] beautifull histogram

---
 src/gui/project_view/projectwindow.cpp | 173 +++++++++++++------------
 1 file changed, 89 insertions(+), 84 deletions(-)

diff --git a/src/gui/project_view/projectwindow.cpp b/src/gui/project_view/projectwindow.cpp
index dbd44dac0..b723eb1b4 100644
--- a/src/gui/project_view/projectwindow.cpp
+++ b/src/gui/project_view/projectwindow.cpp
@@ -78,6 +78,7 @@ ProjectWindow::ProjectWindow(MainWindow *parent):
     setFocusPolicy(Qt::ClickFocus);
 
     _p_bars = new QCPBars(ui->mass_histogram_widget->xAxis, ui->mass_histogram_widget->yAxis);
+    ui->mass_histogram_widget->addGraph();
 
 
 #if QT_VERSION >= 0x050000
@@ -127,6 +128,94 @@ ProjectWindow::~ProjectWindow()
 
 }
 
+
+void ProjectWindow::computeMassPrecision() {
+    qDebug() << "ProjectWindow::computeMassPrecision begin";
+    try {
+        ValidationState state = ValidationState::validAndChecked;
+        std::vector< pappso::pappso_double> delta_list;
+        pappso::PrecisionUnit unit = pappso::PrecisionUnit::dalton;
+        if (ui->precision_unit_combobox->currentText() == "ppm") {
+            unit = pappso::PrecisionUnit::ppm;
+        }
+
+        for (IdentificationGroup * identification_group : _project_sp.get()->getIdentificationGroupList()) {
+            identification_group->collectMhDelta(delta_list, unit, state);
+        }
+
+
+        qDebug() << "ProjectWindow::computeMassPrecision accumulate";
+        pappso::pappso_double sum = std::accumulate(delta_list.begin(), delta_list.end(), 0);
+
+        qDebug() << "ProjectWindow::computeMassPrecision delta_list.size()=" << delta_list.size();
+        pappso::pappso_double mean = 0;
+        if (delta_list.size() > 0) {
+            mean = sum / ((pappso::pappso_double) delta_list.size());
+        }
+        else {
+            throw pappso::PappsoException(QObject::tr("division by zero : no valid peptide found. Please check your filter parameters (decoy regexp or database particularly)"));
+        }
+
+        std::sort(delta_list.begin(), delta_list.end());
+        pappso::pappso_double median = delta_list[(delta_list.size()/2)];
+
+
+        qDebug() << "ProjectWindow::computeMassPrecision sd";
+        pappso::pappso_double sd = 0;
+        for (pappso::pappso_double val : delta_list) {
+            //sd = sd + ((val - mean) * (val - mean));
+            sd += std::pow((val - mean), 2);
+        }
+        sd = sd / delta_list.size();
+        sd = std::sqrt(sd);
+
+        ui->mass_precision_mean_label->setText(QString::number(mean,'f',10));
+        ui->mass_precision_median_label->setText(QString::number(median,'f',10));
+        ui->mass_precision_sd_label->setText(QString::number(sd,'f',10));
+
+
+        std::vector< std::pair<pappso::pappso_double, size_t >> histogram = Utils::getHistogram(delta_list, 100);
+        // generate some data:
+        QVector<double> x, y;
+        for (std::pair<pappso::pappso_double, size_t > & mass_pair: histogram)
+        {
+            x.push_back(mass_pair.first);
+            y.push_back(mass_pair.second);
+        }
+
+        delete _p_bars;
+        _p_bars = new QCPBars(ui->mass_histogram_widget->xAxis, ui->mass_histogram_widget->yAxis);
+        _p_bars->clearData();
+        _p_bars->setWidth((x[0] - x[x.size()-1])/x.size());
+        _p_bars->setData(x, y);
+        _p_bars->rescaleAxes();
+        //ui->mass_histogram_widget->yAxis->setRange(0, *std::max(y.begin(), y.end()));
+        //ui->mass_histogram_widget->xAxis->setRange(x[0], x[x.size()-1]);
+        //QCPGraph * p_graph = ui->mass_histogram_widget->graph();
+        //p_graph->clearData();
+        //p_graph->setData(x,y);
+        ui->mass_histogram_widget->rescaleAxes();
+        //p_graph->rescaleAxes(true);
+        ui->mass_histogram_widget->replot();
+    }
+    catch (pappso::PappsoException exception_pappso) {
+        ui->mass_precision_mean_label->setText("0");
+        ui->mass_precision_median_label->setText("0");
+        ui->mass_precision_sd_label->setText("0");
+        QMessageBox::warning(this,
+                             tr("Unable to compute mass precision :"), exception_pappso.qwhat());
+    }
+    catch (std::exception exception_std) {
+        ui->mass_precision_mean_label->setText("0");
+        ui->mass_precision_median_label->setText("0");
+        ui->mass_precision_sd_label->setText("0");
+        QMessageBox::warning(this,
+                             tr("Unable to compute mass precision :"), exception_std.what());
+    }
+    qDebug() << "ProjectWindow::computeMassPrecision end";
+}
+
+
 Project * ProjectWindow::getProjectP() {
     return _project_sp.get();
 }
@@ -248,90 +337,6 @@ void ProjectWindow::computeFdr() {
     qDebug() << "ProjectWindow::computeFdr end";
 }
 
-void ProjectWindow::computeMassPrecision() {
-    qDebug() << "ProjectWindow::computeMassPrecision begin";
-    try {
-        ValidationState state = ValidationState::validAndChecked;
-        std::vector< pappso::pappso_double> delta_list;
-        pappso::PrecisionUnit unit = pappso::PrecisionUnit::dalton;
-        if (ui->precision_unit_combobox->currentText() == "ppm") {
-            unit = pappso::PrecisionUnit::ppm;
-        }
-
-        for (IdentificationGroup * identification_group : _project_sp.get()->getIdentificationGroupList()) {
-            identification_group->collectMhDelta(delta_list, unit, state);
-        }
-
-
-        qDebug() << "ProjectWindow::computeMassPrecision accumulate";
-        pappso::pappso_double sum = std::accumulate(delta_list.begin(), delta_list.end(), 0);
-
-        qDebug() << "ProjectWindow::computeMassPrecision delta_list.size()=" << delta_list.size();
-        pappso::pappso_double mean = 0;
-        if (delta_list.size() > 0) {
-            mean = sum / ((pappso::pappso_double) delta_list.size());
-        }
-        else {
-            throw pappso::PappsoException(QObject::tr("division by zero : no valid peptide found. Please check your filter parameters (decoy regexp or database particularly)"));
-        }
-
-        std::sort(delta_list.begin(), delta_list.end());
-        pappso::pappso_double median = delta_list[(delta_list.size()/2)];
-
-
-        qDebug() << "ProjectWindow::computeMassPrecision sd";
-        pappso::pappso_double sd = 0;
-        for (pappso::pappso_double val : delta_list) {
-            //sd = sd + ((val - mean) * (val - mean));
-            sd += std::pow((val - mean), 2);
-        }
-        sd = sd / delta_list.size();
-        sd = std::sqrt(sd);
-
-        ui->mass_precision_mean_label->setText(QString::number(mean,'f',10));
-        ui->mass_precision_median_label->setText(QString::number(median,'f',10));
-        ui->mass_precision_sd_label->setText(QString::number(sd,'f',10));
-
-
-        std::vector< std::pair<pappso::pappso_double, size_t >> histogram = Utils::getHistogram(delta_list, 100);
-        // generate some data:
-        QVector<double> x, y;
-        for (std::pair<pappso::pappso_double, size_t > & mass_pair: histogram)
-        {
-            x.push_back(mass_pair.first);
-            y.push_back(mass_pair.second);
-        }
-
-        //delete _p_bars;
-        //_p_bars = new QCPBars(ui->mass_histogram_widget->xAxis, ui->mass_histogram_widget->yAxis);
-        _p_bars->clearData();
-        _p_bars->setWidth((x[0] - x[x.size()-1])/x.size());
-        _p_bars->setData(x, y);
-        _p_bars->rescaleAxes(true);
-        ui->mass_histogram_widget->yAxis->setRange(0, *std::max(y.begin(), y.end()));
-        ui->mass_histogram_widget->xAxis->setRange(x[0], x[x.size()-1]);
-        //QCPGraph * p_graph = ui->mass_histogram_widget->graph();
-        //p_graph->setData(x,y);
-        //ui->mass_histogram_widget->rescaleAxes();
-        ui->mass_histogram_widget->replot();
-    }
-    catch (pappso::PappsoException exception_pappso) {
-        ui->mass_precision_mean_label->setText("0");
-        ui->mass_precision_median_label->setText("0");
-        ui->mass_precision_sd_label->setText("0");
-        QMessageBox::warning(this,
-                             tr("Unable to compute mass precision :"), exception_pappso.qwhat());
-    }
-    catch (std::exception exception_std) {
-        ui->mass_precision_mean_label->setText("0");
-        ui->mass_precision_median_label->setText("0");
-        ui->mass_precision_sd_label->setText("0");
-        QMessageBox::warning(this,
-                             tr("Unable to compute mass precision :"), exception_std.what());
-    }
-    qDebug() << "ProjectWindow::computeMassPrecision end";
-}
-
 void ProjectWindow::doFdrChanged() {
     qDebug() << "ProjectWindow::doFdrChanged begin ";
     try {
-- 
GitLab