Skip to content
Snippets Groups Projects
edittandempresetdialog.cpp 14.2 KiB
Newer Older
/**
 * \file gui/edit_tandem_preset_dialog/edittandempresetdialog.cpp
 * \date 30/9/2017
 * \author Olivier Langella
 * \brief edit tandem preset dialog
 */

/*******************************************************************************
* Copyright (c) 2017 Olivier Langella <olivier.langella@u-psud.fr>.
*
* This file is part of XTPcpp.
*
*     XTPcpp is free software: you can redistribute it and/or modify
*     it under the terms of the GNU General Public License as published by
*     the Free Software Foundation, either version 3 of the License, or
*     (at your option) any later version.
*
*     XTPcpp is distributed in the hope that it will be useful,
*     but WITHOUT ANY WARRANTY; without even the implied warranty of
*     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*     GNU General Public License for more details.
*
*     You should have received a copy of the GNU General Public License
*     along with XTPcpp.  If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
*     Olivier Langella <olivier.langella@u-psud.fr> - initial API and implementation
******************************************************************************/

#include "edittandempresetdialog.h"
#include <QDebug>
Langella Olivier's avatar
Langella Olivier committed
#include <pappsomspp/pappsoexception.h>

#include "ui_edit_tandem_preset_dialog.h"
Langella Olivier's avatar
Langella Olivier committed
#include <QSettings>
Langella Olivier's avatar
Langella Olivier committed
#include <QDir>
Langella Olivier's avatar
Langella Olivier committed
#include <QFileDialog>
Langella Olivier's avatar
Langella Olivier committed
#include <QMessageBox>


EditTandemPresetDialog::EditTandemPresetDialog(QWidget * parent):
    QDialog(parent),
    ui(new Ui::EditTandemPresetView)
{
    qDebug() << "EditTandemPresetDialog::EditTandemPresetDialog begin";
    ui->setupUi(this);
    this->setModal(true);

    ui->splitter->setStretchFactor(0, 1);
#if QT_VERSION >= 0x050000
    // Qt5 code
#else
// Qt4 code

#endif
    qDebug() << "EditTandemPresetDialog::EditTandemPresetDialog end";
}

EditTandemPresetDialog::~EditTandemPresetDialog()
{
    delete ui;
    if (_p_tandem_preset_file != nullptr) {
        delete _p_tandem_preset_file;
    }
}

void EditTandemPresetDialog::setTandemParametersFile(const TandemParametersFile & tandem_preset_file) {
Langella Olivier's avatar
Langella Olivier committed

    if (tandem_preset_file.exists()) {
        _p_tandem_preset_file = new TandemParametersFile( tandem_preset_file);
        _preset_directory = _p_tandem_preset_file->getAbsoluteDir().absolutePath();
    } else {
Langella Olivier's avatar
Langella Olivier committed
        _p_tandem_preset_file = new TandemParametersFile(":/tandem/ressources/model/QExactive_analysis_FDR_nosemi.xml");

        QSettings settings;
        _preset_directory = settings.value("path/tandemrun_preset_directory", "").toString();
    _tandem_params = _p_tandem_preset_file->getTandemParameters();
Langella Olivier's avatar
Langella Olivier committed

Langella Olivier's avatar
Langella Olivier committed
    fillPresetComboBox();
Langella Olivier's avatar
Langella Olivier committed
void EditTandemPresetDialog::doCopy() {
    ui->method_name_line_edit->setText("untitled");
    readUi();
    if (_p_tandem_preset_file == nullptr) {
Langella Olivier's avatar
Langella Olivier committed

Langella Olivier's avatar
Langella Olivier committed
        throw pappso::PappsoException(QObject::tr("_p_tandem_preset_file == nullptr"));
    }
    else {
        delete _p_tandem_preset_file;
    }
    _p_tandem_preset_file = new TandemParametersFile(QString("%1/untitled.xml").arg(_preset_directory));
Langella Olivier's avatar
Langella Olivier committed

void EditTandemPresetDialog::doSelectDir() {
    try {

        QString directory = QFileDialog::getExistingDirectory(this,tr("Choose preset directory"),_preset_directory );
Langella Olivier's avatar
Langella Olivier committed

        if (!directory.isEmpty() && ! directory.isNull()) {
            _preset_directory = directory;
Langella Olivier's avatar
Langella Olivier committed
            fillPresetComboBox();
        }

    }
    catch (pappso::PappsoException & error) {
        //QMessageBox::warning(this,
        //                  tr("Error choosing identification result files : %1").arg(error.qwhat()), error);
    }
}

Langella Olivier's avatar
Langella Olivier committed
void EditTandemPresetDialog::doSave() {
    readUi();
    if (_p_tandem_preset_file == nullptr) {
        throw pappso::PappsoException(QObject::tr("_p_tandem_preset_file == nullptr"));
    }
    _p_tandem_preset_file->setTandemParameters(_tandem_params);
Langella Olivier's avatar
Langella Olivier committed
    fillPresetComboBox();
Langella Olivier's avatar
Langella Olivier committed
    populate();
Langella Olivier's avatar
Langella Olivier committed
}

void EditTandemPresetDialog::doLoad() {
Langella Olivier's avatar
Langella Olivier committed
    int index = ui->preset_combo_box->currentIndex();
Langella Olivier's avatar
Langella Olivier committed
    if ( index != -1 ) { // -1 for not found
Langella Olivier's avatar
Langella Olivier committed
        if (_p_tandem_preset_file == nullptr) {
            throw pappso::PappsoException(QObject::tr("_p_tandem_preset_file == nullptr"));
        }
        else {
            delete _p_tandem_preset_file;
        }

        _p_tandem_preset_file = new TandemParametersFile(
            ui->preset_combo_box->itemData(index).value<QString>());
        _tandem_params = _p_tandem_preset_file->getTandemParameters();
        populate();
const TandemParametersFile & EditTandemPresetDialog::getTandemParametersFile() const {
    if (_p_tandem_preset_file == nullptr) {
        throw pappso::PappsoException(QObject::tr("_p_tandem_preset_file == nullptr"));
    }
    if (!_p_tandem_preset_file->exists()) {
        throw pappso::PappsoException(QObject::tr("preset file %1 does not exists").arg(_p_tandem_preset_file->getAbsoluteFilePath()));
    }
    return *_p_tandem_preset_file;
}
Langella Olivier's avatar
Langella Olivier committed
void EditTandemPresetDialog::fillPresetComboBox() {
    ui->preset_combo_box->clear();
    QString default_preset_name = _tandem_params.getMethodName();

    QDir preset_dir(_preset_directory);
Langella Olivier's avatar
Langella Olivier committed
    QStringList filters;
    filters << "*.xml";
    preset_dir.setNameFilters(filters);
    for (QFileInfo file_info: preset_dir.entryInfoList() ) {
        ui->preset_combo_box->addItem(file_info.baseName(), QVariant(file_info.absoluteFilePath()));
    }
    int index = ui->preset_combo_box->findText(default_preset_name);
    if ( index != -1 ) { // -1 for not found
        ui->preset_combo_box->setCurrentIndex(index);
    }

}
void EditTandemPresetDialog::doEdit(QString value) {
Langella Olivier's avatar
Langella Olivier committed
    QObject *senderObj = sender();
    QString senderObjName = senderObj->objectName();
Langella Olivier's avatar
Langella Olivier committed
    qDebug() << "EditTandemPresetDialog::doEdit begin " << senderObjName << " " << value;
Langella Olivier's avatar
Langella Olivier committed
    qDebug() << "EditTandemPresetDialog::doEdit end " << senderObjName;
}
void EditTandemPresetDialog::doHelp() {
    QObject *senderObj = sender();
    QString senderObjName = senderObj->objectName();
    qDebug() << "EditTandemPresetDialog::doHelp begin " << senderObjName;
    QFile html_doc;
    if(senderObjName == "parent_ion_window_unit_push_button")
    {
        //spmmeu.html
        html_doc.setFileName(":/tandem/resources/html_doc/spmmeu.html");
    }
    if(senderObjName == "smpc_push_button")
    {
        //spmmeu.html
        html_doc.setFileName(":/tandem/resources/html_doc/smpc.html");
    }
    if(senderObjName == "spmmem_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/spmmem.html");
    }
    if(senderObjName == "spmmep_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/spmmep.html");
    }
    if(senderObjName == "spmmie_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/spmmie.html");
    }
    if(senderObjName == "sfmt_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/sfmt.html");
    }
    if(senderObjName == "sfmmeu_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/sfmmeu.html");
    }
    if(senderObjName == "sfmme_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/sfmme.html");
    }
    if(senderObjName == "sunlw_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/sunlw.html");
    }
