tandemparameters.cpp 7.04 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 * \file /core/tandem_run/tandemparameters.cpp
 * \date 19/9/2017
 * \author Olivier Langella
 * \brief handles X!Tandem parameters
 */

/*******************************************************************************
* 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 "tandemparameters.h"
31
#include <QDebug>
32
#include <pappsomspp/exception/exceptionnotfound.h>
Langella Olivier's avatar
Langella Olivier committed
33
#include <pappsomspp/exception/exceptionnotpossible.h>
34
35
36
37
38
39
40

TandemParameters::TandemParameters() {
}
TandemParameters::~TandemParameters() {
}

TandemParameters::TandemParameters(const TandemParameters & other) {
41
    qDebug() << "TandemParameters::TandemParameters copy begin";
Olivier Langella's avatar
Olivier Langella committed
42
    //_map_label_value = other._map_label_value;
43
    _method_name = other._method_name;
Olivier Langella's avatar
Olivier Langella committed
44
45
46

    QMap<QString, QString>::const_iterator i = other._map_label_value.constBegin();
    while (i != other._map_label_value.constEnd()) {
47
        qDebug() << "TandemParameters::TandemParameters copy " << i.key() << " " << i.value();
Olivier Langella's avatar
Olivier Langella committed
48
49
50
        _map_label_value.insert(i.key(), i.value());
        i++; // added
    }
51
    qDebug() << "TandemParameters::TandemParameters copy end";
52
}
Langella Olivier's avatar
Langella Olivier committed
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71


bool TandemParameters::equals(const TandemParameters & other) const {
    if (_method_name != other._method_name) {
        return false;
    }
    if (_map_label_value.size() != other._map_label_value.size()) {
        return false;
    }
    QMap<QString, QString>::const_iterator i = _map_label_value.constBegin();
    while (i != _map_label_value.constEnd()) {
        if(i.value() != other.getValue(i.key())) {
            return false;
        }
        i++; // added
    }
    return true;
}

72
73
74
const QString TandemParameters::getLabelCategory(const QString & value) const {
    return value.split(", ").at(0);
}
75
76
77
const QString & TandemParameters::getValue(const QString & label) const {
    QMap<QString,QString>::const_iterator it = _map_label_value.constFind(label);
    if (it == _map_label_value.end()) {
Langella Olivier's avatar
Langella Olivier committed
78
        throw pappso::ExceptionNotFound(QObject::tr("X!Tandem preset label %1 not found in method %2").arg(label).arg(_method_name));
79
80
81
    }
    return it.value();
}
82
83
84
85
86
87
88
89
90
91
void TandemParameters::setParamLabelValue(const QString & label, const QString & value) {
    //list path
    //<note type="input" label="list path, default parameters">/gorgone/pappso/tmp/temp_condor_job24872841484824316495370334631825647/QExactive_analysis_FDR_nosemi.xml</note>
    //<note type="input" label="list path, taxonomy information">/gorgone/pappso/tmp/temp_condor_job24872841484824316495370334631825647/database.xml</note>
    if (getLabelCategory(label) == "list path") {
        return;
    }
    if (label == "spectrum, path") {
        return;
    }
92

Langella Olivier's avatar
Langella Olivier committed
93
    if ((label == "spectrum, parent monoisotopic mass error units") || (label == "spectrum, fragment monoisotopic mass error units")) {
Langella Olivier's avatar
Langella Olivier committed
94
95
96
97
        if ((value != "Daltons") && (value != "ppm")) {
            throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be Daltons or ppm (not %2)").arg(label).arg(value));
        }
    }
Langella Olivier's avatar
Langella Olivier committed
98
    if ((label == "spectrum, parent monoisotopic mass isotope error") || (label == "spectrum, use neutral loss window") || (label == "spectrum, use contrast angle") || (label == "protein, cleavage semi") || (label == "protein, quick acetyl") || (label == "protein, quick pyrolidone")  || (label == "protein, stP bias") || (label == "scoring, cyclic permutation") || (label == "scoring, include reverse") || (label == "scoring, y ions") || (label == "scoring, b ions") || (label == "scoring, c ions") || (label == "scoring, z ions") || (label == "scoring, a ions") || (label == "scoring, x ions") || (label == "refine") || (label == "refine, use potential modifications for full refinement") || (label == "refine, cleavage semi") || (label == "refine, unanticipated cleavage")|| (label == "refine, spectrum synthesis")|| (label == "refine, point mutations") || (label == "output, mzid") || (label == "output, spectra") || (label == "spectrum, use noise suppression")) {
Langella Olivier's avatar
Langella Olivier committed
99
100
101
102
        if ((value != "yes") && (value != "no")) {
            throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be yes or no (not %2)").arg(label).arg(value));
        }
    }
Langella Olivier's avatar
Langella Olivier committed
103
104


Langella Olivier's avatar
Langella Olivier committed
105
    if ((label == "spectrum, parent monoisotopic mass error minus") || (label == "spectrum, parent monoisotopic mass error plus")|| (label == "spectrum, dynamic range") || (label == "spectrum, minimum parent m+h") || (label == "protein, cleavage C-terminal mass change")|| (label == "protein, cleavage N-terminal mass change") || (label == "protein, C-terminal residue modification mass") || (label == "protein, N-terminal residue modification mass") || (label == "refine, maximum valid expectation value")) {
Langella Olivier's avatar
Langella Olivier committed
106
107
108
109
110
111
        bool ok;
        value.toDouble(&ok);
        if (!ok) {// not an integer
            throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be a number (not %2)").arg(label).arg(value));
        }
    }
Langella Olivier's avatar
Langella Olivier committed
112
113


Langella Olivier's avatar
Langella Olivier committed
114
    if ((label == "spectrum, maximum parent charge")  || (label == "spectrum, total peaks") || (label == "spectrum, minimum peaks") || (label == "spectrum, sequence batch size") || (label == "spectrum, threads") || (label == "scoring, minimum ion count") || (label == "scoring, maximum missed cleavage sites")) {
Langella Olivier's avatar
Langella Olivier committed
115
116
117
118
119
120
121
122
123
124
125
126
        bool ok;
        value.toInt(&ok);
        if (!ok) {// not an integer
            throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be an integer (not %2)").arg(label).arg(value));
        }
    }
    if (label == "spectrum, fragment mass type") {
        if ((value != "monoisotopic") && (value != "average")) {
            throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be monoisotopic or average (not %2)").arg(label).arg(value));
        }
    }

Langella Olivier's avatar
Langella Olivier committed
127
    //text "protein, cleavage site" "protein, modified residue mass file" "residue, modification mass"  || (label == "refine, potential N-terminus modifications") || (label == "refine, potential C-terminus modifications")
Langella Olivier's avatar
Langella Olivier committed
128
129
    //spectrum, neutral loss mass
    //spectrum, neutral loss window
Langella Olivier's avatar
Langella Olivier committed
130

131
132
133
134
135
    _map_label_value.insert(label, value);
}
void TandemParameters::setMethodName(const QString & method) {
    _method_name = method;
}
136
137
138
const QString & TandemParameters::getMethodName() const {
    return _method_name;
}
139
140
141
const QMap<QString, QString> & TandemParameters::getMapLabelValue() const {
    return _map_label_value;
}