libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
pappso::cbor::mzcbor::MzcborSpectrumCollectionReader Class Reference

#include <mzcborspectrumcollectionreader.h>

Inheritance diagram for pappso::cbor::mzcbor::MzcborSpectrumCollectionReader:
pappso::cbor::mzcbor::MzcborReaderBase pappso::cbor::CborStreamReaderInterface

Public Member Functions

 MzcborSpectrumCollectionReader (const MsRunReadConfig &config, SpectrumCollectionHandlerInterface &handler)
virtual ~MzcborSpectrumCollectionReader ()
void setMsRunId (const MsRunIdCstSPtr &msrun_id)
void setNativeId2SpectrumIndexMapPtr (const std::map< QString, std::size_t > *nativeId2SpectrumIndexMap)
Public Member Functions inherited from pappso::cbor::mzcbor::MzcborReaderBase
 MzcborReaderBase ()
virtual ~MzcborReaderBase ()
virtual void readCbor (QFile *cborp, pappso::UiMonitorInterface &monitor)
 read mzCBOR file
virtual void readCbor (QIODevice *cborp, pappso::UiMonitorInterface &monitor)
 read mzCBOR from any device (memory buffer or else)
virtual void close ()
 convenient function to clean pointer before leaving
bool isMzcbor () const
const QStringList & getMsrunIdList () const
Public Member Functions inherited from pappso::cbor::CborStreamReaderInterface
 CborStreamReaderInterface ()
virtual ~CborStreamReaderInterface ()

Protected Member Functions

virtual void readMsrun () override
 read only the targeted msrun
void readSpectrumListAndLeave ()
 only the spectrum list of targeted msrun, then stop parsing
void readSpectrum (std::size_t index_count, bool want_binary_data)
 read each spectrum in the targeted msrun (msrunId)
std::map< QString, CvParam > readScan ()
Protected Member Functions inherited from pappso::cbor::mzcbor::MzcborReaderBase
void readRoot (pappso::UiMonitorInterface &monitor)
virtual void readReferenceableParamGroupList ()
std::map< QString, CvParam > getCvParamsMap ()
 read the array containing cvParams to give accessions and values
Protected Member Functions inherited from pappso::cbor::CborStreamReaderInterface
bool getExpectedString ()
void initCborReader (QFile *pcborfile)
void initCborReader (QIODevice *pcborfile)

Private Attributes

const MsRunReadConfig & m_msRunReadConfig
SpectrumCollectionHandlerInterface & m_SpectrumCollectionHandlerInterface
MsRunIdCstSPtr mcsp_msRunId
QString m_xmlMzMlRunId
const std::map< QString, std::size_t > * mp_nativeId2SpectrumIndexMap = nullptr

Additional Inherited Members

Protected Attributes inherited from pappso::cbor::mzcbor::MzcborReaderBase
bool m_stopParsing = false
Protected Attributes inherited from pappso::cbor::CborStreamReaderInterface
CborStreamReader * mpa_cborReader = nullptr
QString m_expectedString
QByteArray m_data

Detailed Description

Todo
write docs

Definition at line 45 of file mzcborspectrumcollectionreader.h.

Constructor & Destructor Documentation

◆ MzcborSpectrumCollectionReader()

pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::MzcborSpectrumCollectionReader ( const MsRunReadConfig & config,
SpectrumCollectionHandlerInterface & handler )

◆ ~MzcborSpectrumCollectionReader()

pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::~MzcborSpectrumCollectionReader ( )
virtual

Destructor

Definition at line 45 of file mzcborspectrumcollectionreader.cpp.

46{
47}

Member Function Documentation

◆ readMsrun()

void pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::readMsrun ( )
overrideprotectedvirtual

read only the targeted msrun

Reimplemented from pappso::cbor::mzcbor::MzcborReaderBase.

Definition at line 65 of file mzcborspectrumcollectionreader.cpp.

