libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
mzcborcopyreplacebase.cpp
Go to the documentation of this file.
1/**
2 * \file pappsomspp/core/processing/cbor/mzcbor/mzcborreaderbase.cpp
3 * \date 2/10/2026
4 * \author Olivier Langella
5 * \brief read mzcbor stream or file, process it and write processed mzcbor output
6 */
7
8/*******************************************************************************
9 * Copyright (c) 2026 Olivier Langella <Olivier.Langella@cnrs.fr>.
10 *
11 * This file is part of PAPPSOms-tools.
12 *
13 * PAPPSOms-tools is free software: you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation, either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * PAPPSOms-tools is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with PAPPSOms-tools. If not, see <http://www.gnu.org/licenses/>.
25 *
26 ******************************************************************************/
27
28
32#include <qcbormap.h>
33#include <qcontainerfwd.h>
34#include <qlogging.h>
35#include <qobject.h>
36#include <qtypes.h>
37namespace pappso
38{
39namespace cbor
40{
41namespace mzcbor
42{
44 const QString &operation)
45{
46
47 mp_cborOutput = cbor_output_p;
48 m_operation = operation;
49}
53
54void
58
59void
61{
62 qDebug();
63 initCborReader(cborp);
64
65 qDebug();
66 if(mpa_cborReader->isMap())
67 {
68 readRoot(monitor);
69 }
70 qDebug();
71}
72
73void
75{
76 qDebug();
77 initCborReader(cborp);
78
79 qDebug();
80 if(mpa_cborReader->isMap())
81 {
82 readRoot(monitor);
83 }
84 qDebug();
85}
86
87void
89{
90 mp_cborOutput->startMap();
91 mpa_cborReader->enterContainer();
92
93
95 if(m_expectedString == "mzCBOR")
96 {
97 mp_cborOutput->append("mzCBOR");
98 qDebug() << m_expectedString;
99 readCbor(monitor);
100 }
101 else
102 {
103 throw pappso::PappsoException("ERROR: expecting mzCBOR element");
104 }
105
106
107 QCborMap tmp_map;
109 if(m_expectedString == "mzML")
110 {
111 mp_cborOutput->append("mzML");
112
113 mpa_cborReader->readCborMap(tmp_map);
114 mp_cborOutput->writeCborMap(tmp_map);
115 }
116 else
117 {
118 throw pappso::PappsoException("ERROR: expecting mzML element");
119 }
120
121
122 QStringList copy_tags;
123 copy_tags << "cvList"
124 << "fileDescription" << "referenceableParamGroupList" << "softwareList"
125 << "instrumentConfigurationList" << "dataProcessingList";
126 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
127 {
129 qDebug() << m_expectedString;
130
131
132 if(copy_tags.contains(m_expectedString))
133 {
135 mpa_cborReader->readCborMap(tmp_map);
136 mp_cborOutput->writeCborMap(tmp_map);
137 }
138 else if(m_expectedString == "run")
139 {
140
141 mp_cborOutput->append("run");
142 qDebug() << m_expectedString;
143 readRun(monitor);
144 }
145
146 else
147 {
149 QObject::tr("ERROR: %1 not expected in mzCBOR root").arg(m_expectedString));
150 }
151 }
152
153 mp_cborOutput->endMap();
154 mpa_cborReader->leaveContainer();
155}
156
157void
159{
160 mp_cborOutput->startMap();
161 mpa_cborReader->enterContainer();
162 QCborMap old_informations;
163
164 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
165 {
166 // mode
167 // informations
168 // log
169 // parameter_map
171 qDebug() << m_expectedString;
172 if(m_expectedString == "mode")
173 {
174 mp_cborOutput->append("mode");
175 mp_cborOutput->append(mpa_cborReader->toInteger());
176 mpa_cborReader->next();
177 }
178 else if(m_expectedString == "informations")
179 {
180
181 mpa_cborReader->readCborMap(old_informations);
182 mp_cborOutput->writeInformations(
183 "libpappsomspp", Utils::getVersion(), "mzCBOR", m_operation);
184 }
185 else
186 {
188 QObject::tr("ERROR: %1 not expected in mzCBOR").arg(m_expectedString));
189 }
190 }
191
192
193 mp_cborOutput->endMap();
194 mpa_cborReader->leaveContainer();
195}
196
197void
199{
200
201 // <run
202 // id="20120906_balliau_extract_1_A01_urnb-1"
203 // defaultInstrumentConfigurationRef="IC1"
204 // startTimeStamp="2012-09-06T16:17:42.762Z"
205 // defaultSourceFileRef="RAW1"
206 // >
207 // <spectrumList
208 // count="3"
209 // defaultDataProcessingRef="ThermoRawFileParserProcessing"
210 // >
211 //
212 mp_cborOutput->startMap();
213 mpa_cborReader->enterContainer();
214 QCborMap tmp_map;
215
216 QStringList copy_tags;
217 copy_tags << "id" << "defaultInstrumentConfigurationRef" << "startTimeStamp"
218 << "defaultSourceFileRef";
219 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
220 {
222 qDebug() << m_expectedString;
223
224
225 if(copy_tags.contains(m_expectedString))
226 {
229 qDebug() << m_expectedString;
231 }
232
233 else if(m_expectedString == "spectrumList")
234 {
236 readSpectrumList(monitor);
237 }
238 else if(m_expectedString == "chromatogramList")
239 {
241 mpa_cborReader->readCborMap(tmp_map);
242 mp_cborOutput->writeCborMap(tmp_map);
243 }
244 else
245 {
247 QObject::tr("ERROR: %1 not expected in mzCBOR run").arg(m_expectedString));
248 }
249 }
250
251 mp_cborOutput->endMap();
252 mpa_cborReader->leaveContainer();
253}
254
255
256void
258{
259
260 // <spectrumList
261 // count="3"
262 // defaultDataProcessingRef="ThermoRawFileParserProcessing"
263 // >
264 //
265 mp_cborOutput->startMap();
266 mpa_cborReader->enterContainer();
267 QCborMap tmp_map;
268 QCborValue tmp_value;
269 QcborSpectrum cbor_spectrum;
270
271 SpectrumTube spectrum_tube;
272
273 QStringList copy_tags;
274 copy_tags << "defaultDataProcessingRef";
275 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
276 {
278 qDebug() << m_expectedString;
279
280
281 if(copy_tags.contains(m_expectedString))
282 {
284 mpa_cborReader->readCborValue(tmp_value);
285 mp_cborOutput->writeCborValue(tmp_value);
286 }
287 else if(m_expectedString == "count")
288 {
289 if(mpa_cborReader->isInteger())
290 {
291 monitor.setStatus(
292 QObject::tr("original spectrumList count=%1").arg(mpa_cborReader->toInteger()));
293 monitor.setTotalSteps(mpa_cborReader->toInteger());
294 }
295 mpa_cborReader->next();
296 }
297 else if(m_expectedString == "spectrum")
298 {
299 qDebug() << m_expectedString;
300
301 // this is an array
302 mpa_cborReader->enterContainer();
303 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
304 {
305 mpa_cborReader->readCborMap(cbor_spectrum);
306 monitor.count();
307 processQcborSpectrum(spectrum_tube, cbor_spectrum);
308 }
309
310
311 mpa_cborReader->leaveContainer();
312
313
314 monitor.setStatus(QObject::tr("new spectrumList count=%1").arg(spectrum_tube.size()));
315 mp_cborOutput->append("count");
316 mp_cborOutput->append((quint64)spectrum_tube.size());
318 mp_cborOutput->startArray();
319
320 spectrum_tube.flush(mp_cborOutput);
321
322 mp_cborOutput->endArray();
323 }
324 else
325 {
327 QObject::tr("ERROR: %1 not expected in mzCBOR spectrumList").arg(m_expectedString));
328 }
329 }
330
331
332 mp_cborOutput->endMap();
333 mpa_cborReader->leaveContainer();
334}
335
336void
338 QcborSpectrum &cbor_spectrum)
339{
340 qDebug() << cbor_spectrum.getId() << " mslevel=" << cbor_spectrum.getMsLevel();
341 cbor_spectrum.setId(QString("%1 oliv=%2").arg(cbor_spectrum.getId()).arg("cc"));
342 if(cbor_spectrum.getMsLevel() == 2)
343 {
344 spectrum_tube.push_back(cbor_spectrum);
345 }
346}
347} // namespace mzcbor
348} // namespace cbor
349} // namespace pappso
virtual void setStatus(const QString &status)=0
current status of the process
virtual void setTotalSteps(std::size_t total_number_of_steps)
use it if the number of steps is known in an algorithm the total number of steps is usefull to report...
virtual void count()=0
count steps report when a step is computed in an algorithm
static QString getVersion()
Definition utils.cpp:669
overrides QCborStreamWriter base class to provide convenient functions
MzcborCopyReplaceBase(CborStreamWriter *cbor_output_p, const QString &operation)
virtual void close()
convenient function to clean pointer before leaving
void readSpectrumList(pappso::UiMonitorInterface &monitor)
virtual void processQcborSpectrum(SpectrumTube &spectrum_tube, QcborSpectrum &cbor_spectrum)
void readRoot(pappso::UiMonitorInterface &monitor)
void readRun(pappso::UiMonitorInterface &monitor)
virtual void readCbor(QFile *cborp, pappso::UiMonitorInterface &monitor)
read mzCBOR file
const QString push_back(QcborSpectrum &spectrum)
void flush(pappso::cbor::CborStreamWriter *cbor_writer_p)
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39