Newer
Older
/**
* \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 <QDebug>
#include <pappsomspp/exception/exceptionnotfound.h>
/*
*
specific parameters for the modified TPP tandem version :
http://tools.proteomecenter.org/wiki/index.php?title=TPP:X%21Tandem_and_the_TPP
<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>
new labels :
"protein, taxon" https://www.thegpm.org/TANDEM/api/pt.html
"protein, homolog management"
"refine, sequence path" https://www.thegpm.org/TANDEM/api/rsp.html
"refine, tic percent" https://www.thegpm.org/TANDEM/api/rtp.html
"output, log path" https://www.thegpm.org/TANDEM/api/olp.html
"output, message" https://www.thegpm.org/TANDEM/api/om.html
"output, sequence path" https://www.thegpm.org/TANDEM/api/osp.html
"output, path" https://www.thegpm.org/TANDEM/api/opath.html
"protein, use annotations" https://www.thegpm.org/TANDEM/api/pua.html
obsolete, not documented :
"refine, maximum missed cleavage sites" 3
TandemParameters::TandemParameters()
{
TandemParameters::~TandemParameters()
{
TandemParameters::TandemParameters(const TandemParameters &other)
{
qDebug() << "TandemParameters::TandemParameters copy begin";
//_map_label_value = other._map_label_value;
_method_name = other._method_name;
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
qDebug() << "TandemParameters::TandemParameters copy end";
bool
TandemParameters::equals(const TandemParameters &other) const
{
if(_method_name != other._method_name)
if(_map_label_value.size() != other._map_label_value.size())
QMap<QString, QString>::const_iterator i = _map_label_value.constBegin();
while(i != _map_label_value.constEnd())
if(i.value() != other.getValue(i.key()))
const QString
TandemParameters::getLabelCategory(const QString &value) const
{
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
<< value;
return value.split(", ").at(0);
}
const QString &
TandemParameters::getValue(const QString &label) const
{
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
<< label;
QMap<QString, QString>::const_iterator it = _map_label_value.constFind(label);
if(it == _map_label_value.end())
throw pappso::ExceptionNotFound(
QObject::tr("X!Tandem preset label \"%1\" not found in method \"%2\"")
.arg(label)
.arg(_method_name));
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
return it.value();
void
TandemParameters::setParamLabelValue(const QString &label, const QString &value)
{
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
<< label;
// 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")
}
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
<< label;
if((label == "spectrum, parent monoisotopic mass error units") ||
(label == "spectrum, fragment monoisotopic mass error units"))
if((value != "Da") && (value != "Daltons") && (value != "ppm"))
throw pappso::ExceptionNotPossible(
QObject::tr("\"%1\" value must be Daltons or ppm (not \"%2\")")
.arg(label)
.arg(value));
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
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, 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") ||
(label == "spectrum, use conditioning") ||
(label == "protein, homolog management") ||
(label == "protein, use minimal annotations") ||
(label == "protein, use annotations") ||
(label == "scoring, pluggable scoring"))
if((value != "yes") && (value != "no"))
throw pappso::ExceptionNotPossible(
QObject::tr("%1 value must be yes or no (not %2)")
.arg(label)
.arg(value));
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") ||
(label == "refine, tic percent")
bool ok;
QString value_bis = value.simplified();
if(value_bis.isEmpty())
value_bis.toDouble(&ok);
if(!ok)
{ // not an integer
throw pappso::ExceptionNotPossible(
QObject::tr("\"%1\" value must be a number (not \"%2\")")
.arg(label)
.arg(value));
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 motif") ||
(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") ||
(label == "scoring, algorithm") || (label == "protein, taxon") ||
(label == "refine, sequence path") || (label == "output, log path") ||
(label == "output, message") || (label == "output, sequence path") ||
(label == "output, path"))
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") ||
(label == "refine, maximum missed cleavage sites"))
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));
else 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));
}
}
// 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\")")
throw pappso::ExceptionNotPossible(
QObject::tr(
"tandem input parameter label \"%1\" for value \"%2\" not known.")
.arg(label)
.arg(value));
}
// 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
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
<< label;
_map_label_value.insert(label, value);
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
<< label;
void
TandemParameters::setMethodName(const QString &method)
{
_method_name = method;
const QString &
TandemParameters::getMethodName() const
{
return _method_name;
const QMap<QString, QString> &
TandemParameters::getMapLabelValue() const
{
return _map_label_value;