From a90fa3d4d7adb15bfea7d786a0a18817cc4759cf Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Fri, 6 Oct 2017 22:05:21 +0200
Subject: [PATCH] fix divizion by zero problem

---
 src/gui/project_view/projectwindow.cpp | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/gui/project_view/projectwindow.cpp b/src/gui/project_view/projectwindow.cpp
index 75f0e264c..755cfdfc0 100644
--- a/src/gui/project_view/projectwindow.cpp
+++ b/src/gui/project_view/projectwindow.cpp
@@ -250,13 +250,23 @@ void ProjectWindow::computeMassPrecision() {
         }
 
 
+        qDebug() << "ProjectWindow::computeMassPrecision accumulate";
         pappso::pappso_double sum = std::accumulate(delta_list.begin(), delta_list.end(), 0);
 
-        pappso::pappso_double mean = sum / ((pappso::pappso_double) delta_list.size());
+        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));
@@ -270,10 +280,16 @@ void ProjectWindow::computeMassPrecision() {
         ui->mass_precision_sd_label->setText(QString::number(sd,'f',10));
     }
     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());
     }
-- 
GitLab