libpappsomspp
Library for mass spectrometry
xtandempresetsaxhandler.cpp
Go to the documentation of this file.
1 /**
2  * \file pappsomspp/processing/tandemwrapper/xtandempresetsaxhandler.cpp
3  * \date 06/02/2020
4  * \author Olivier Langella
5  * \brief read tandem preset file to get centroid parameters and number of
6  * threads
7  */
8 
9 /*******************************************************************************
10  * Copyright (c) 2020 Olivier Langella <Olivier.Langella@u-psud.fr>.
11  *
12  * This file is part of PAPPSOms-tools.
13  *
14  * PAPPSOms-tools is free software: you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation, either version 3 of the License, or
17  * (at your option) any later version.
18  *
19  * PAPPSOms-tools is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with PAPPSOms-tools. If not, see <http://www.gnu.org/licenses/>.
26  *
27  ******************************************************************************/
28 
30 #include "../../pappsoexception.h"
31 #include "../../precision.h"
32 
33 namespace pappso
34 {
36 {
37 }
38 
40 {
41 }
42 
43 
44 bool
45 XtandemPresetSaxHandler::startElement(const QString &namespaceURI
46  [[maybe_unused]],
47  const QString &localName [[maybe_unused]],
48  const QString &qName,
49  const QXmlAttributes &attributes)
50 {
51  m_tagStack.push_back(qName);
52  bool is_ok = true;
53 
54  try
55  {
56  m_currentText.clear();
57  //<bioml label="example api document">
58  if(m_tagStack.size() == 1)
59  {
60  if(qName != "bioml")
61  {
63  QObject::tr(
64  "ERROR in XtandemPresetSaxHandler::startElement "
65  "root tag %1 is not <bioml>")
66  .arg(qName);
67  m_isTandemParameter = false;
68  return false;
69  }
70  else
71  {
72 
73  m_isTandemParameter = true;
74  }
75  }
76  // startElement_group
77 
78  if(qName == "note")
79  {
80  is_ok = startElement_note(attributes);
81  }
82  }
83  catch(const pappso::PappsoException &exception_pappso)
84  {
85  m_errorString = QObject::tr(
86  "ERROR in XtandemPresetSaxHandler::startElement "
87  "tag %1, PAPPSO exception:\n%2")
88  .arg(qName)
89  .arg(exception_pappso.qwhat());
90  return false;
91  }
92  catch(const std::exception &exception_std)
93  {
94  m_errorString = QObject::tr(
95  "ERROR in XtandemPresetSaxHandler::startElement "
96  "tag %1, std exception:\n%2")
97  .arg(qName)
98  .arg(exception_std.what());
99  return false;
100  }
101  return is_ok;
102 }
103 
104 bool
105 XtandemPresetSaxHandler::endElement(const QString &namespaceURI
106  [[maybe_unused]],
107  const QString &localName [[maybe_unused]],
108  const QString &qName)
109 {
110 
111  bool is_ok = true;
112  // endElement_peptide_list
113  try
114  {
115 
116  if(qName == "note")
117  {
118  is_ok = endElement_note();
119  }
120  else
121  {
122  }
123  }
124  catch(const pappso::PappsoException &exception_pappso)
125  {
126  m_errorString = QObject::tr(
127  "ERROR in XtandemPresetSaxHandler::endElement tag "
128  "%1, PAPPSO exception:\n%2")
129  .arg(qName)
130  .arg(exception_pappso.qwhat());
131  return false;
132  }
133  catch(const std::exception &exception_std)
134  {
135  m_errorString = QObject::tr(
136  "ERROR in XtandemPresetSaxHandler::endElement tag "
137  "%1, std exception:\n%2")
138  .arg(qName)
139  .arg(exception_std.what());
140  return false;
141  }
142 
143  m_currentText.clear();
144  m_tagStack.pop_back();
145 
146  return is_ok;
147 }
148 
149 bool
151 {
152  return true;
153 }
154 
155 bool
157 {
158  return true;
159 }
160 
161 bool
163 {
164  m_currentText += str;
165  return true;
166 }
167 
168 
169 bool
170 XtandemPresetSaxHandler::error(const QXmlParseException &exception)
171 {
172  m_errorString = QObject::tr(
173  "Parse error at line %1, column %2 :\n"
174  "%3")
175  .arg(exception.lineNumber())
176  .arg(exception.columnNumber())
177  .arg(exception.message());
178  qDebug() << m_errorString;
179  return false;
180 }
181 
182 
183 bool
184 XtandemPresetSaxHandler::fatalError(const QXmlParseException &exception)
185 {
186  m_errorString = QObject::tr(
187  "Parse error at line %1, column %2 :\n"
188  "%3")
189  .arg(exception.lineNumber())
190  .arg(exception.columnNumber())
191  .arg(exception.message());
192  qDebug() << m_errorString;
193  return false;
194 }
195 
196 QString
198 {
199  return m_errorString;
200 }
201 
202 
203 bool
205 {
206  // qDebug() << "XtandemParamSaxHandler::startElement_note begin " <<
207  // <note type="input"
208  // label="output,path">/gorgone/pappso/jouy/users/Celine/2019_Lumos/20191222_107_Juste_APD/metapappso_condor/test_run/20191222_18_EF1_third_step_test_condor_22janv.xml</note>
209 
210  m_currentLabel = "";
211 
212  if(attributes.value("type") == "input")
213  {
214  m_currentLabel = attributes.value("label");
215  }
216 
217  // qDebug() << "XtandemParamSaxHandler::startElement_note _current_label " <<
218  // _current_label;
219  return true;
220 }
221 
222 bool
224 {
225  // qDebug() << "XtandemParamSaxHandler::endElement_note begin " <<
226  // _current_label << " " << _current_text.simplified();
227  if(m_currentLabel == "spectrum, timstof MS2 filters")
228  {
229  // m_ms2filtersOptions = m_currentText;
230  }
231  else if(m_currentLabel == "spectrum, threads")
232  {
233  m_threads = m_currentText.toInt();
234  }
235  else if(m_currentLabel == "spectrum, fragment monoisotopic mass error units")
236  {
237  m_ms2precisionUnit = PrecisionUnit::dalton;
238  if(m_currentText.trimmed().toLower() == "ppm")
239  {
240  m_ms2precisionUnit = PrecisionUnit::ppm;
241  }
242  }
243  else if(m_currentLabel == "spectrum, fragment monoisotopic mass error")
244  {
245  m_ms2precisionValue = m_currentText.toDouble();
246  }
247  else
248  {
249  }
250  return true;
251 }
252 
253 
254 int
256 {
257  return m_threads;
258 }
259 
260 
261 const QString
263 {
266  return QString("chargeDeconvolution|%1")
267  .arg(precision->toString().replace(" ", ""));
268 }
269 } // namespace pappso
pappso::XtandemPresetSaxHandler::m_isTandemParameter
bool m_isTandemParameter
Definition: xtandempresetsaxhandler.h:84
pappso::XtandemPresetSaxHandler::endDocument
bool endDocument() override
Definition: xtandempresetsaxhandler.cpp:156
pappso
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition: aa.cpp:39
xtandempresetsaxhandler.h
read tandem preset file to get centroid parameters and number of threads
pappso::XtandemPresetSaxHandler::m_currentLabel
QString m_currentLabel
Definition: xtandempresetsaxhandler.h:85
pappso::XtandemPresetSaxHandler::~XtandemPresetSaxHandler
~XtandemPresetSaxHandler()
Definition: xtandempresetsaxhandler.cpp:39
pappso::XtandemPresetSaxHandler::startDocument
bool startDocument() override
Definition: xtandempresetsaxhandler.cpp:150
pappso::XtandemPresetSaxHandler::errorString
QString errorString() const
Definition: xtandempresetsaxhandler.cpp:197
pappso::XtandemPresetSaxHandler::getNumberOfThreads
int getNumberOfThreads() const
Definition: xtandempresetsaxhandler.cpp:255
pappso::XtandemPresetSaxHandler::XtandemPresetSaxHandler
XtandemPresetSaxHandler()
Definition: xtandempresetsaxhandler.cpp:35
pappso::XtandemPresetSaxHandler::characters
bool characters(const QString &str) override
Definition: xtandempresetsaxhandler.cpp:162
pappso::XtandemPresetSaxHandler::endElement_note
bool endElement_note()
Definition: xtandempresetsaxhandler.cpp:223
pappso::XtandemPresetSaxHandler::m_threads
int m_threads
Definition: xtandempresetsaxhandler.h:86
pappso::XtandemPresetSaxHandler::error
bool error(const QXmlParseException &exception) override
Definition: xtandempresetsaxhandler.cpp:170
pappso::XtandemPresetSaxHandler::m_ms2precisionValue
double m_ms2precisionValue
Definition: xtandempresetsaxhandler.h:89
pappso::PrecisionBase
Definition: precision.h:44
pappso::XtandemPresetSaxHandler::endElement
bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName) override
Definition: xtandempresetsaxhandler.cpp:105
pappso::XtandemPresetSaxHandler::m_currentText
QString m_currentText
Definition: xtandempresetsaxhandler.h:83
pappso::PappsoException::qwhat
virtual const QString & qwhat() const
Definition: pappsoexception.h:68
pappso::XtandemPresetSaxHandler::startElement_note
bool startElement_note(QXmlAttributes attributes)
Definition: xtandempresetsaxhandler.cpp:204
pappso::XtandemPresetSaxHandler::m_errorString
QString m_errorString
Definition: xtandempresetsaxhandler.h:81
pappso::XtandemPresetSaxHandler::m_tagStack
std::vector< QString > m_tagStack
Definition: xtandempresetsaxhandler.h:82
pappso::PrecisionBase::toString
virtual QString toString() const =0
pappso::PrecisionFactory::getPrecisionPtrInstance
static PrecisionPtr getPrecisionPtrInstance(PrecisionUnit unit, double value)
get a precision pointer instance
Definition: precision.cpp:213
pappso::XtandemPresetSaxHandler::startElement
bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes) override
Definition: xtandempresetsaxhandler.cpp:45
pappso::XtandemPresetSaxHandler::getMs2FiltersOptions
const QString getMs2FiltersOptions() const
Definition: xtandempresetsaxhandler.cpp:262
pappso::XtandemPresetSaxHandler::fatalError
bool fatalError(const QXmlParseException &exception) override
Definition: xtandempresetsaxhandler.cpp:184
pappso::PappsoException
Definition: pappsoexception.h:42
pappso::XtandemPresetSaxHandler::m_ms2precisionUnit
PrecisionUnit m_ms2precisionUnit
Definition: xtandempresetsaxhandler.h:88