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, CvParamreadScan ()
Protected Member Functions inherited from pappso::cbor::mzcbor::MzcborReaderBase
void readRoot (pappso::UiMonitorInterface &monitor)
virtual void readReferenceableParamGroupList ()
std::map< QString, CvParamgetCvParamsMap ()
 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 MsRunReadConfigm_msRunReadConfig
SpectrumCollectionHandlerInterfacem_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
CborStreamReadermpa_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 43 of file mzcborspectrumcollectionreader.cpp.

44{
45}

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 63 of file mzcborspectrumcollectionreader.cpp.

64{
65 // qDebug();
66
67 mpa_cborReader->enterContainer();
68 bool ms_run_to_read = false;
69
70 while(getExpectedString())
71 {
72 if(m_expectedString == "id")
73 {
75
76 if((m_expectedString == m_xmlMzMlRunId) || (m_xmlMzMlRunId.isEmpty()))
77 {
78 ms_run_to_read = true;
79 }
80 }
81 else if(m_expectedString == "spectrumList")
82 {
83 if(ms_run_to_read)
84 {
86 }
87 else
88 {
89 mpa_cborReader->next();
90 }
91 }
92 else
93 {
94 mpa_cborReader->next();
95 }
96 }
97
98 mpa_cborReader->leaveContainer();
99}
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 363 of file mzcborspectrumcollectionreader.cpp.

364{
365 std::map<QString, CvParam> cv_params;
366 mpa_cborReader->enterContainer();
367 while(getExpectedString())
368 {
369 qDebug() << m_expectedString;
370 if(m_expectedString == "cvParam")
371 {
372 cv_params = getCvParamsMap();
373 }
374 else
375 {
376 mpa_cborReader->next();
377 }
378 }
379 mpa_cborReader->leaveContainer();
380 return cv_params;
381}
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 180 of file mzcborspectrumcollectionreader.cpp.

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

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

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

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: