tandemparameters.cpp 11.4 KB
Newer Older
1
2
3
4
5
6
7
8
/**
 * \file /core/tandem_run/tandemparameters.cpp
 * \date 19/9/2017
 * \author Olivier Langella
 * \brief handles X!Tandem parameters
 */

/*******************************************************************************
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 * 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
 ******************************************************************************/
30
31

#include "tandemparameters.h"
32
#include <QDebug>
33
#include <pappsomspp/exception/exceptionnotfound.h>
Langella Olivier's avatar
Langella Olivier committed
34
#include <pappsomspp/exception/exceptionnotpossible.h>
35

36
37
TandemParameters::TandemParameters()
{
38
}
39
40
TandemParameters::~TandemParameters()
{
41
42
}

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

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


62
63
64
65
66
67
bool
TandemParameters::equals(const TandemParameters &other) const
{
  if(_method_name != other._method_name)
    {
      return false;
Langella Olivier's avatar
Langella Olivier committed
68
    }
69
70
71
  if(_map_label_value.size() != other._map_label_value.size())
    {
      return false;
Langella Olivier's avatar
Langella Olivier committed
72
    }
73
74
75
76
77
78
  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;
Langella Olivier's avatar
Langella Olivier committed
79
        }
80
      i++; // added
Langella Olivier's avatar
Langella Olivier committed
81
    }
82
  return true;
Langella Olivier's avatar
Langella Olivier committed
83
84
}

85
86
87
const QString
TandemParameters::getLabelCategory(const QString &value) const
{
88
89
90

  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
           << value;
91
  return value.split(", ").at(0);
92
}
93
94
95
const QString &
TandemParameters::getValue(const QString &label) const
{
96
97
  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
           << label;
98
99
100
101
  QMap<QString, QString>::const_iterator it = _map_label_value.constFind(label);
  if(it == _map_label_value.end())
    {
      throw pappso::ExceptionNotFound(
102
        QObject::tr("X!Tandem preset label \"%1\" not found in method \"%2\"")
103
104
          .arg(label)
          .arg(_method_name));
105
    }
106
  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
107
  return it.value();
108
}
109
110
111
void
TandemParameters::setParamLabelValue(const QString &label, const QString &value)
{
112
113
  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
           << label;
114
115
  // list path
  //<note type="input" label="list path, default
Langella Olivier's avatar
Langella Olivier committed
116
  // parameters">/gorgone/pappso/tmp/temp_condor_job24872841484824316495370334631825647/QExactive_analysis_FDR_nosemi.xml</note>
117
  //<note type="input" label="list path, taxonomy
Langella Olivier's avatar
Langella Olivier committed
118
  // information">/gorgone/pappso/tmp/temp_condor_job24872841484824316495370334631825647/database.xml</note>
119
120
121
  if(getLabelCategory(label) == "list path")
    {
      return;
122
    }
123

124
125
  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
           << label;
126
127
128
  if((label == "spectrum, parent monoisotopic mass error units") ||
     (label == "spectrum, fragment monoisotopic mass error units"))
    {
129
      if((value != "Da") && (value != "Daltons") && (value != "ppm"))
130
131
        {
          throw pappso::ExceptionNotPossible(
132
            QObject::tr("\"%1\" value must be Daltons or ppm (not \"%2\")")
133
134
              .arg(label)
              .arg(value));
Langella Olivier's avatar
Langella Olivier committed
135
136
        }
    }
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
  else 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 == "output, proteins") ||
          (label == "output, sequences") ||
          (label == "output, one sequence copy") ||
          (label == "output, parameters") || (label == "output, performance") ||
          (label == "output, histograms") ||
          (label == "output, path hashing") ||
          (label == "spectrum, use noise suppression"))
163
164
165
166
167
168
169
    {
      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
170
        }
171
172
173
174
175
176
        /*
 <note label="scoring, algorithm" type="input">k-score</note>
  <note label="spectrum, use conditioning" type="input">no</note>
  <note label="scoring, minimum ion count" type="input">1</note>
*/

Langella Olivier's avatar
Langella Olivier committed
177
    }
Langella Olivier's avatar
Langella Olivier committed
178

