libpappsomspp
Library for mass spectrometry
Toggle main menu visibility
Loading...
Searching...
No Matches
psmfilescanprocessandcopy.cpp
Go to the documentation of this file.
1
/**
2
* \file pappsomspp/processing/cbor/psm/psmfilescanprocessandcopy.cpp
3
* \date 15/07/2025
4
* \author Olivier Langella
5
* \brief PSM file reader designed to parallelize scan process and then copy the results in PSM cbor
6
* output stream
7
*/
8
9
/*******************************************************************************
10
* Copyright (c) 2025 Olivier Langella <Olivier.Langella@universite-paris-saclay.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
29
#include "
psmfilescanprocessandcopy.h
"
30
#include "
pappsomspp/core/pappsoexception.h
"
31
#include "
pappsomspp/core/utils.h
"
32
33
34
namespace
pappso
35
{
36
namespace
cbor
37
{
38
namespace
psm
39
{
40
41
PsmFileScanProcessAndCopy::PsmFileScanProcessAndCopy
(std::size_t buffer_scan_size,
42
CborStreamWriter
*cbor_output_p,
43
const
QString &operation)
44
:
PsmFileScanProcess
(buffer_scan_size)
45
{
46
mp_cborOutput
= cbor_output_p;
47
m_operation
= operation;
48
49
50
mp_cborOutput
->startMap();
51
mp_copyCborOutput
=
nullptr
;
52
}
53
54
55
PsmFileScanProcessAndCopy::~PsmFileScanProcessAndCopy
()
56
{
57
if
(
mpa_bufferAfterProteinMap
!=
nullptr
)
58
{
59
delete
mpa_bufferAfterProteinMap
;
60
}
61
if
(
mpa_bufferWriterAfterProteinMap
!=
nullptr
)
62
{
63
delete
mpa_bufferWriterAfterProteinMap
;
64
}
65
}
66
67
68
void
69
PsmFileScanProcessAndCopy::delayProteinMapInMemory
()
70
{
71
mp_copyCborOutput
=
mp_cborOutput
;
72
73
mpa_bufferAfterProteinMap
=
new
QBuffer();
74
mpa_bufferAfterProteinMap
->open(QIODevice::ReadWrite);
75
mpa_bufferWriterAfterProteinMap
=
new
pappso::cbor::CborStreamWriter
(
mpa_bufferAfterProteinMap
);
76
}
77
78
void
79
PsmFileScanProcessAndCopy::close
()
80
{
81
if
(
mp_copyCborOutput
==
nullptr
)
82
{
83
mp_cborOutput
->endMap();
84
}
85
else
86
{
87
88
// mpa_bufferWriterAfterProteinMap->endArray(); // end scan_list
89
// mpa_bufferWriterAfterProteinMap->endMap(); // end sample
90
// mpa_bufferWriterAfterProteinMap->endArray(); // end sample_list
91
92
mp_copyCborOutput
->append(
"protein_map"
);
93
m_psmNewProteinMap
.writeMap(*
mp_copyCborOutput
);
94
95
// copy buffer
96
97
mp_copyCborOutput
->append(
"sample_list"
);
98
99
// mpa_writer->startArray(); // sample_list
100
// mpa_writer->endArray(); // end sample_list
101
102
103
mpa_bufferAfterProteinMap
->seek(0);
104
// qWarning() << "size=" << mpa_buffer->data().size();
105
106
mp_copyCborOutput
->device()->write(
mpa_bufferAfterProteinMap
->data());
107
108
mp_copyCborOutput
->endMap();
109
}
110
}
111
112
void
113
PsmFileScanProcessAndCopy::informationsReady
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
114
{
115
mp_cborOutput
->writeInformations(
"pappsomspp_copy"
,
Utils::getVersion
(),
"psm"
,
m_operation
);
116
}
117
118
119
void
120
PsmFileScanProcessAndCopy::logReady
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
121
{
122
m_cborLog
.append(
m_cborInformations
);
123
mp_cborOutput
->append(
"log"
);
124
mp_cborOutput
->writeCborArray(
m_cborLog
);
125
}
126
127
void
128
PsmFileScanProcessAndCopy::parameterMapReady
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
129
{
130
mp_cborOutput
->append(
"parameter_map"
);
131
mp_cborOutput
->writeCborMap(
m_cborParameterMap
);
132
}
133
134
void
135
PsmFileScanProcessAndCopy::fastaFilesReady
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
136
{
137
// "target_fasta_files": ["zea_mays.fasta", "contaminant.fasta"],
138
if
(!
m_targetFastaFiles
.isEmpty())
139
{
140
mp_cborOutput
->append(
"target_fasta_files"
);
141
mp_cborOutput
->writeArray(
m_targetFastaFiles
);
142
}
143
//"decoy_fasta_files" : ["rev_zea_mays.fasta", "rev_contaminant.fasta"],
144
145
if
(!
m_decoyFastaFiles
.isEmpty())
146
{
147
mp_cborOutput
->append(
"decoy_fasta_files"
);
148
mp_cborOutput
->writeArray(
m_decoyFastaFiles
);
149
}
150
}
151
152
void
153
PsmFileScanProcessAndCopy::proteinMapReady
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
154
{
155
if
(
mp_copyCborOutput
==
nullptr
)
156
{
157
mp_cborOutput
->append(
"protein_map"
);
158
m_proteinMap
.writeMap(*
mp_cborOutput
);
159
}
160
else
161
{
162
// protein map writing is delayed : swap to temporary buffer writer
163
mp_cborOutput
=
mpa_bufferWriterAfterProteinMap
;
164
}
165
}
166
167
168
void
169
PsmFileScanProcessAndCopy::processBufferScanDone
(
pappso::UiMonitorInterface
&monitor
170
[[maybe_unused]])
171
{
172
173
// monitor.setStatus(QObject::tr("PsmFileScanProcessAndCopy::processBufferScanDone"));
174
for
(
CborScanMapBase
*cbor_scan_p :
m_cborScanList
)
175
{
176
// qDebug() << cbor_scan_p->keys();
177
cbor_scan_p->filterAndSortPsmList();
178
179
if
(
mp_copyCborOutput
!=
nullptr
)
180
{
181
// populate new protein map
182
cbor_scan_p->populateProteinMapUsingOldProteinMap(
m_proteinMap
,
m_psmNewProteinMap
);
183
}
184
185
186
// qWarning() << "PsmFileScanProcessAndCopy::processBufferScanDone "
187
// << cbor_scan_p->value("psm_list").toArray().size();
188
189
// cbor_scan_p->write(*mp_cborOutput);
190
mp_cborOutput
->writeCborMap(*cbor_scan_p);
191
192
if
(!cbor_scan_p->keys().contains(
"id"
))
193
{
194
throw
pappso::PappsoException
(
195
QObject::tr(
"missing scan id %1"
).arg(cbor_scan_p->keys().size()));
196
}
197
}
198
}
199
200
void
201
PsmFileScanProcessAndCopy::sampleStarted
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
202
{
203
mp_cborOutput
->startMap();
204
mp_cborOutput
->append(
"name"
);
205
mp_cborOutput
->append(
m_currentSampleName
);
206
if
(
m_currentIdentificationFileList
.size() > 0)
207
{
208
mp_cborOutput
->append(
"identification_file_list"
);
209
writePsmFileList
(*
mp_cborOutput
,
m_currentIdentificationFileList
);
210
}
211
mp_cborOutput
->append(
"peaklist_file"
);
212
writePsmFile
(*
mp_cborOutput
,
m_currentPeaklistFile
);
213
214
mp_cborOutput
->append(
"scan_list"
);
215
mp_cborOutput
->startArray();
216
}
217
218
void
219
PsmFileScanProcessAndCopy::sampleFinished
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
220
{
221
222
processBufferScan
(monitor);
223
clearScanBuffer
();
224
225
mp_cborOutput
->endArray();
226
mp_cborOutput
->endMap();
227
}
228
229
void
230
PsmFileScanProcessAndCopy::sampleListStarted
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
231
{
232
if
(
mp_copyCborOutput
==
nullptr
)
233
{
234
mp_cborOutput
->append(
"sample_list"
);
235
}
236
mp_cborOutput
->startArray();
237
}
238
239
void
240
PsmFileScanProcessAndCopy::sampleListFinished
(
pappso::UiMonitorInterface
&monitor [[maybe_unused]])
241
{
242
mp_cborOutput
->endArray();
243
}
244
245
246
}
// namespace psm
247
}
// namespace cbor
248
}
// namespace pappso
pappso::PappsoException
Definition
pappsoexception.h:41
pappso::UiMonitorInterface
Definition
uimonitorinterface.h:50
pappso::Utils::getVersion
static QString getVersion()
Definition
utils.cpp:669
pappso::cbor::CborStreamWriter
overrides QCborStreamWriter base class to provide convenient functions
Definition
cborstreamwriter.h:46
pappso::cbor::psm::PsmFileReaderBase::m_cborLog
QCborArray m_cborLog
Definition
psmfilereaderbase.h:134
pappso::cbor::psm::PsmFileReaderBase::m_currentPeaklistFile
PsmFile m_currentPeaklistFile
Definition
psmfilereaderbase.h:131
pappso::cbor::psm::PsmFileReaderBase::m_targetFastaFiles
QStringList m_targetFastaFiles
Definition
psmfilereaderbase.h:127
pappso::cbor::psm::PsmFileReaderBase::m_decoyFastaFiles
QStringList m_decoyFastaFiles
Definition
psmfilereaderbase.h:128
pappso::cbor::psm::PsmFileReaderBase::writePsmFileList
void writePsmFileList(CborStreamWriter &writer, const std::vector< PsmFile > &file_list)
Definition
psmfilereaderbase.cpp:333
pappso::cbor::psm::PsmFileReaderBase::m_currentSampleName
QString m_currentSampleName
Definition
psmfilereaderbase.h:130
pappso::cbor::psm::PsmFileReaderBase::m_proteinMap
PsmProteinMap m_proteinMap
Definition
psmfilereaderbase.h:129
pappso::cbor::psm::PsmFileReaderBase::m_cborParameterMap
QCborMap m_cborParameterMap
Definition
psmfilereaderbase.h:135
pappso::cbor::psm::PsmFileReaderBase::m_cborInformations
QCborMap m_cborInformations
Definition
psmfilereaderbase.h:133
pappso::cbor::psm::PsmFileReaderBase::m_currentIdentificationFileList
std::vector< PsmFile > m_currentIdentificationFileList
Definition
psmfilereaderbase.h:132
pappso::cbor::psm::PsmFileReaderBase::writePsmFile
void writePsmFile(CborStreamWriter &writer, const PsmFile &psm_file)
Definition
psmfilereaderbase.cpp:324
pappso::cbor::psm::PsmFileScanProcessAndCopy::delayProteinMapInMemory
void delayProteinMapInMemory()
Definition
psmfilescanprocessandcopy.cpp:69
pappso::cbor::psm::PsmFileScanProcessAndCopy::~PsmFileScanProcessAndCopy
virtual ~PsmFileScanProcessAndCopy()
Definition
psmfilescanprocessandcopy.cpp:55
pappso::cbor::psm::PsmFileScanProcessAndCopy::sampleStarted
void sampleStarted(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:201
pappso::cbor::psm::PsmFileScanProcessAndCopy::fastaFilesReady
void fastaFilesReady(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:135
pappso::cbor::psm::PsmFileScanProcessAndCopy::sampleFinished
void sampleFinished(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:219
pappso::cbor::psm::PsmFileScanProcessAndCopy::mp_cborOutput
CborStreamWriter * mp_cborOutput
Definition
psmfilescanprocessandcopy.h:87
pappso::cbor::psm::PsmFileScanProcessAndCopy::mp_copyCborOutput
CborStreamWriter * mp_copyCborOutput
Definition
psmfilescanprocessandcopy.h:88
pappso::cbor::psm::PsmFileScanProcessAndCopy::PsmFileScanProcessAndCopy
PsmFileScanProcessAndCopy(std::size_t buffer_scan_size, CborStreamWriter *cbor_output_p, const QString &operation)
Definition
psmfilescanprocessandcopy.cpp:41
pappso::cbor::psm::PsmFileScanProcessAndCopy::sampleListStarted
void sampleListStarted(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:230
pappso::cbor::psm::PsmFileScanProcessAndCopy::mpa_bufferWriterAfterProteinMap
pappso::cbor::CborStreamWriter * mpa_bufferWriterAfterProteinMap
Definition
psmfilescanprocessandcopy.h:94
pappso::cbor::psm::PsmFileScanProcessAndCopy::sampleListFinished
void sampleListFinished(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:240
pappso::cbor::psm::PsmFileScanProcessAndCopy::m_operation
QString m_operation
Definition
psmfilescanprocessandcopy.h:89
pappso::cbor::psm::PsmFileScanProcessAndCopy::proteinMapReady
virtual void proteinMapReady(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:153
pappso::cbor::psm::PsmFileScanProcessAndCopy::close
void close() override
convenient function to clean pointer before leaving
Definition
psmfilescanprocessandcopy.cpp:79
pappso::cbor::psm::PsmFileScanProcessAndCopy::informationsReady
void informationsReady(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:113
pappso::cbor::psm::PsmFileScanProcessAndCopy::mpa_bufferAfterProteinMap
QBuffer * mpa_bufferAfterProteinMap
Definition
psmfilescanprocessandcopy.h:93
pappso::cbor::psm::PsmFileScanProcessAndCopy::processBufferScanDone
virtual void processBufferScanDone(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:169
pappso::cbor::psm::PsmFileScanProcessAndCopy::parameterMapReady
void parameterMapReady(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:128
pappso::cbor::psm::PsmFileScanProcessAndCopy::logReady
void logReady(pappso::UiMonitorInterface &monitor) override
Definition
psmfilescanprocessandcopy.cpp:120
pappso::cbor::psm::PsmFileScanProcessAndCopy::m_psmNewProteinMap
pappso::cbor::psm::PsmProteinMap m_psmNewProteinMap
Definition
psmfilescanprocessandcopy.h:92
pappso::cbor::psm::PsmFileScanProcess::m_cborScanList
std::vector< CborScanMapBase * > m_cborScanList
Definition
psmfilescanprocess.h:74
pappso::cbor::psm::PsmFileScanProcess::CborScanMapBase
friend CborScanMapBase
Definition
psmfilescanprocess.h:49
pappso::cbor::psm::PsmFileScanProcess::PsmFileScanProcess
PsmFileScanProcess(std::size_t buffer_scan_size)
Definition
psmfilescanprocess.cpp:41
pappso::cbor::psm::PsmFileScanProcess::processBufferScan
virtual void processBufferScan(pappso::UiMonitorInterface &monitor)
Definition
psmfilescanprocess.cpp:102
pappso::cbor::psm::PsmFileScanProcess::clearScanBuffer
void clearScanBuffer()
Definition
psmfilescanprocess.cpp:51
pappso::cbor::psm
Definition
cborscanmapbase.h:40
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
psmfilescanprocessandcopy.h
utils.h
pappsomspp
core
processing
cbor
psm
psmfilescanprocessandcopy.cpp
Generated on
for libpappsomspp by
1.17.0