Langella Olivier's avatar
Langella Olivier committed
    if(senderObjName == "sdr_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/sdr.html");
    }
    if(senderObjName == "stp_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/stp.html");
    }
Langella Olivier's avatar
Langella Olivier committed
    if(senderObjName == "smp_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/smp.html");
    }
    if(senderObjName == "smfmz_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/smfmz.html");
    }
    if(senderObjName == "smpmh_push_button")
    {
        html_doc.setFileName(":/tandem/resources/html_doc/smpmh.html");
    }
    if (html_doc.open(QFile::ReadOnly | QFile::Text)) {
        QTextStream in(&html_doc);
        ui->doc_plain_text_edit->setHtml(in.readAll());
        qDebug() << "EditTandemPresetDialog::doHelp doc " << in.readAll();
    }
    else {
        qDebug() << "EditTandemPresetDialog::doHelp doc not found";
    }
    qDebug() << "EditTandemPresetDialog::doHelp end " << senderObjName;
}

void EditTandemPresetDialog::readUi() {
Langella Olivier's avatar
Langella Olivier committed
    try {
        _tandem_params.setMethodName(ui->method_name_line_edit->text());
        _tandem_params.setParamLabelValue("spectrum, parent monoisotopic mass error units", ui->parent_ion_window_unit_combo_box->currentText());
Langella Olivier's avatar
Langella Olivier committed
        _tandem_params.setParamLabelValue("spectrum, parent monoisotopic mass error minus", ui->parent_ion_lower_window_edit->text());
Langella Olivier's avatar
Langella Olivier committed
        _tandem_params.setParamLabelValue("spectrum, parent monoisotopic mass error plus", ui->parent_ion_upper_window_edit->text());
Langella Olivier's avatar
Langella Olivier committed
        _tandem_params.setParamLabelValue("spectrum, parent monoisotopic mass isotope error", ui->anticipate_carbon_combo_box->currentText());

        _tandem_params.setParamLabelValue("spectrum, maximum parent charge", ui->smpc_edit->text());

        _tandem_params.setParamLabelValue("spectrum, fragment mass type", ui->sfmt_combo_box->currentText());

        _tandem_params.setParamLabelValue("spectrum, fragment monoisotopic mass error units", ui->sfmmeu_combo_box->currentText());
        _tandem_params.setParamLabelValue("spectrum, fragment monoisotopic mass error", ui->sfmme_edit->text());
        _tandem_params.setParamLabelValue("spectrum, use neutral loss window", ui->sunlw_combo_box->currentText());
Langella Olivier's avatar
Langella Olivier committed

        _tandem_params.setParamLabelValue("spectrum, dynamic range", ui->sdr_edit->text());
        _tandem_params.setParamLabelValue("spectrum, total peaks", ui->stp_edit->text());
Langella Olivier's avatar
Langella Olivier committed
        _tandem_params.setParamLabelValue("spectrum, minimum peaks", ui->smp_edit->text());
        _tandem_params.setParamLabelValue("spectrum, minimum fragment mz", ui->smfmz_edit->text());
        _tandem_params.setParamLabelValue("spectrum, minimum parent m+h", ui->smpmh_edit->text());
Langella Olivier's avatar
Langella Olivier committed
    }
    catch (pappso::PappsoException & error) {
        QMessageBox::warning(this,tr("Error in parameters :"), error.qwhat());
    }
}

void EditTandemPresetDialog::populate() {
Langella Olivier's avatar
Langella Olivier committed
    qDebug() << "EditTandemPresetDialog::populate begin";
    ui->method_name_line_edit->setText(_tandem_params.getMethodName());
    /*
     * <note type="input" label="spectrum, parent monoisotopic mass error units">ppm</note>
     * */
    int index = ui->parent_ion_window_unit_combo_box->findText(_tandem_params.getValue("spectrum, parent monoisotopic mass error units"));
    if ( index != -1 ) { // -1 for not found
        ui->parent_ion_window_unit_combo_box->setCurrentIndex(index);
    }
Langella Olivier's avatar
Langella Olivier committed
    else {
        qDebug() << "EditTandemPresetDialog::populate " << index;
    }
    //<note type="input" label="spectrum, parent monoisotopic mass error minus">10</note>
    ui->parent_ion_lower_window_edit->setText(_tandem_params.getValue("spectrum, parent monoisotopic mass error minus"));
    //<note type="input" label="spectrum, parent monoisotopic mass error plus">10</note>
    ui->parent_ion_upper_window_edit->setText(_tandem_params.getValue("spectrum, parent monoisotopic mass error plus"));
    //<note type="input" label="spectrum, parent monoisotopic mass isotope error">yes</note>
    index = ui->anticipate_carbon_combo_box->findText(_tandem_params.getValue("spectrum, parent monoisotopic mass isotope error"));
    if ( index != -1 ) { // -1 for not found
        ui->anticipate_carbon_combo_box->setCurrentIndex(index);
    }
    //<note type="input" label="spectrum, maximum parent charge">4</note>
    ui->smpc_edit->setText(_tandem_params.getValue("spectrum, maximum parent charge"));

    //<note type="input" label="spectrum, fragment mass type">monoisotopic</note>
    index = ui->sfmt_combo_box->findText("monoisotopic");
    if ( index != -1 ) { // -1 for not found
        ui->sfmt_combo_box->setCurrentIndex(index);
    }
    //<note type="input" label="spectrum, fragment monoisotopic mass error units">Daltons</note>
    index = ui->sfmmeu_combo_box->findText(_tandem_params.getValue("spectrum, fragment monoisotopic mass error units"));
    if ( index != -1 ) { // -1 for not found
        ui->sfmmeu_combo_box->setCurrentIndex(index);
    }
    //<note type="input" label="spectrum, fragment monoisotopic mass error">0.02</note>
    ui->sfmme_edit->setText(_tandem_params.getValue("spectrum, fragment monoisotopic mass error"));

Langella Olivier's avatar
Langella Olivier committed

    //<note type="input" label="spectrum, use neutral loss window">yes</note>
    index = ui->sunlw_combo_box->findText(_tandem_params.getValue("spectrum, use neutral loss window"));
    if ( index != -1 ) { // -1 for not found
        ui->sunlw_combo_box->setCurrentIndex(index);
    }
Langella Olivier's avatar
Langella Olivier committed
    //<note type="input" label="spectrum, dynamic range">100.0</note>
    ui->sdr_edit->setText(_tandem_params.getValue("spectrum, dynamic range"));
Langella Olivier's avatar
Langella Olivier committed

    //<note type="input" label="spectrum, total peaks">100</note>
Langella Olivier's avatar
Langella Olivier committed
    ui->stp_edit->setText(_tandem_params.getValue("spectrum, total peaks"));
Langella Olivier's avatar
Langella Olivier committed

    ui->smp_edit->setText(_tandem_params.getValue("spectrum, minimum peaks"));


    //<note type="input" label="spectrum, minimum fragment mz">150.0</note>
    ui->smfmz_edit->setText(_tandem_params.getValue("spectrum, minimum fragment mz"));
    //<note type="input" label="spectrum, minimum parent m+h">500.0</note>
    ui->smpmh_edit->setText(_tandem_params.getValue("spectrum, minimum parent m+h"));
    
    //<note type="input" label="spectrum, sequence batch size">1000</note>
    //<note type="input" label="spectrum, use contrast angle">no</note>
    //<note type="input" label="spectrum, threads">1</note>
Langella Olivier's avatar
Langella Olivier committed
    qDebug() << "EditTandemPresetDialog::populate end";

void EditTandemPresetDialog::done(int r)
{
    if(QDialog::Accepted == r)  // ok was pressed
    {
        readUi();
        TandemParameters ref_params = _p_tandem_preset_file->getTandemParameters();
        if(ref_params.equals(_tandem_params))   // validate the data somehow
        {
            QDialog::done(r);
            return;
        }
        else
        {
            QMessageBox::warning(this,
                                 tr("Save parameters"), tr("Parameters modified but not saved.\nPlease save it before pressing ok or cancel edition"));
            return;
        }
    }
    else    // cancel, close or exc was pressed
    {
        QDialog::done(r);
        return;
    }
}