179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
  else 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") ||
          (label == "spectrum, fragment monoisotopic mass error") ||
          (label == "spectrum, neutral loss mass") ||
          (label == "spectrum, neutral loss window") ||
          (label == "spectrum, minimum fragment mz") ||
          (label == "output, maximum valid expectation value") ||
          (label == "output, maximum valid protein expectation value")


  )
Langella Olivier's avatar
Langella Olivier committed
197

198
    {
199

200
      bool ok;
201
202
203
204
205
206
      QString value_bis = value.simplified();
      if(value_bis.isEmpty())
        {
          value_bis = "0.0";
        }
      value_bis.toDouble(&ok);
207
208
209
      if(!ok)
        { // not an integer
          throw pappso::ExceptionNotPossible(
210
            QObject::tr("\"%1\" value must be a number (not \"%2\")")
211
212
              .arg(label)
              .arg(value));
Langella Olivier's avatar
Langella Olivier committed
213
214
        }
    }
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
  else if((label == "protein, cleavage site") ||
          (label == "protein, modified residue mass file") ||
          (label == "residue, modification mass") ||
          (label == "residue, modification mass 1") ||
          (label == "residue, modification mass 2") ||
          (label == "residue, potential modification mass") ||
          (label == "residue, potential modification mass 1") ||
          (label == "residue, potential modification mass 2") ||
          (label == "residue, potential modification motif") ||
          (label == "residue, potential modification motif 1") ||
          (label == "residue, potential modification motif 2") ||
          (label == "refine, potential N-terminus modifications") ||
          (label == "refine, potential C-terminus modifications") ||
          (label == "refine, modification mass") ||
          (label == "refine, modification mass 1") ||
          (label == "refine, modification mass 2") ||
          (label == "refine, potential modification mass") ||
          (label == "refine, potential modification mass 1") ||
          (label == "refine, potential modification mass 2") ||
          (label == "refine, potential modification motif") ||
          (label == "refine, potential modification motif 1") ||
          (label == "refine, potential modification motif 2") ||
          (label == "output, sort results by") ||
          (label == "output, xsl path")||
          (label == "spectrum, path"))
    {
      // string
    }
  else 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")||
          (label == "output, histogram column width"))
251
    {
252

253
254
255
256
257
      bool ok;
      value.toInt(&ok);
      if(!ok)
        { // not an integer
          throw pappso::ExceptionNotPossible(
258
            QObject::tr("\"%1\" value must be an integer (not \"%2\")")
259
260
              .arg(label)
              .arg(value));
Langella Olivier's avatar
Langella Olivier committed
261
262
        }
    }
263
  else if(label == "spectrum, fragment mass type")
264
265
266
267
    {
      if((value != "monoisotopic") && (value != "average"))
        {
          throw pappso::ExceptionNotPossible(
268
269
            QObject::tr(
              "\"%1\" value must be monoisotopic or average (not \"%2\")")
270
271
              .arg(label)
              .arg(value));
Langella Olivier's avatar
Langella Olivier committed
272
273
        }
    }
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
  // tandem input parameter label "output, results" for value "valid" not known.

  else if(label == "output, results")
    {
      /*
    if((value != "all") && (value != "valid"))
      {
        throw pappso::ExceptionNotPossible(
          QObject::tr("\"%1\" value must be valid or all (not \"%2\")")
            .arg(label)
            .arg(value));
      }
      */
    }
  else
    {

      throw pappso::ExceptionNotPossible(
        QObject::tr(
          "tandem input parameter label \"%1\" for value \"%2\" not known.")
          .arg(label)
          .arg(value));
    }

Langella Olivier's avatar
Langella Olivier committed
298

299
300
301
302
303
  // text "protein, cleavage site" "protein, modified residue mass file"
  // "residue, modification mass"  || (label == "refine, potential N-terminus
  // modifications") || (label == "refine, potential C-terminus modifications")
  // spectrum, neutral loss mass
  // spectrum, neutral loss window
304
305
  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
           << label;
306
  _map_label_value.insert(label, value);
307
308
  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
           << label;
309
}
310
311
312
313
void
TandemParameters::setMethodName(const QString &method)
{
  _method_name = method;
314
}
315
316
317
318
const QString &
TandemParameters::getMethodName() const
{
  return _method_name;
319
}
320
321
322
323
const QMap<QString, QString> &
TandemParameters::getMapLabelValue() const
{
  return _map_label_value;
324
}