66{
67 // qDebug();
68
69 mpa_cborReader->enterContainer();
70 bool ms_run_to_read = false;
71
72 while(getExpectedString())
73 {
74 if(m_expectedString == "id")
75 {
77
78 if((m_expectedString == m_xmlMzMlRunId) || (m_xmlMzMlRunId.isEmpty()))
79 {
80 ms_run_to_read = true;
81 }
82 }
83 else if(m_expectedString == "spectrumList")
84 {
85 if(ms_run_to_read)
86 {
88 }
89 else
90 {
91 mpa_cborReader->next();
92 }
93 }
94 else
95 {
96 mpa_cborReader->next();
97 }
98 }
99
100 mpa_cborReader->leaveContainer();
101}
void readSpectrumListAndLeave()
only the spectrum list of targeted msrun, then stop parsing

References pappso::cbor::CborStreamReaderInterface::getExpectedString(), pappso::cbor::CborStreamReaderInterface::m_expectedString, m_xmlMzMlRunId, pappso::cbor::CborStreamReaderInterface::mpa_cborReader, and readSpectrumListAndLeave().

◆ readScan()

std::map< QString, pappso::cbor::mzcbor::CvParam > pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::readScan ( )
protected

Definition at line 416 of file mzcborspectrumcollectionreader.cpp.

417{
418 std::map<QString, CvParam> cv_params;
419 mpa_cborReader->enterContainer();
420 while(getExpectedString())
421 {
422 qDebug() << m_expectedString;
423 if(m_expectedString == "cvParam")
424 {
425 cv_params = getCvParamsMap();
426 }
427 else
428 {
429 mpa_cborReader->next();
430 }
431 }
432 mpa_cborReader->leaveContainer();
433 return cv_params;
434}
std::map< QString, CvParam > getCvParamsMap()
read the array containing cvParams to give accessions and values

References pappso::cbor::mzcbor::MzcborReaderBase::getCvParamsMap(), pappso::cbor::CborStreamReaderInterface::getExpectedString(), pappso::cbor::CborStreamReaderInterface::m_expectedString, and pappso::cbor::CborStreamReaderInterface::mpa_cborReader.

◆ readSpectrum()

void pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::readSpectrum ( std::size_t index_count,
bool want_binary_data )
protected

read each spectrum in the targeted msrun (msrunId)

Definition at line 182 of file mzcborspectrumcollectionreader.cpp.

184{
185
186 qDebug() << index_count << " " << want_binary_data;
187 try
188 {
189 Spectrum cbor_spectrum;
190 cbor_spectrum.fromCbor(*mpa_cborReader, want_binary_data);
191 //<spectrum id="controllerType=0 controllerNumber=1 scan=1" index="0"
192 // defaultArrayLength="1552">
193
194
195 // Now, with or without the peak list, we have to craft a qualified mass
196 // spectrum that will hold all the metadata about the data potentially
197 // found in it.
198 QualifiedMassSpectrum qualified_mass_spectrum;
199
200 MassSpectrumId spectrum_id(mcsp_msRunId, cbor_spectrum.index);
201 spectrum_id.setNativeId(cbor_spectrum.id);
202
203 spectrum_id.setSpectrumIndex(cbor_spectrum.index);
204
205 qualified_mass_spectrum.setMassSpectrumId(spectrum_id);
206 qualified_mass_spectrum.setRtInSeconds(cbor_spectrum.getRtInSeconds());
207
208
209 if(cbor_spectrum.precursorList.size() > 0)
210 {
211 qualified_mass_spectrum.setPrecursorNativeId(
212 cbor_spectrum.precursorList.at(0).spectrumRef);
213 if(mp_nativeId2SpectrumIndexMap != nullptr)
214 {
215 auto it =
216 mp_nativeId2SpectrumIndexMap->find(cbor_spectrum.precursorList.at(0).spectrumRef);
217 if(it != mp_nativeId2SpectrumIndexMap->end())
218 {
219 qualified_mass_spectrum.setPrecursorSpectrumIndex(it->second);
220 }
221 }
222
223 for(auto &precursor : cbor_spectrum.precursorList)
224 {
225 // *****************************************************
226 // get isolation window (very simplified)
227 // *****************************************************
228
229 try
230 {
231 // qWarning() << "pappso::MzcborMsRunReader::qualifiedMassSpectrum";
232 qualified_mass_spectrum.setParameterValue(
234 precursor.isolationWindow.getTargetMz());
235
236
237 auto it = precursor.isolationWindow.cvParamMap.find("MS:1000828");
238
239 if(it == precursor.isolationWindow.cvParamMap.end())
240 {
241 throw pappso::ExceptionNotFound(QObject::tr(
242 "isolation window lower offset MS:1000828 not found in cvParam map"));
243 }
244 qualified_mass_spectrum.setParameterValue(
246 it->second.valueDouble);
247
248
249 it = precursor.isolationWindow.cvParamMap.find("MS:1000829");
250
251 if(it == precursor.isolationWindow.cvParamMap.end())
252 {
253 throw pappso::ExceptionNotFound(QObject::tr(
254 "isolation window upper offset MS:1000829 not found in cvParam map"));
255 }
256
257 qualified_mass_spectrum.setParameterValue(
259 it->second.valueDouble);
260 }
261 catch(const pappso::ExceptionNotFound &not_found)
262 {
263 // isolation window not available
264 // throw not_found;
265 }
266 // *****************************************************
267 // end get isolation window (very simplified)
268 // *****************************************************
269
270 PrecursorIonData ion_data;
271 ion_data.mz = precursor.isolationWindow.getTargetMz();
272 for(auto &selected_ion : precursor.selectedIonList)
273 {
274 ion_data.charge = selected_ion.getChargeState();
275
276 bool is_ok;
277 ion_data.intensity = selected_ion.getIntensity(&is_ok);
278 ion_data.mz = selected_ion.getMz();
279
280 qualified_mass_spectrum.appendPrecursorIonData(ion_data);
281 }
282 }
283 }
284
285 qDebug();
286 qualified_mass_spectrum.setMsLevel(cbor_spectrum.getMsLevel());
287
288 qDebug();
289 qualified_mass_spectrum.setEmptyMassSpectrum(!cbor_spectrum.defaultArrayLength);
290
291 if(cbor_spectrum.binaryDataArrayList.size() == 2)
292 {
293 qDebug();
294 MassSpectrumSPtr mass_spectrum_sp = std::make_shared<MassSpectrum>();
295 qDebug();
296 cbor_spectrum.decodeTrace(*(mass_spectrum_sp.get()));
297 qDebug();
298 qualified_mass_spectrum.setMassSpectrumSPtr(mass_spectrum_sp);
299 qDebug();
300 }
301
302 qDebug() << "spectrum_id.getNativeId()=" << spectrum_id.getNativeId();
303 qDebug() << "rt=" << qualified_mass_spectrum.getRtInSeconds();
304 qDebug() << "mslevel=" << qualified_mass_spectrum.getMsLevel();
305
306 if(m_msRunReadConfig.acceptMsLevel(qualified_mass_spectrum.getMsLevel()))
307 {
308 if(m_msRunReadConfig.acceptRetentionTimeInSeconds(
309 qualified_mass_spectrum.getRtInSeconds()))
310 {
311
312 if(qualified_mass_spectrum.getMassSpectrumId().getSpectrumIndex() ==
313 std::numeric_limits<std::size_t>::max())
314 {
315 throw pappso::PappsoException(
316 QObject::tr("ERROR in %1 spectrum index not initialised").arg(__FUNCTION__));
317 }
318 m_SpectrumCollectionHandlerInterface.setQualifiedMassSpectrum(
319 qualified_mass_spectrum);
320 }
321 }
322
323 /*
324 *
325 <cvParam cvRef="MS" accession="MS:1000579" value="" name="MS1 spectrum" />
326 <cvParam cvRef="MS" accession="MS:1000130" value="" name="positive scan" />
327 <cvParam cvRef="MS" accession="MS:1000285" value="17377980" name="total ion current" />
328 <cvParam cvRef="MS" accession="MS:1000127" value="" name="centroid spectrum" />
329 <cvParam cvRef="MS" accession="MS:1000504" value="519.138854980469" name="base peak m/z"
330 unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS" />
331 <cvParam cvRef="MS"
332 accession="MS:1000505" value="1702482.375" name="base peak intensity"
333 unitAccession="MS:1000131" unitName="number of detector counts" unitCvRef="MS" /> <cvParam
334 cvRef="MS" accession="MS:1000528" value="400.153411865234" name="lowest observed m/z"
335 unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS" /> <cvParam cvRef="MS"
336 accession="MS:1000527" value="1013.12335205078" name="highest observed m/z"
337 unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS" /> <scanList count="1"> <cvParam
338 cvRef="MS" accession="MS:1000795" value="" name="no combination" /> <scan
339 instrumentConfigurationRef="IC1"> <cvParam cvRef="MS" accession="MS:1000016"
340 value="0.0048758833" name="scan start time" unitAccession="UO:0000031" unitName="minute"
341 unitCvRef="UO" /> <cvParam cvRef="MS" accession="MS:1000512" value="FTMS + p NSI Full lock ms
342 [400.00-1400.00]" name="filter string" /> <cvParam cvRef="MS" accession="MS:1000927"
343 value="250" name="ion injection time" unitAccession="UO:0000028" unitName="millisecond"
344 unitCvRef="UO" /> <scanWindowList count="1"> <scanWindow> <cvParam cvRef="MS"
345 accession="MS:1000501" value="400" name="scan window lower limit" unitAccession="MS:1000040"
346 unitName="m/z" unitCvRef="MS" /> <cvParam cvRef="MS" accession="MS:1000500" value="1400"
347 name="scan window upper limit" unitAccession="MS:1000040" unitName="m/z" unitCvRef="MS" />
348 </scanWindow>
349 </scanWindowList>
350 </scan>
351 </scanList>
352 <binaryDataArrayList count="2">
353 */
354
355 // qDebug();
356 // Get the native pwiz-spectrum from the spectrum list.
357 // Note that this pointer is a shared pointer from pwiz.
358 /*
359 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp =
360 getPwizSpectrumPtr(spectrum_list_p.get(), iter, want_binary_data);
361 // qDebug();
362
363 // Instantiate the mass spectrum id that will hold critical information
364 // like the the native id string and the spectrum index.
365
366 MassSpectrumId massSpectrumId(mcsp_msRunId, iter);
367
368 // qDebug();
369 // Get the spectrum native id as a QString to store it in the mass
370 // spectrum id class. This is will allow later to refer to the same
371 // spectrum starting back from the file.
372
373 QString native_id = QString::fromStdString(native_pwiz_spectrum_sp->id);
374 massSpectrumId.setNativeId(native_id);
375
376 // Finally, instantiate the qualified mass spectrum with its id. This
377 // function will continue performing pappso-spectrum detailed
378 // qualification.
379
380 bool ok = false;
381
382 QualifiedMassSpectrum qualified_mass_spectrum = qualifiedMassSpectrumFromPwizSpectrumPtr(
383 massSpectrumId, native_pwiz_spectrum_sp.get(), want_binary_data, ok);
384
385 if(!ok)
386 {
387 // qDebug() << "Encountered a mass spectrum for which the returned "
388 //"status is bad.";
389 continue;
390 }
391
392 // qDebug();
393 // Before handing the mass spectrum out to the m_SpectrumCollectionHandlerInterface, see if
394 // the native mass spectrum was empty or not.
395
396 // if(!native_pwiz_spectrum_sp->defaultArrayLength)
397 // qDebug() << "The mass spectrum has not defaultArrayLength";
398
399 qualified_mass_spectrum.setEmptyMassSpectrum(!native_pwiz_spectrum_sp->defaultArrayLength);
400
401 // The m_SpectrumCollectionHandlerInterface will receive the index of the mass spectrum in
402 the
403 // current run via the mass spectrum id member datum.
404
405 // qDebug();
406 */
407 }
408 catch(pappso::PappsoException &error)
409 {
410 throw pappso::PappsoException(
411 QObject::tr("ERROR reading spectrum index %1 :\%2").arg(index_count).arg(error.qwhat()));
412 }
413}
virtual const QString & qwhat() const
const std::map< QString, std::size_t > * mp_nativeId2SpectrumIndexMap
@ IsolationWindowTargetMz
Isolation m/z value isolation window target m/z (thomson).
@ IsolationWindowUpperOffset
isolation window upper offset (thomson)
@ IsolationWindowLowerOffset
isolation window lower offset (thomson)
std::shared_ptr< MassSpectrum > MassSpectrumSPtr

