libpappsomspp
Library for mass spectrometry
Toggle main menu visibility
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
29
#include "
mzcborcopyreplacebase.h
"
30
#include "
pappsomspp/core/pappsoexception.h
"
31
#include "
pappsomspp/core/utils.h
"
32
#include <qcbormap.h>
33
#include <qcontainerfwd.h>
34
#include <qlogging.h>
35
#include <qobject.h>
36
#include <qtypes.h>
37
namespace
pappso
38
{
39
namespace
cbor
40
{
41
namespace
mzcbor
42
{
43
MzcborCopyReplaceBase::MzcborCopyReplaceBase
(
CborStreamWriter
*cbor_output_p,
44
const
QString &operation)
45
{
46
47
mp_cborOutput
= cbor_output_p;
48
m_operation
= operation;
49
}
50
MzcborCopyReplaceBase::~MzcborCopyReplaceBase
()
51
{
52
}
53
54
void
55
MzcborCopyReplaceBase::close
()
56
{
57
}
58
59
void
60
MzcborCopyReplaceBase::readCbor
(QFile *cborp,
pappso::UiMonitorInterface
&monitor)
61
{
62
qDebug();
63
initCborReader
(cborp);
64
65
qDebug();
66
if
(
mpa_cborReader
->isMap())
67
{
68
readRoot
(monitor);
69
}
70
qDebug();
71
}
72
73
void
74
MzcborCopyReplaceBase::readCbor
(QIODevice *cborp,
pappso::UiMonitorInterface
&monitor)
75
{
76
qDebug();
77
initCborReader
(cborp);
78
79
qDebug();
80
if
(
mpa_cborReader
->isMap())
81
{
82
readRoot
(monitor);
83
}
84
qDebug();
85
}
86
87
void
88
MzcborCopyReplaceBase::readRoot
(
pappso::UiMonitorInterface
&monitor)
89
{
90
mp_cborOutput
->startMap();
91
mpa_cborReader
->enterContainer();
92
93
94
getExpectedString
();
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;
108
getExpectedString
();
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
{
128
getExpectedString
();
129
qDebug() <<
m_expectedString
;
130
131
132
if
(copy_tags.contains(
m_expectedString
))
133
{
134
mp_cborOutput
->append(
m_expectedString
);
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
{
148
throw
pappso::PappsoException
(
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
157
void
158
MzcborCopyReplaceBase::readCbor
(
pappso::UiMonitorInterface
&monitor)
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
170
getExpectedString
();
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
{
187
throw
pappso::PappsoException
(
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
197
void
198
MzcborCopyReplaceBase::readRun
(
pappso::UiMonitorInterface
&monitor)
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
{
221
getExpectedString
();
222
qDebug() <<
m_expectedString
;
223
224
225
if
(copy_tags.contains(
m_expectedString
))
226
{
227
mp_cborOutput
->append(
m_expectedString
);
228
getExpectedString
();
229
qDebug() <<
m_expectedString
;
230
mp_cborOutput
->append(
m_expectedString
);
231
}
232
233
else
if
(
m_expectedString
==
"spectrumList"
)
234
{
235
mp_cborOutput
->append(
m_expectedString
);
236
readSpectrumList
(monitor);
237
}
238
else
if
(
m_expectedString
==
"chromatogramList"
)
239
{
240
mp_cborOutput
->append(
m_expectedString
);
241
mpa_cborReader
->readCborMap(tmp_map);
242
mp_cborOutput
->writeCborMap(tmp_map);
243
}
244
else
245
{
246
throw
pappso::PappsoException
(
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
256
void
257
MzcborCopyReplaceBase::readSpectrumList
(
pappso::UiMonitorInterface
&monitor)
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
{
277
getExpectedString
();
278
qDebug() <<
m_expectedString
;
279
280
281
if
(copy_tags.contains(
m_expectedString
))
282
{
283
mp_cborOutput
->append(
m_expectedString
);
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
());
317
mp_cborOutput
->append(
m_expectedString
);
318
mp_cborOutput
->startArray();
319
320
spectrum_tube.
flush
(
mp_cborOutput
);
321
322
mp_cborOutput
->endArray();
323
}
324
else
325
{
326
throw
pappso::PappsoException
(
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
336
void
337
MzcborCopyReplaceBase::processQcborSpectrum
(
SpectrumTube
&spectrum_tube,
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
pappso::PappsoException
Definition
pappsoexception.h:41
pappso::UiMonitorInterface
Definition
uimonitorinterface.h:50
pappso::UiMonitorInterface::setStatus
virtual void setStatus(const QString &status)=0
current status of the process
pappso::UiMonitorInterface::setTotalSteps
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...
Definition
uimonitorinterface.h:66
pappso::UiMonitorInterface::count
virtual void count()=0
count steps report when a step is computed in an algorithm
pappso::Utils::getVersion
static QString getVersion()
Definition
utils.cpp:669
pappso::cbor::CborStreamReaderInterface::m_expectedString
QString m_expectedString
Definition
cborstreamreaderinterface.h:69
pappso::cbor::CborStreamReaderInterface::initCborReader
void initCborReader(QFile *pcborfile)
Definition
cborstreamreaderinterface.cpp:80
pappso::cbor::CborStreamReaderInterface::getExpectedString
bool getExpectedString()
Definition
cborstreamreaderinterface.cpp:54
pappso::cbor::CborStreamReaderInterface::mpa_cborReader
CborStreamReader * mpa_cborReader
Definition
cborstreamreaderinterface.h:68
pappso::cbor::CborStreamWriter
overrides QCborStreamWriter base class to provide convenient functions
Definition
cborstreamwriter.h:46
pappso::cbor::mzcbor::MzcborCopyReplaceBase::MzcborCopyReplaceBase
MzcborCopyReplaceBase(CborStreamWriter *cbor_output_p, const QString &operation)
Definition
mzcborcopyreplacebase.cpp:43
pappso::cbor::mzcbor::MzcborCopyReplaceBase::close
virtual void close()
convenient function to clean pointer before leaving
Definition
mzcborcopyreplacebase.cpp:55
pappso::cbor::mzcbor::MzcborCopyReplaceBase::readSpectrumList
void readSpectrumList(pappso::UiMonitorInterface &monitor)
Definition
mzcborcopyreplacebase.cpp:257
pappso::cbor::mzcbor::MzcborCopyReplaceBase::mp_cborOutput
CborStreamWriter * mp_cborOutput
Definition
mzcborcopyreplacebase.h:87
pappso::cbor::mzcbor::MzcborCopyReplaceBase::processQcborSpectrum
virtual void processQcborSpectrum(SpectrumTube &spectrum_tube, QcborSpectrum &cbor_spectrum)
Definition
mzcborcopyreplacebase.cpp:337
pappso::cbor::mzcbor::MzcborCopyReplaceBase::~MzcborCopyReplaceBase
virtual ~MzcborCopyReplaceBase()
Definition
mzcborcopyreplacebase.cpp:50
pappso::cbor::mzcbor::MzcborCopyReplaceBase::m_operation
QString m_operation
Definition
mzcborcopyreplacebase.h:88
pappso::cbor::mzcbor::MzcborCopyReplaceBase::readRoot
void readRoot(pappso::UiMonitorInterface &monitor)
Definition
mzcborcopyreplacebase.cpp:88
pappso::cbor::mzcbor::MzcborCopyReplaceBase::readRun
void readRun(pappso::UiMonitorInterface &monitor)
Definition
mzcborcopyreplacebase.cpp:198
pappso::cbor::mzcbor::MzcborCopyReplaceBase::readCbor
virtual void readCbor(QFile *cborp, pappso::UiMonitorInterface &monitor)
read mzCBOR file
Definition
mzcborcopyreplacebase.cpp:60
pappso::cbor::mzcbor::QcborSpectrum
Definition
qcborspectrum.h:48
pappso::cbor::mzcbor::QcborSpectrum::setId
void setId(const QString &id)
Definition
qcborspectrum.cpp:195
pappso::cbor::mzcbor::QcborSpectrum::getId
QString getId() const
Definition
qcborspectrum.cpp:159
pappso::cbor::mzcbor::QcborSpectrum::getMsLevel
int getMsLevel() const
Definition
qcborspectrum.cpp:251
pappso::cbor::mzcbor::SpectrumTube
Definition
spectrumtube.h:49
pappso::cbor::mzcbor::SpectrumTube::size
std::size_t size() const
Definition
spectrumtube.cpp:64
pappso::cbor::mzcbor::SpectrumTube::push_back
const QString push_back(QcborSpectrum &spectrum)
Definition
spectrumtube.cpp:69
pappso::cbor::mzcbor::SpectrumTube::flush
void flush(pappso::cbor::CborStreamWriter *cbor_writer_p)
Definition
spectrumtube.cpp:170
mzcborcopyreplacebase.h
pappso::cbor::mzcbor
Definition
binarydataarray.h:41
pappso::cbor
Definition
cborstreamreader.cpp:35
pappso
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition
aa.cpp:39
pappsoexception.h
utils.h
pappsomspp
core
processing
cbor
mzcbor
copyreplace
mzcborcopyreplacebase.cpp
Generated on
for libpappsomspp by
1.17.0