References pappso::QualifiedMassSpectrum::appendPrecursorIonData(), pappso::cbor::mzcbor::Spectrum::binaryDataArrayList, pappso::PrecursorIonData::charge, pappso::cbor::mzcbor::Spectrum::decodeTrace(), pappso::cbor::mzcbor::Spectrum::defaultArrayLength, pappso::cbor::mzcbor::Spectrum::fromCbor(), pappso::QualifiedMassSpectrum::getMassSpectrumId(), pappso::cbor::mzcbor::Spectrum::getMsLevel(), pappso::QualifiedMassSpectrum::getMsLevel(), pappso::MassSpectrumId::getNativeId(), pappso::cbor::mzcbor::Spectrum::getRtInSeconds(), pappso::QualifiedMassSpectrum::getRtInSeconds(), pappso::MassSpectrumId::getSpectrumIndex(), pappso::cbor::mzcbor::Spectrum::id, pappso::cbor::mzcbor::Spectrum::index, pappso::PrecursorIonData::intensity, pappso::IsolationWindowLowerOffset, pappso::IsolationWindowTargetMz, pappso::IsolationWindowUpperOffset, m_msRunReadConfig, m_SpectrumCollectionHandlerInterface, mcsp_msRunId, mp_nativeId2SpectrumIndexMap, pappso::cbor::CborStreamReaderInterface::mpa_cborReader, pappso::PrecursorIonData::mz, pappso::cbor::mzcbor::Spectrum::precursorList, pappso::PappsoException::qwhat(), pappso::QualifiedMassSpectrum::setEmptyMassSpectrum(), pappso::QualifiedMassSpectrum::setMassSpectrumId(), pappso::QualifiedMassSpectrum::setMassSpectrumSPtr(), pappso::QualifiedMassSpectrum::setMsLevel(), pappso::MassSpectrumId::setNativeId(), pappso::QualifiedMassSpectrum::setParameterValue(), pappso::QualifiedMassSpectrum::setPrecursorNativeId(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), and pappso::MassSpectrumId::setSpectrumIndex().

Referenced by readSpectrumListAndLeave().

◆ readSpectrumListAndLeave()

void pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::readSpectrumListAndLeave ( )
protected

only the spectrum list of targeted msrun, then stop parsing

Definition at line 104 of file mzcborspectrumcollectionreader.cpp.

105{
106 mpa_cborReader->enterContainer();
107 // We want to iterate in the pwiz-spectrum-list and for each pwiz-spectrum
108 // create a pappso-spectrum (QualifiedMassSpectrum). Once the pappso mass
109 // spectrum has been fully qualified (that is, the member data have been
110 // set), it is transferred to the m_SpectrumCollectionHandlerInterface passed as parameter to this
111 // function for the consumer to do what it wants with it.
112
113 // Does the m_SpectrumCollectionHandlerInterface consuming the mass spectra read from file want
114 // these mass spectra to hold the binary data arrays (mz/i vectors)?
115
116 const bool want_binary_data = m_msRunReadConfig.needPeakList();
117
118
119 // qDebug();
120
121 // We'll need it to perform the looping in the spectrum list.
122 std::size_t spectrum_list_size = 0;
123
124 // qDebug() << "The spectrum list has size:" << spectrum_list_size;
125
126 while(getExpectedString())
127 {
128
129 qDebug() << m_expectedString;
130 if(m_expectedString == "count")
131 {
132 if(mpa_cborReader->isUnsignedInteger())
133 {
134 spectrum_list_size = mpa_cborReader->toUnsignedInteger();
135 mpa_cborReader->next();
136 qDebug() << "spectrum count=" << spectrum_list_size;
137 }
138
139 // Inform the m_SpectrumCollectionHandlerInterface of the spectrum list so that it can
140 // handle feedback to the user.
141 m_SpectrumCollectionHandlerInterface.spectrumListHasSize(spectrum_list_size);
142 }
143 else if(m_expectedString == "spectrum")
144 {
145
146 mpa_cborReader->enterContainer(); // start array
147
148 std::size_t index_count = 0;
149 while(mpa_cborReader->hasNext())
150 {
151 // If the user of this reader instance wants to stop reading the
152 // spectra, then break this loop.
154 {
155 qDebug() << "The operation was cancelled. Breaking the loop.";
156 m_stopParsing = true;
157 return;
158 }
159
160 readSpectrum(index_count, want_binary_data);
161 index_count++;
162 }
163
164 mpa_cborReader->leaveContainer(); // stop array
165 }
166 else
167 {
168 mpa_cborReader->next();
169 }
170 }
171
172
173 qDebug() << "Loading ended";
175
176 mpa_cborReader->leaveContainer();
177 m_stopParsing = true;
178}
void readSpectrum(std::size_t index_count, bool want_binary_data)
read each spectrum in the targeted msrun (msrunId)

References pappso::cbor::CborStreamReaderInterface::getExpectedString(), pappso::cbor::CborStreamReaderInterface::m_expectedString, m_msRunReadConfig, m_SpectrumCollectionHandlerInterface, pappso::cbor::mzcbor::MzcborReaderBase::m_stopParsing, pappso::cbor::CborStreamReaderInterface::mpa_cborReader, and readSpectrum().

Referenced by readMsrun().

◆ setMsRunId()

void pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::setMsRunId ( const MsRunIdCstSPtr & msrun_id)

Definition at line 50 of file mzcborspectrumcollectionreader.cpp.

51{
52 mcsp_msRunId = msrun_id;
53 m_xmlMzMlRunId = mcsp_msRunId.get()->getRunId();
54}

References m_xmlMzMlRunId, and mcsp_msRunId.

Referenced by pappso::MzcborMsRunReader::readSpectrumCollectionWithMsrunReadConfig().

◆ setNativeId2SpectrumIndexMapPtr()

void pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::setNativeId2SpectrumIndexMapPtr ( const std::map< QString, std::size_t > * nativeId2SpectrumIndexMap)

Member Data Documentation

◆ m_msRunReadConfig

const MsRunReadConfig& pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::m_msRunReadConfig
private

◆ m_SpectrumCollectionHandlerInterface

SpectrumCollectionHandlerInterface& pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::m_SpectrumCollectionHandlerInterface
private

◆ m_xmlMzMlRunId

QString pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::m_xmlMzMlRunId
private

Definition at line 84 of file mzcborspectrumcollectionreader.h.

Referenced by readMsrun(), and setMsRunId().

◆ mcsp_msRunId

MsRunIdCstSPtr pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::mcsp_msRunId
private

Definition at line 83 of file mzcborspectrumcollectionreader.h.

Referenced by readSpectrum(), and setMsRunId().

◆ mp_nativeId2SpectrumIndexMap

const std::map<QString, std::size_t>* pappso::cbor::mzcbor::MzcborSpectrumCollectionReader::mp_nativeId2SpectrumIndexMap = nullptr
private

The documentation for this class was generated from the following files: